WordPress和Jamstack
近期,我在Netlify的虚拟Jamstack大会上主持了一场小组讨论,与会者包括Netlify首席执行官Matt Biilman和Automattic创始人Matt Mullenweg。这场讨论被许多人视为“Jamstack与WordPress之争”。
我个人对此有很多想法,并认为自己更适合担任评论员而非主持人。这是我目前最喜欢的技术讨论之一!所以请允许我写一篇博客。
声明:Automattic和Netlify都是本网站的活跃赞助商。我有一些使用两者的生产网站,老实说,我都很喜欢它们,这也是我将尝试阐述的一个主要观点。我恰好正在WordPress网站上撰写和发布这篇文章。
历史回顾
- Richard MacManus发表了文章“WordPress联合创始人Matt Mullenweg并非Jamstack的粉丝”,文中引用了他们之间电子邮件对话的内容,Matt说了一句:“对于绝大多数采用Jamstack的人来说,这是一种倒退。”
- Matt Biilmann发表了回应文章“关于Mullenweg和Jamstack——倒退还是未来?”,其中有一整节标题为“WordPress时代的终结”。
- 期间,人们纷纷发表评论。Netlify董事会成员Ohad Eder-Pressman写了一封公开信。Sarah Gooding在WP Tavern(由Matt Mullenweg拥有)上总结了一些活动。我也参与其中。
- Matt Mullenweg澄清了他的言论,并添加了一些新的评论。
这场辩论于2020年Jamstack虚拟大会上举行。目前没有公开的视频记录(抱歉)。
架构对比
将Jamstack与WordPress进行比较有点奇怪。真正可比的是它们都是构建网站时可能选择的途径。这篇文章的大部分内容都会牢记这一点,并以此方式比较两者。它们之所以不能直接比较,是因为:
- Jamstack是对一种架构理念的宽泛描述,该理念鼓励在CDN上使用静态文件,并使用JavaScript访问的服务来满足任何动态需求。
- WordPress是基于LAMP架构的CMS。
这两者并非完全相同。
如果我们暂时只关注架构,那么比较的对象将是:
- 静态托管 服务
- LAMP
静态 服务的示例是使用Netlify进行托管(这是静态的),并使用服务来完成任何需要完成的动态操作。也许您使用Netlify自己的表单和身份验证功能以及Hasura进行数据存储。
在LAMP架构中,您使用MySQL存储数据,因此您无需使用外部服务。您还可以使用PHP。因此,有了这些(以及开源软件),您就拥有了身份验证所需的一切。但这并不意味着您从不使用服务;只是因为您已经拥有服务器上的更多技术,所以您使用服务的频率较低。
Matt B. 将LAMP架构称为“单体架构”。Matt M. 对此表示异议,并将其称为“集成方法”。我不是计算机科学家,但我认为这两种说法都有道理。以下是维基百科的解释:
[…] 单体应用程序描述的是一个单层软件应用程序,其中用户界面和数据访问代码组合在一个程序中。
根据此定义,WordPress似乎确实是一个单体架构,但维基百科文章继续说道:
[…] 单体应用程序描述的是一个设计时没有模块化的软件应用程序。
从这个角度来看,似乎WordPress不符合单体架构的定义。WordPress的钩子和插件架构是模块化的。?♂️
听听这两位大佬就此进行深入探讨将会很有趣,但软件就是软件。一个自托管的WordPress网站运行在拥有完整技术堆栈的服务器上。充分利用该服务器是有意义的(即集成)。在Jamstack方法中,服务器是抽象的。您需要执行的所有其他操作都拆分为不同的服务(即非集成)。
WordPress方法并不意味着您从不使用外部服务。在这两种架构中,您都可能使用Stripe之类的电子商务API。您可能使用Cloudinary之类的服务来进行强大的媒体存储和服务。甚至WordPress的Jetpack服务(我使用并喜欢它)也为自托管的WordPress网站带来了强大的功能,它像第三方服务一样运行,通过将资产托管和搜索技术转移到云服务器上来实现。两种架构都是技术的集合。
两种架构都不是“纸牌屋”,也不比另一种更脆弱。所有网站都可能适用“其强度取决于其最薄弱的环节”的比喻。如果WordPress插件发布了错误的版本或在上传时以某种方式损坏,它可能会导致我的网站出现问题,直到我修复它为止。如果我的无服务器数据库的API密钥无效,我的Jamstack网站可能会出现问题,直到我修复它为止。如果Stripe宕机,在我恢复服务之前,我将无法在任何类型的网站上销售任何产品。
定价
WordPress.com有一个免费计划,这绝对是一个可以构建网站的地方。(我有几个。)但是,除非您使用的是每月25美元的商业计划,否则您实际上无法访问开发人员级别的功能。自托管的WordPress本身是开源且免费的,但是您找不到免费启动自托管WordPress网站的地方。它的起步价格很低,然后会逐渐增加。您需要LAMP托管才能运行WordPress。以下是相当便宜的托管计划:
- Bluehost的“共享”计划起价为每月3.95美元。
- Flywheel的最低计划为每月14美元。(本网站使用的是Flywheel的高级计划。)
- Media Temple的WordPress专用托管起价为每月20美元。(本网站很长时间都使用的是Media Temple的高级计划。)
- Automattic的Pressable服务有一个起价为每月25美元的计划。
一开始就需要花钱。
Jamstack更常见的是免费起步,然后在不同的时间点产生成本。由于Jamstack比较新,感觉市场仍在摸索之中。
- Vercel在您需要团队成员或密码保护网站等功能之前是免费的。单个密码保护网站每月150美元。您可以将基本身份验证添加到任何带有Apache的服务器上,无需额外费用。
- Netlify非常相似,在更高的计划中解锁功能,并提供按站点付费的功能,例如分析(每月9美元)和身份验证(5000个活跃用户每月99美元)。
- AWS Amplify免费起步,但与AWS上的所有内容一样,您的使用情况在很多层面上都是按量计费的,例如构建分钟数、存储和带宽。他们有一个示例计算,一个网络应用程序每天有10000个活跃用户,每月更新两次,每月成本为65.98美元。
- Azure Static Web Apps尚未发布定价,但几乎肯定会有免费层或免费使用或某种方式。
所有这些都提醒我们,Netlify并非Jamstack领域的唯一玩家。Jamstack只是意味着静态托管加上服务。
您不能做出像Jamstack更便宜这样的笼统陈述。这过分依赖于网站的使用情况和需求。对于高使用量和大量高级服务,Jamstack(就像无服务器一样)可能会变得非常昂贵。Jamstack表示他们的企业定价起价为每月3000美元,虽然您可以获得身份验证、表单和媒体处理等功能,但您不会获得CMS或任何数据存储,这可能会使您的成本大幅增加。
虽然这个WordPress网站不是企业级的,但我可以告诉您,它需要大约每月1000美元的服务器,这假设Cloudflare位于其前面,以帮助减少直接到主机的带宽,以及Jetpack处理媒体托管和搜索功能。Mailchimp发送我们的时事通讯。Wufoo为我们的表单提供支持。我们还有付费插件,例如Advanced Custom Fields Pro和一些WooCommerce附加组件。这还不是全部。总计可能每月几千美元。这并非集成方法独有,但有助于说明WordPress网站的成本也可能相当高。他们没有公布价格(企业常用的策略),但Automattic自己的WordPress VIP托管服务的价格肯定在四位数以上,然后您还需要添加第三方内容。
底线:这里没有定价方面的重大变化。
性能
80%的网页性能是前端问题。
这是事实,但也建立在服务器的基础上(占最初20%)。世界上最快的界面如果服务器的第一个请求需要几秒钟才能返回,就不会感觉很快。如果您想要一个快速的网站,您必须确保第一个请求非常快。
你知道什么超级快吗?全球CDN提供静态文件。无论后端的服务器、托管或CMS情况如何,这都是您想要实现的目标。虽然这是Jamstack(静态CDN支持的托管)的基础,但这并不意味着WordPress无法做到这一点。
您将包含静态内容的index.html文件放在Netlify上,它将非常快。也许您的静态网站生成器会生成该文件(值得指出的是,该文件很可能从WordPress获取内容)。这非常棒。
默认情况下,WordPress不会生成可在全球CDN上缓存的静态文件。WordPress从单个来源响应请求,运行PHP,然后向数据库请求内容,然后组装响应,最后返回页面。这可能很快,但远不如全球CDN上的静态文件稳定,而且更容易被请求压垮。
WordPress主机知道这一点,他们试图在托管级别解决这个问题。看看WP Engine的方法。无需您执行任何操作,他们使用页面缓存,以便网站基本上可以返回静态资产,而无需运行PHP或访问数据库。他们还采用了各种其他缓存技术,包括与Cloudflare合作以实现最佳缓存效果。在我写这篇文章的时候,我的shoptalkshow.com网站实际上宕机了。我写信给主机Flywheel,看看发生了什么。事实证明,当我进入那里打开一个暂存站点时,我切换了一个错误的开关,关闭了他们的缓存。该网站无法处理流量,直接崩溃了。将缓存开关重新打开立即解决了问题。我没有在网站前面使用Cloudflare,但我应该使用。
Cloudflare是使WordPress速度更快的神奇秘诀的一部分。只需将其放在自托管WordPress网站的前面,就能在提高速度和可靠性方面发挥巨大作用。缺少的部分之一是HTML本身的出色缓存,他们本月才解决了这个问题,现在也可以缓存了。有趣的是,缓存WordPress意味着将请求缓存为静态HTML和静态资产,并从全球CDN提供服务,这最终也就是Jamstack的本质。
Matt M.提到WordPress.com使用在特定流量级别启动的全球CDN。我不确定是不是Cloudflare,但我不会怀疑。
在WordPress网站前面使用Cloudflare后,我看到的第一个响应数字与没有Cloudflare的Netlify网站相同(因为他们不建议在Netlify托管的网站前面使用Cloudflare)。这是两位数毫秒级的数字,非常好。
从这个基础出发,关于性能的任何讨论都将变得特定于前端。无论后端的服务器、托管或CMS情况如何,前端速度策略都是相同的。
安全性
关于WordPress网站被黑客攻击的故事比Jamstack网站多得多。但说WordPress安全性较低是否公平?WordPress已经存在了大约二十年,其上构建的网站数量比Jamstack多几个数量级。撇开安全性不谈,考虑到这些数字,您将从WordPress那里听到更多故事。
Matt M提到whitehouse.gov使用WordPress,这显然是一个需要最高安全级别的网站。这并不是说WordPress本身是不安全的软件。关键在于你如何使用它。你的密码不安全吗?无论你使用什么平台,这都是不安全的。服务器本身通过文件权限或访问级别不安全吗?这并非完全是软件的错,但你可能正因为软件而处于这种境地。你运行的是最新版本的WordPress吗?使用情况充其量是分散的,版本越旧,安全性就越低。棘手。
考虑攻击媒介可能更有意思。也就是说,在哪些点可能被黑客攻击。如果您的静态文件位于静态托管上,我认为可以肯定地说攻击媒介相当少。但是,仍然有一些:
- 您的托管帐户可能被黑客攻击
- 您的Git仓库可能被黑客攻击
- 您的Cloudflare帐户可能被黑客攻击
- 您的域名可能被盗(确实会发生)
WordPress网站也是如此,只是还有其他攻击媒介,例如:
- 服务器端代码:XSS、不良插件、远程执行等。
- 数据库漏洞
- 运行旧版本的WordPress
- 登录系统就在网站本身,例如坏人可以攻击/wp-login.php
我认为可以公平地说,WordPress网站的攻击媒介更多,但任何网站都有很多媒介。任何网站的托管帐户都是一个主要的媒介。DNS链中的任何内容。任何具有登录信息的第三方服务。任何具有API密钥的内容。
个人经验:这个网站使用WordPress,从未被黑客攻击过,但这并非因为没有尝试。我的确感觉我需要比仅由静态网站生成器构建的网站更多地考虑WordPress网站的安全性。
扩展性
扩展任何方法都需要花钱。这个WordPress网站并没有大规模扩展,但确实需要比入门级服务器要求更高的扩展。我通过Cloudflare提供所有流量,因此过去30天的峰值数据显示我每月提供5 TB的带宽。
在Netlify商业计划中(每月99美元可获得600 GB的流量,然后每额外100 GB收取20美元),计算结果为979美元。还记得我之前说过这个网站需要大约每月1000美元的服务器吗?我在运行这些数字之前就写了这些内容,所以非常接近(真棒)。在这个网站的规模上,Jamstack与WordPress不相上下。所有主机都会对带宽收费,并有超额收费的上限。Amplify对超过15 GB每月上限的带宽每GB收取0.15美元。Flywheel(我的WordPress主机)根据每月的访问者上限收费,超过上限后,每1000人收取1美元。
WordPress扩展的故事是:
- 使用能够处理它并拥有自己成熟缓存策略的主机。
- CDN所有内容(这通常意味着在前面放置Cloudflare)。
- 最终,您将为此付费。
Jamstack扩展的故事是:
- 主机和服务都是为了扩展而构建的。
- 您不必过多考虑这项服务能否处理这个问题,或者我是否需要迁移?之类的扩展问题。
- 您需要更多地考虑每个服务的每个方面都会有需要关注的定价这一事实。
- 最终,您将为此付费。
我不得不迁移我的WordPress托管,找到符合网站当前需求的主机。迁移WordPress网站并非易事,但比迁移到另一个CMS容易得多。例如,如果您在无头CMS上构建了一个Jamstack网站,而该CMS的价格变得太高,那么迁移的成本比切换主机更大。
我喜欢Dave Rupert前几天(在Slack对话中)关于比较两者性能的内容:
Jamstack:使用任何东西来构建你的东西,有一些附加组件可以帮助你,并使用我们的东西将其部署到CDN,这样它就不会崩溃。
WordPress:使用我们的东西来构建你的东西,有一些附加组件可以帮助你,你必须使用某些主机才能防止它崩溃。
还有其他类型的“扩展”。我想到的是用户数量之类的东西。这是各种服务用于定价层级的一种可以理解的指标。但在WordPress中这是免费的。您可以拥有任意数量的用户,并拥有任意数量的细致权限。这只是CMS,因此添加其他服务仍然可能按用户收费。Vercel或Netlify对团队帐户按用户收费。Contentful(一个流行的无头CMS)的团队起价为每月489美元。如果您需要免费帐户无法提供的任何功能,即使是GitHub的团队层级也需要每用户4美元。
分离前端和后端
这是让人们对使用Jamstack构建网站感到兴奋的一大因素。如果我的网站的所有功能和内容都在API的后面,那么前端就可以随意构建。
- 想构建一个全静态网站?好的,在构建过程中访问该API并执行此操作。
- 想使用React或Vue或其他任何东西构建一个客户端渲染的网站?很好,客户端访问API。
- 想拆分中间,预渲染一些,客户端渲染一些,服务器端渲染一些?酷,这是一个API,您可以随意访问它。
这种灵活性在全新构建中很不错,但人们也同样对理论上的未来灵活性感到兴奋。如果所有功能和内容都是API驱动的,那么您就可以完全分离前端和后端,这意味着您将来可以更灵活地更改任何一方。
- 只要您的API继续输出前端期望的内容,您就可以重新架构后端而不会影响前端。
- 只要您获得所需的数据,您就可以重新架构前端而不会影响后端。
对于特定规模和规模的网站,这种分离感觉“未来安全”。我无法准确指出这些规模数字是多少,但它们确实存在。
如果您曾经做过任何主要的网站重新架构只是为了适应一方或另一方,那么迁移到一个分离后端和前端的系统肯定感觉是一个明智的举动。
您可以分离WordPress网站(我们将在“同时使用两者”部分讨论),但默认情况下,WordPress是一种非常集成的方案,其中前端是使用非常WordPress特定的API从PHP中的主题构建的。根本没有分离。
开发人员体验
Jamstack在很大程度上优先考虑了开发人员体验(DX)。我听说有人称之为“局部最优”,这意味着Jamstack的设计围绕本地开发(和本地开发人员)体验进行。
- 您应该在本地工作。您在自己的舒适(本地、快速、自定义)开发环境中工作。
- Git是第一公民。您推送到您的生产分支(例如master或main),然后您的构建过程运行,您的网站就会部署。您甚至可以为每个拉取请求获得生产网站的预览URL,这是一个令人印象深刻的强大功能。
- 使用您喜欢的任何工具。您想在Hugo中预构建一个网站?尽管去做。您在学校学习了create-react-app?尽管使用。想尝试一下最新的框架?尽管尝试。您可以自由地按照自己的方式构建,利用您可以构建和部署存储库中任何您想要的文件夹这一事实。
- 您不必做的事情也很重要。您不必处理HTTPS,您不必处理缓存,您不必担心文件权限,您不必配置CDN。即使是高级开发人员也欣赏不必做更多事情。
这并不是说WordPress没有考虑开发人员体验(例如,他们有一个CLI,它可以执行有用的操作,例如搭建块),但我认为DX对我来说并不像项目核心那样重要。
- 在本地运行WordPress很棘手,需要您以某种方式运行(X)AMP堆栈,这涉及到臭名昭著的难以捉摸的第三方软件。感谢Local by Flywheel。有一些指导,但感觉不像是一个优先事项。
- 应该将什么放入Git?直到今天,我仍然不太清楚,但我基本上已经决定使用整个/wp-content文件夹。对我来说,感觉奇怪的是没有指导或明显的最佳实践。
- 您完全需要自己负责部署。即使是WordPress专用主机也没有真正做到这一点。这在很大程度上只是:这是您的SFTP凭据。
- 即使您设置了良好的本地开发和部署管道(我对我的管道很满意),但这并不能真正帮助处理数据库的移动,因此您也需要自己负责。
这些都是可以解决的问题,WordPress社区非常庞大,您可以在其中找到大量相关信息,但我认为可以公平地说,WordPress并没有将DX作为核心。即使过了这么多年,它仍然有点像狂野西部。
事实上,我发现,由于对健康的本地开发环境的鼓励被边缘化,许多人根本就没有本地开发环境。这是轶事,但现在我已经两次发现自己参与了其他人的网站,这些网站完全是仅生产环境的。如果它们是非常简单的网站,并且在很大程度上具有默认行为,那就另当别论了,但这些网站并非如此。它们非常复杂(比这个网站复杂得多),涉及公共用户登录、付费会员和权限、页面构建器、自定义简码、自定义CSS以及大量活动部件。这让我非常害怕。我不想碰任何东西。他们正在现场编辑PHP以使事情正常工作——正如人们开玩笑地称之为的那样,牛仔式编码。一个语法错误,网站就会崩溃,甚至可能是您正在查看的页面。
WordPress在没有特别好的DX的情况下为如此庞大的网络提供动力,这非常有趣。如果没有DX,就没有Jamstack。这完全是面向开发人员的。对于WordPress,大多数网站可能根本没有开发人员。它被安装(或者在WordPress.com的情况下被激活),然后网站所有者从那里开始。网站所有者就像开发人员一样,他们拥有很大的权力,但可能根本没有编写任何代码。
为此,我想说WordPress比DX更关注UX,这是这一切中非常重要的一部分……
CMS和最终用户UX
WordPress是一个非常好的CMS。即使您不喜欢它,也有很多人喜欢它,而且数据可以说明一切。当您决定使用WordPress构建网站时,您会获得大量构建几乎任何您想要类型的网站的能力。使用WordPress不太可能出现哎呀,我把自己逼到死胡同了的情况。
这是一件大事。Jenn指出了这一点,她指出使用WordPress的人比开发人员的需求更重要。
WordPress可以做非常多的事情:
- 博客(或任何类型的以内容为中心的CMS风格的网站)……
- 带有内容预览,这在Jamstack中是可能但棘手的
- 处理用户/权限……
- 在管理员/CMS级别,以及
- 在面向用户级别(例如论坛、订阅、社交等)
- 电子商务
- 处理表单
- 处理插件到极致
Jamstack绝对也可以做所有这些事情,但现在是Jamstack处于狂野西部时代。当您查看有关如何存储数据的教程时,它们通常会涉及解释如何为云数据库编写单个CRUD函数。这是底层的东西,它可能非常强大,但它与点击几个按钮大相径庭,而这正是WordPress在很多时候的感觉。
我敢打赌,我可能可以使用Stripe API拼凑出一个基本的Jamstack电子商务设置,这非常酷。但是,当我需要开始考虑库存管理、运输区域、产品变体以及谁知道电子商务领域中还有哪些复杂的事情时,我会感到紧张,这让我希望我有一些非常强大的东西可以帮我完成所有这些工作。
有时,我们开发人员只是为自己构建网站(我做了很多这样的事情),但我认为开发人员主要是在为其他人构建网站。因此,最重要的问题是:我正在构建的东西是否能增强我为之构建的人们的能力?
无论如何,您都可以实现良好的网站管理体验,但WordPress无疑已经证明它在该领域提供了服务,而无需在自定义开发方面付出太多努力。
不过,Jamstack有一些技巧是我希望在WordPress上实现的。对我来说,一个重要的技巧是:用户提交的内容和更新。我现在实际上有三个网站受益于此。一个关于会议的网站,一个关于无服务器的网站,以及一个即将推出的关于编码字体的网站。WordPress绝对可以在所有这三个网站上做得很好。但是,我真正想要的是让人们能够以我可以这样说的方式更新和提交内容:是的,看起来不错,合并。通过采用Jamstack方法,内容位于公共GitHub存储库中,任何人都可以参与。
我认为这非常棒。它甚至不一定要求公众中的某个人了解或理解Git或GitHub,因为Netlify CMS具有开放创作的概念,它将整个贡献体验保留在浏览器中,并提供用于编辑的UI。
同时使用两者
这是一个我经常看到被提及的重要问题。即使是Netlify本身也说“没有对立”。
问题是这样的:
- “Jam”中的“A”代表API。在构建时或客户端使用API来构建您的网站。
- WordPress网站默认情况下具有REST API(并且也可以具有GraphQL API)。
- 因此,在您的Jamstack网站上使用该API获取CMS数据。
是的,完全可以。这有效,人们也在这样做。我认为这很酷。
但是……
- 在您的Jamstack网站之外运行WordPress网站意味着……您正在运行WordPress网站以及您的Jamstack网站。这会产生成本和技术债务。
- 您通常无法获得WordPress的所有价值。使用API获取数据可能是您需要做的全部工作,但这与构建WordPress主题相比,是一种非常非常不同的网站构建方法。您没有获得WordPress的其他任何价值。我想到的是这样的情况:您找到一个很酷的插件,它为您的网站添加了一个花哨的Gutenberg块。这在WordPress网站上“只需运行”即可,但它可能有一些特殊的前端行为,如果您只是从API中提取HTML,则这些行为将不起作用。它可能会包含一些额外的脚本和样式,您需要自己弄清楚如何将这些脚本和样式合并到您的前端托管位置,以及自己维护更新。
以下是所有都具有独特“同时使用两者”方法的参与者:
- Frontity:WordPress的React框架。您可以在其后面运行它,并使用Node服务器,以及您的WordPress网站。Node服务器将React渲染成HTML,因此您可以为所有页面进行服务器端渲染,但您仍然在构建SPA。
- WP2Static:一个WordPress插件,可以构建网站的静态版本,并在进行更改时自动部署它。
- Strattic:他们为您托管动态WordPress网站(他们称之为“暂存”),您可以在那里正常使用WordPress。然后您可以选择部署,他们还会为您托管网站的静态版本。
- Shifter:Shifter为您托管WordPress网站。您有两个选择:1)无头运行(因此您只是为了获取数据而访问API,REST或GraphQL)或2)静态运行(因此,当您在WordPress中拥有所有想要的内容时,您可以部署它,这将创建网站的静态版本,他们也会托管,或者您可以将其推送到其他地方,例如Netlify)。
还有很多其他方法可以集成两者。以下是我们的Geoff和Sarah谈论如何通过使用带有REST API的Vue/Nuxt并在Netlify上托管来同时使用WordPress和Jamstack。
都不使用
以防万一这一点不清楚,绝对有很多方法可以构建网站。如果您正在构建一个Ruby on Rails网站,那不是Jamstack或WordPress。您可以认为它更像WordPress网站,因为它需要服务器,并且您将使用该服务器尽可能多地做事情。您也可以认为它更像Jamstack,因为即使它不是静态托管,它也鼓励使用API和组合服务。
网络很大,伙计们,这不是零和博弈。我完全期望WordPress继续发展,并且Jamstack继续发展,因为网络本身正在发展。即使我们只考虑市场份额的百分比,我也仍然认为两者都会增长,将其他任何内容推入更小的部分。
选择
我甚至不会在这里讨论。这并不是因为我避免偏袒,而是因为它没有必要。我没有看到那里的开发人员咬着指甲试图决定使用WordPress还是Jamstack方法来构建网站。我们已经到了技术足够被理解的地步,流程如下:
- 穿上合适的衣服
- 评估需求和结果
- 选择技术
以上是WordPress和Jamstack的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)