SEO和渐进式网络应用:展望未来

栏目: JavaScript · 发布时间: 4年前

内容简介:SEO的从业者一直不信任JavaScript。这部分是基于经验; 搜索引擎发现,抓取和准确索引严重依赖JavaScript的内容的能力在历史上一直很差。但它也是习惯性的,源于对所有形式的JavaScript的一般警惕,而不是基于理解或经验。这表明它依赖于多年来一直没有相关的传统SEO技术,并且认为擅长技术SEO并不需要理解现代Web开发。正如Mike King在他的文章“技术SEO文艺复兴”中所写的那样,这些态度促使“SEO作为营销领域不断增长的技术知识差距,使许多SEO难以解决我们的新问题”。他们还让SE

SEO的从业者一直不信任JavaScript。

这部分是基于经验; 搜索引擎发现,抓取和准确索引严重依赖JavaScript的内容的能力在历史上一直很差。但它也是习惯性的,源于对所有形式的JavaScript的一般警惕,而不是基于理解或经验。这表明它依赖于多年来一直没有相关的传统SEO技术,并且认为擅长技术SEO并不需要理解现代Web开发。

正如Mike King在他的文章“技术SEO文艺复兴”中所写的那样,这些态度促使“SEO作为营销领域不断增长的技术知识差距,使许多SEO难以解决我们的新问题”。他们还让SEO从业者面临被抛弃的风险,因为我们中有太多人拒绝探索 – 更不用说拥抱 – 渐进式网络应用程序(PWA),现代JavaScript框架以及其他越来越被视为网络的未来。

在本文中,我将重新审视PWA。除了探索搜索引擎优化和可用性的影响之外,我还将展示一些你可能没有听说过的现代框架和构建工具,并提出如果我们要把自己置于技术前沿,我们需要适应的方式的网络。

1.回顾:PWA,SPA和服务人员

渐进式Web应用程序本质上是提供类似于本机应用程序的用户体验的网站。推送通知等功能可让您轻松重新与受众群体互动,同时用户可以将自己喜爱的网站添加到主屏幕,而不会出现应用商店的复杂情况。PWA可以继续脱机或在低质量网络上运行,并且可以在移动设备上实现顶级全屏体验,这种体验更接近原生iOS和Android应用程序提供的体验。

最重要的是,PWA在保留 – 甚至增强 – 网络的基本开放和可访问性的同时做到了这一点。正如名称所暗示的那样,它们具有渐进性和响应性,旨在为每个用户提供服务,无论他们选择何种浏览器或设备。它们也可以自动保持最新状态 – 正如我们将要看到的 – 可以像传统网站一样被发现和链接。最后,它不是全部或全部:现有网站可以部署这些技术的有限子集(使用简单的服务工作者)并立即开始获得收益。

该规范仍然相当年轻,当然,有些领域需要工作,但这并不能阻止它们成为十年来网络能力的最大进步之一。PWA的采用正在迅速发展,组织正在发现他们可以影响的无数现实商业目标。

您可以在Google Developers上阅读有关PWA功能和要求的更多信息,但使PWA成为可能的两项关键技术包括:

App Shell架构:通常使用像React或Angular这样的JavaScript框架来实现,这是指构建单页应用程序(SPA)的方法,它将逻辑与实际内容分开。将app shell视为您的应用需要运行的最小HTML,CSS和JS; UI的骨架,可以缓存。

服务工作者:浏览器在后台运行的一个特殊脚本,与您的页面分开。它本质上充当代理,以编程方式拦截和处理来自页面的网络请求。

请注意,这些技术并不相互排斥; 单页应用程序模型(在2010年与AngularJS一起成熟)显然早于服务工作者和PWA一段时间。正如我们将要看到的,创建一个不是单页面应用程序的PWA也是完全可能的。然而,出于本文的目的,我们将关注开发现代PWA的“典型”方法,探索选择加入快速增长的组织的团队所面临的SEO影响和机遇。利用上述两种技术。

我们将从app shell架构和单页面应用程序模型的渲染含义开始。

2. app shell架构

网址

简而言之,app shell架构包括积极地缓存静态资产(最低限度的UI和功能),然后使用JavaScript动态加载实际内容。大多数现代JavaScript SPA框架都鼓励类似于这种方法的东西,以这种方式分离逻辑和内容有利于速度和可用性。交互感觉很快,就像在本机应用程序上那样,数据使用非常经济。

感谢https://developers.google.com/web/fundamentals/architecture/app-shell

正如我在介绍中所提到的,严重依赖客户端JavaScript是SEO的问题。从历史上看,其中许多问题都集中在以下事实:虽然搜索爬虫需要唯一的URL来发现和索引内容,但单页应用程序不需要更改应用程序或网站的每个状态的URL(因此,短语“单页” )。对片段标识符的依赖 – 不是作为HTTP请求的一部分发送 – 动态操作内容而不重新加载页面是SEO的一个主要问题。遗留解决方案涉及用所谓的hashbang(#!)和_escaped_fragment_参数替换散列,这个hack早已被弃用,我们今天不会探索。

感谢HTML5历史API和pushState方法,我们现在有了更好的解决方案。可以使用JavaScript更改浏览器的URL栏,而无需重新加载页面,从而使其与应用程序或站点的状态保持同步,并允许用户有效使用浏览器的“后退”按钮。虽然此解决方案不是灵丹妙药 – 您的服务器必须配置为通过将应用程序加载到正确的初始状态来响应对这些深层URL的请求 – 它确实为我们提供了解决SPA中URL问题的工具。

//在你的控制台中运行它来修改你的URL

//浏览器 – 请注意页面实际上并没有重新加载。

history.pushState(null,“Page 2”,“/ page2.html”);

今天SEO面临的更大问题实际上更容易理解:渲染内容,即何时以及如何完成。

渲染内容

请注意,当我在这里引用渲染时,我指的是构造HTML的过程。我们关注的是实际内容如何进入浏览器,而不是将像素绘制到屏幕上的过程。

在网络的早期阶段,事情在这方面更简单。服务器通常会返回呈现页面所需的所有HTML。然而,如今,许多使用单页面应用程序框架的网站只从服务器提供最少的HTML,并将繁重的工作委托给客户端(无论是用户还是机器人)。鉴于网络的规模,这需要大量的时间和计算资源,而且正如谷歌在2018年的I / O大会上明确指出的那样,这对搜索引擎构成了一个主要问题:

“谷歌搜索中的JavaScript驱动网站的呈现推迟到Googlebot有可用于处理该内容的资源。”

在较大的网站上,第二波指数化有时会延迟几天。除此之外,您可能会遇到许多关键信息的问题,例如规范标签和完全错过的元数据。我强烈建议观看Google关于此主题的精彩演讲视频,了解现代搜索爬虫所面临的一些挑战。

谷歌是极少数提供JavaScript的搜索引擎之一。更重要的是,它使用网络渲染服务,直到最近才基于Chrome 41(2015年发布)。显然,这仅仅是单页应用程序的含义,JavaScript SEO的更广泛的主题是一个迷人的领域。Rachel Costello 最近关于JavaScript SEO的白皮书是我读过的关于这个主题的最佳资源,它包括其他专家的贡献,如BartoszGóralewicz,Alexis Sanders,Addy Osmani等等。

出于本文的目的,这里的关键点是,在2019年,您不能依赖搜索引擎来准确地抓取和呈现依赖于JavaScript的Web应用程序。如果您的内容是在客户端呈现的,那么Google会抓取大量资源,而您的网站在搜索中的效果会不佳。无论你听到什么相反,如果有机搜索是你网站的一个有价值的渠道,你需要为服务器端渲染做好准备。

但服务器端渲染是一个经常被误解的概念……

“实现服务器端呈现”

这是一个常见的搜索引擎优化审计建议,我经常听到它被抛出,好像它是一个独立的,易于采取行动的解决方案。充其量只是对一项巨大的技术任务的过度简化,最糟糕的是,这是对有关网站可能/必要/有益的误解。服务器端渲染是许多可能设置的结果,可以通过许多不同的方式实现; 但最终,我们关心的是让我们的服务器返回静态HTML。

那么,我们有什么选择呢?让我们稍微分解服务器端呈现内容的概念并探索我们的选择。这些是Google在上述I / O大会上概述的高级方法:

动态渲染 – 在这里,普通浏览器获得需要客户端渲染的“标准”Web应用程序,而机器人(例如Googlebot和社交媒体服务)则提供静态快照。这包括在服务器基础结构上添加一个额外的步骤,即获取Web应用程序,呈现内容的服务,然后根据用户代理(即UA嗅探)将静态HTML返回给机器人。从历史上看,这是通过像PhantomJS这样的服务完成的(现已弃用,不再开发),而今天Puppeteer(无头Chrome)可以执行类似的功能。主要优点是它通常可以固定在您现有的基础设施中。

混合渲染 – 这是Google的长期推荐,它绝对是新网站构建的方式。简而言之,每个人 – 机器人和人类 – 都将初始视图作为完全呈现的静态HTML。抓取 工具 可以继续以这种方式请求URL,并且每次都会获得静态内容,而在普通浏览器中,JavaScript会在初始页面加载后接管。这在理论上是一个很好的解决方案,并且在速度和可用性方面也有许多其他优点; 更多关于那一点。

后者更清洁,不涉及UA嗅探,是谷歌的长期推荐。值得澄清的是,“混合渲染”并不是一个单独的解决方案 – 它是许多可能的方法的结果,这些方法可以在服务器端提供静态预渲染内容。让我们分解如何通过几种方式实现这样的结果。

同构/通用应用程序

这是您可以实现“混合渲染”设置的一种方式。同构应用程序使用在服务器和客户端上运行的JavaScript 。这得益于Node.js的出现,Node.js在许多其他方面允许开发人员编写可以在后端和浏览器中运行的代码。

通常,您将配置您的框架(React,Angular Universal,无论如何)以在节点服务器上运行,在将HTML发送到客户端之前预呈现部分或全部HTML。因此,您的服务器必须配置为通过为适当的页面呈现HTML来响应深层URL。在普通浏览器中,这是客户端应用程序无缝接管的点。初始视图的服务器呈现的静态HTML由浏览器“重新水合”(精彩术语),将其重新转换为单页面应用程序并使用JavaScript执行后续导航事件。

做得好,这个设置可以很棒,因为它提供了客户端渲染的可用性优势,服务器端渲染的SEO优势,以及快速的第一次绘制(即使Time to Interactive经常受到JS kicks的补液的负面影响在)。由于担心过度简化任务,我不会在这里详细介绍,但关键是虽然同构JavaScript /真正的服务器端渲染可以是一个强大的解决方案,但设置通常非常复杂。

那么,还有哪些其他选择?如果你无法证明完全同构设置的时间或费用,或者它只是对你想要实现的内容有点过分,那么还有其他方法可以获得单页应用模型的好处 – 以及混合渲染设置 – 没有破坏你的SEO?

预渲染/ JAMstack

在服务器端呈现内容可能并不一定意味着呈现过程本身需要在服务器上进行。我们所需要的只是渲染HTML,随时准备为客户服务; 渲染过程本身可以在任何你喜欢的地方发生。使用JAMstack方法,将内容呈现为HTML是构建过程的一部分。

我以前写过关于JAMstack方法的文章。通过快速入门,该术语代表JavaScript,API和标记,它描述了一种在没有服务器端软件的情况下构建复杂网站的方法。任务的传统站点可能与WordPress和 PHP 实现- -从组装前端组成部分网站的过程作为生成过程的一部分执行,而交互性使用JavaScript和API来处理客户端。

可以这样想:一切都存在于您的Git存储库中。您的内容存储为纯文本降价文件(可通过无头CMS或其他基于API的解决方案进行编辑),页面模板和汇编逻辑使用Go,JavaScript,Ruby或您首选的站点生成器恰好使用的任何语言编写。您可以在任何计算机上使用适当的命令行工具集将您的站点构建为静态HTML, 然后再将其托管在任何位置。生成的一组易于缓存的静态文件通常可以安全地托管在CDN上,几乎没有任何内容。

老实说,我认为静态站点生成器 – 或者更确切地说是支撑它们的原理和技术 – 是未来。我有很多机会对此我说错了,但是对于那些使用现代基于npm的自动化软件(如Gulp或Webpack)编写CSS或JavaScript的人来说,这种方法的强大功能和灵活性应该是明确的。我挑战任何人来测试专家webhost Netlify在一个真实项目中提供的深度Git集成,并且仍然认为JAMstack方法是一种时尚。

静态网站生成器在GitHub上的流行度,使用https://stars.przemeknowak.com生成

JAMstack设置对我们讨论单页应用程序和预呈现的重要性应该是相当明显的。如果我们的静态站点生成器可以基于用Liquid或Handlebars编写的模板来组装HTML,为什么不能用JavaScript做同样的事情呢?

有一种新的静态站点生成器就是这样做的。这些程序经常由React或Vue.js提供支持,允许开发人员使用尖端的JavaScript框架构建网站,并且可以轻松配置为每个页面(或“路由”)输出SEO友好的静态HTML。这些HTML文件中的每一个都是完全呈现的内容,可供人和机器人使用,并可作为完整客户端应用程序(即单页面应用程序)的入口点。这是Google称为“混合渲染”的完美执行,尽管预渲染过程的精确性使其与同构设置完全不同。

一个很好的例子是GatsbyJS,它是用React和GraphQL构建的。我不会详细介绍,但我会鼓励所有读过这篇文章的人查看他们的主页和优秀的文档。它是一个支持良好的工具,具有合理的学习曲线,一个活跃的社区(一个功能丰富的v2.0在九月发布),一个可扩展的基于插件的架构,与许多CMS的丰富集成,它允许开发人员利用现代框架像React没有破坏他们的SEO。也有Gridsome,基于VueJS,并作出反应静态它-你猜对了-使用反应。

Nike最近的Just Do It活动,利用了React驱动的静态站点生成器GatsbyJS,并在Netlify上托管。

这些平台的企业级采用率似乎将会增长; GatsbyJS被Nike用于他们的Just Do It活动,Airbnb用于他们的工程网站airbnb.io,而Braun甚至用它来为一个主要的电子商务网站供电。最后,我们在SEOmonitor的朋友用它来支持他们的新网站。

但就目前的单页应用和JavaScript渲染而言,这已经足够了。是时候我们探讨了支撑PWA的两项关键技术中的第二项。承诺你会留在我身边(哈哈,书呆子笑话),因为是时候探索服务工作者了。

3.服务人员

首先,我应该澄清一下,我们正在探索的两种技术 – SPA和服务工作者 – 并不是相互排斥的。它们共同构成了我们通常所说的渐进式Web应用程序,是的,但它也可能有一个不是SPA的PWA。您还可以将服务工作者集成到传统的静态网站(即没有任何客户端呈现内容的网站),我相信在不久的将来我们会看到更多。最后,服务工作者与Web App Manifest等其他技术协同工作,我的同事Maria最近在她的 PWA和SEO的优秀指南中更详细地探讨了这一点。

但最终,服务工作者可以使PWA最令人兴奋的功能成为可能。它们是历史上Web平台最重大的变化之一,每个工作涉及构建,维护或审核网站的人都需要了解这一强大的新技术。如果像我一样,你过去几年一直热切地检查Jake Archibald的Is Service Service Ready页面,并且看着浏览器供应商的采用情况有所增加,你就会知道现在是时候开始与服务工作者一起构建了。

我们将探索它们是什么,它们可以做什么,如何实现它们,以及它对SEO的影响。

服务工作者可以做什么?

服务工作者是一种特殊的JavaScript文件,它在主浏览器线程之外运行。它位于浏览器和网络之间,其功能包括:

拦截网络请求 并以编程方式决定如何处理它们。工作人员可能正常进入网络,或者可能仅依赖于缓存。它甚至可以 从各种来源制造出全新的反应。这包括构建HTML。

在服务工作者安装期间预加载文件。对于SPA,这通常包括我们之前讨论过的’app shell’,而简单的静态网站可能会选择 预加载所有HTML,CSS和JavaScript,确保在离线时保持基本功能。

处理推送通知,类似于本机应用程序。这意味着网站可以获得用户的许可以发送通知,然后依靠服务工作者接收消息并执行它们,即使在浏览器关闭时也是如此。

执行后台同步,推迟网络操作,直到连接性得到改善。这可能是网络邮件服务或照片上传工具的“发件箱”。没有更多“请求失败,请稍后再试” – 服务人员将在适当的时候为您处理。

这些功能的好处超出了明显的可用性特性。除了在网络上推动HTTPS的采用(所有主流浏览器只会在安全协议上注册服务工作者),服务工作者在速度和性能方面都具有变革性。它们支持Google的PRPL模式等新方法和新思路,因为我们可以最大限度地提高缓存效率并最大限度地减少对网络的依赖。通过这种方式,服务工作者将在使网络快速访问并为下一个十亿网络用户访问方面发挥关键作用。

所以是的,他们是一个绝对的强者。

实施服务工作者

而不是在这里编写一个基本教程的糟糕工作,而是将链接到一些关键资源。毕竟,您最了解您对服务工作者的理解程度。

该MDN文档是更多地了解服务人员和他们的能力的好地方。如果您已经对Web开发的基本知识充满信心并享受边做边学的方法,我强烈建议您完成Google的PWA培训课程。它包括对服务工作者的整个实践练习,这是熟悉基础知识的好方法。如果ES6和promises还不是你的JavaScript曲目的一部分,那就准备好接受火灾的洗礼。

他们需要理解的关键事项 – 一旦你开始试验,你会很快意识到 – 服务工作者会向开发人员交出令人难以置信的控制级别。与以前尝试解决连接难题(例如命运多AppCache)不同,服务工作者不会对您的工作强制执行任何特定模式; 它们是一套工具,可以为您所面临的问题编写自己的解决方案。

这样做的一个后果是它们可能非常复杂。注册和安装服务工作者并不是一个简单的练习,任何通过StackExchange复制粘贴拼凑在一起的尝试都注定要失败(严重的是,不要这样做)。对于您的站点,没有现成的服务工作者 – 如果您要创建合适的工作者,则需要了解网站的基础结构,体系结构和使用模式。作为网络开发大师的Ben叔叔说得最好:拥有强大的力量带来了巨大的责任。

最后一件事:您可能会惊讶地发现您访问的网站已经使用了服务工作者。前往chrome:// serviceworker-internals / in Chrome或about:debugging#workers in Firefox查看列表。

服务工作者和SEO

就SEO影响而言,与服务工作者最相关的事情可能是他们使用Fetch API劫持请求和修改或制作响应的能力。您在“查看源”中甚至在“网络”选项卡上看到的内容不一定代表从服务器返回的内容。它可能是缓存的响应,也可能是服务工作者从各种不同来源构建的。

图片来源:https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API

这是一个实际的例子:

前往GatsbyJS主页

点击“文档”页面的链接。

右键单击 – 查看源

没有内容,对吧?只是一些内联脚本和样式以及空HTML元素 – 一个用React构建的经典客户端JavaScript应用程序。即使您打开“网络”选项卡并刷新页面,“预览”和“响应”选项卡也会显示相同的故事。实际内容仅出现在“元素”检查器中,因为DOM正在使用JavaScript进行汇编。

现在运行相同URL的curl请求(https://www.gatsbyjs.org/docs/),或使用Screaming Frog获取页面。所有内容都包含在内,还有正确的标题标签,规范以及您可能期望从服务器端呈现的页面中获得的所有内容。这就是像Googlebot这样的爬虫也会看到的。

这是因为网站使用混合渲染,并且安装在浏览器中的服务工作者正在处理后续导航事件。没有必要从服务器获取Docs页面的原始HTML,因为客户端应用程序已经启动并运行 – 因此,View Source会显示服务工作者返回到应用程序的内容,而不是网络返回。此外,由于服务工作者有效地使用缓存,因此可以在脱机时重新加载这些页面。

您可以使用“网络”选项卡轻松识别来自服务工作者的响应 – 请注意下面的“来自ServiceWorker”行。

在“应用程序”选项卡上,您可以看到当前页面上运行的服务工作者及其创建的各种缓存。您可以禁用或绕过工作程序并测试它可能使用的任何更高级的功能。学习如何使用这些工具是一项非常有价值的工作; 我不会在这里详细介绍,但我建议您研究一下有关调试服务工作者的 Google Web基础知识教程。

我已经有意识地努力在本文中将代码片段保持在最低限度,但是给了我这个。我汇总了一个示例,说明了一个简单的服务工作者如何使用Fetch API来处理请求以及我们提供的控制程度:

结果:

我希望这个(非常简化和非生产就绪)示例说明了一个关键点,即我们对资源请求的处理方式进行了极其精细的控制。在上面的示例中,我们选择了一个简单的try-cache-first,fall-back-to-network,fall-back-to-custom-page模式,但可能性是无穷无尽的。开发人员可以根据主机名,目录,文件类型,请求方法,缓存新鲜度和更多负载来自由决定如何处理请求。响应 – 包括整页 – 可以由服务工作者制作。Jake Archibald在他的离线食谱中探讨了一些常用的方法和方法。

现在是了解服务工作者能力的时候了。现代技术搜索引擎优化所需的技能组合与网络开发人员的工作重叠程度很高,而今天,对所有主要浏览器中开发工具的深入理解 – 包括服务工作者调试 – 应该被视为先决条件。

4.结束

SEO需要适应

直到最近,由于不了解PWA和服务工作者带来的后果和机遇,因此很容易逃脱。

这些是与搜索营销相关的边缘的尖端功能,并且许多SEO对JavaScript的上述谨慎没有做任何鼓励实验。但个PWA迅速在他们的途中成为一种常态,而且很快就会是不可能做一个有效的工作不理解的机制如何,他们的作用。为了保持作为技术搜索引擎优化(或SEO工程师,从迈克金借用另一个术语)的相关性,你应该把自己放在这些范式转变发展的最前沿。网络开发中文盲的技术搜索引擎优化已经不合时宜,我相信搜索营销的技术和内容驱动方面之间的进一步分歧并不是坏事。专业!

在得知开发团队正在为新的网站构建采用新的JavaScript框架之后,SEO对于一定程度的愤世嫉俗反应并不罕见。我当然开玩笑说开发人员被最新的闪亮技术或框架所吸引,以及JavaScript开发世界的发展速度有多快,层层抽象和自动化被添加到什么 – 从外部 – 经常似乎是一个开发堆栈的斜塔。但值得花些时间来理解为什么选择框架,何时可能开始在生产中使用技术,以及这些决策将如何影响SEO。

例如,不是批评单个页面应用程序框架的404处理或内部链接,而是能够提供有意义的建议,这些建议基于对它们实际工作方式的理解。正如Jono Alderson在他关于SEO民主化的讨论中所观察到的那样,对开源项目的贡献在传播SEO的认知和意识方面比在特定基础上反复修复相同问题更有价值。

超越SEO

最后一件事我想提一下:PWA是一组变革性的技术,它们显然具有远远超出SEO的后果。其他数字营销领域也受到直接影响,从我的角度来看,其中最有趣的是分析。

如果您的网站在离线状态下部分或完全正常运行,您是否已根据此进行调整分析设置?如果推送通知订阅是您网站的KPI,那么您是否将此作为目标进行跟踪?记住服务工作者无权访问Window对象,使用“普通”跟踪代码无法跟踪这些事件。相反,有必要将服务工作者配置为使用Measurement Protocol 构建匹配,必要时对其进行排队,并将它们直接发送到Google Analytics服务器。

这是我最近一直在探索的一个迷人的领域,你可以阅读我在Builtvisible博客上关于PWA分析的系列文章中的第一篇文章。

本文来自投稿,不代表穷思笔记立场,如若转载,请注明出处:https://www.chons.cn/14073.html


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

算法概论

算法概论

Sanjoy Dasgupta、Christos Papadimitriou、Umesh Vazirani / 王沛、唐扬斌、刘齐军 / 清华大学出版社 / 2008-7 / 39.99元

《国外经典教材·算法概论》涵盖了绝大多数算法设计中的常用技术。在表达每一种技术时,阐述它的应用背景,强调每个算法运转背后的简洁数学思想,注意运用与其他技术类比的方法来说明它的特征,并提供了大量相应实际问题的例子。《国外经典教材·算法概论》同时也注重了对每一种算法的复杂性分析。全书共10章,从基本的数字算法人手,先后介绍了分治、图的遍历、贪心算法、动态规划、线性规划等技术,对NP完全问题进行厂基本而......一起来看看 《算法概论》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

URL 编码/解码
URL 编码/解码

URL 编码/解码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具