相反,如果网站的 PHP 代码写得不好,会进行大量不必要的数据库查询,则会花费更多的时间来完成步骤 3,这意味着请求将占用 PHP Worker 工作人员更长的时间。
PHP Worker 和 CPU 之间有什么关系
当谈到 WordPress 性能时,PHP 工作线程和可用 CPU 之间的关系是一个需要考虑的重要因素。
如果缺乏 CPU 资源是您网站的瓶颈,那么增加 PHP 工作线程的数量不会提高您网站的性能 – 它只会让您的网站同时处理更多请求,而每个请求的性能会变慢。
想象一下一个消防栓,上面连接着一根软管。只需连接一根软管,消火栓就能提供足够的水压。现在,如果我们将十根软管连接到消防栓上会发生什么?
有限的水压分布在十根软管上,这意味着每根软管完成工作所需的水压较小。在这个比喻中,消防栓是CPU,软管是PHP Worker。
考虑到上述情况,如果您的主机不断建议您增加 PHP 工作线程而不提及 CPU,您应该保持警惕。
让我们暂时回到消防栓的类比。
想象一下,您需要用五根软管扑灭十场火灾。连接所有五个软管后,您发现消防栓仍然提供足够的水压。
在这种情况下,多连接几根软管是有意义的,因为消火栓的水压不是瓶颈。
同样,如果您的网站即使有足够的 CPU 和 RAM 开销,性能也很差,那么您就应该考虑增加 PHP 工作线程的数量,作为提高性能的一种选择。
如何优化站点的 PHP Worker 使用
我们已经解释过 PHP Worker 是使用 PHP 代码生成 HTML 页面的后台进程。现在,减少和优化 PHP Worker 使用率的最明显方法是减少满足站点请求所需的 CPU 和 PHP 资源量。
以下是具体操作方法。
1. 为您的 WordPress 网站设置缓存
减少 PHP Worker 使用率的第一步是为 WordPress 站点设置缓存层。默认情况下,WordPress 是一个动态 CMS,可按需满足每个页面请求。
对于博客、在线杂志和作品集等许多网站来说,没有必要使用 PHP 为每个请求动态生成页面。
Page Caching 页面缓存
您当前正在阅读的博客文章是不需要动态生成的页面的完美示例。与我们的许多其他帖子一样,这篇文章中的内容被设计为静态的,因此不需要花费 CPU 资源来连续生成相同的页面。
相反,最好让 PHP 生成一次页面,然后将其缓存。与使用 PHP 动态生成页面相比,页面缓存具有许多明显的优势。
例如,假设您网站上的一篇博客文章如病毒般传播,并在发布后几个小时内获得了 100,000 次页面浏览。如果没有页面缓存,您的 PHP 工作人员可能会不堪重负,并且您的服务器可能会崩溃。
使用页面缓存,只会动态生成首页视图。其他 99,999 个请求将从页面缓存提供服务,该缓存使用相对较少的 CPU 资源。
有两种方法可以为 WordPress 网站设置页面缓存。
- 使用 Nginx 等 Web 服务器进行服务器级页面缓存。
- 使用 WordPress 插件(例如 WP-Rocket)进行基于插件的页面缓存。
为了获得最佳性能,我们建议尽可能使用服务器级页面缓存。在 Kinsta 上,我们所有的站点都使用 Nginx 的 FastCGI 缓存模块来实现超快的性能。
如果您的主机不提供服务器级页面缓存选项,那么下一个最佳选择是使用 WordPress 缓存插件在应用程序级别实现页面缓存。
Object Caching 对象缓存
对于 WooCommerce 商店、社区论坛和其他无法有效利用页面缓存的 WordPress 网站,在 MySQL 数据库前面添加 Redis 等持久对象缓存可以提高性能并减少 PHP 工作人员的负载。
如果没有持久对象缓存,即使结果与之前的查询相同,MySQL 数据库查询也会针对每个请求执行。
例如,绕过页面缓存的社区论坛网站将对数据库进行单独的相同查询以获取帖子数据以构建页面。
对于高流量和数据库密集的站点,这种查询数据库的方法效率很低,因为它使用 PHP 工作线程为单独的请求生成相同的查询结果。这就是 Redis 的用武之地。
Redis 将数据库查询的结果存储在 RAM 中,这使得 PHP 能够获取已经执行过的查询的结果。这种对象缓存方法允许 PHP 工作人员节省 CPU 资源并花费更少的时间来完成请求,因为它消除了重复的数据库查询的需要。
2. 优化你的 PHP 代码
除了设置页面缓存之外,另一个可以帮助您减少 PHP Worker 使用率的策略是优化您的 PHP 代码。在 WordPress 的上下文中,“优化 PHP 代码”可能意味着多种不同的事情,所以让我们更深入地了解一下。
WordPress 最受欢迎和最讨厌的功能之一(取决于你问的是谁)是它通过插件和代码片段的可扩展性。
如果您想向 WordPress 网站添加股票行情小部件,可以使用一个插件。同样,如果您想添加自定义字体,也有一个 functions.php
代码片段。
使用附加功能扩展 WordPress 核心变得如此简单,以至于我们经常会做得太过分,而没有考虑对网站性能的潜在影响。
因此,优化 PHP 代码的第一个方法是执行站点范围的审核,以确定哪些插件和代码片段是真正必要的。
选择优质插件
通常,WordPress 网站上插件的数量并不像插件的质量那么重要。如果插件在过去六个月内没有更新,我们建议选择另一个符合要求的插件。
原因是 WordPress 正在不断改进。如果插件多年未更新,则其代码很可能没有利用最新的 WordPress 开发和安全最佳实践。
相反,如果插件每隔几周不断更新,那么开发人员很可能非常重视质量,这使其成为您的 WordPress 网站的不错选择。
仅在需要时使用插件
如果您希望在网站上执行简单的任务(例如添加 JavaScript 或 CSS),则并不总是需要插件。相反,您可以将代码直接添加到主题的 PHP 模板或带有子主题的 style.css
文件中。
下次当您考虑安装插件时,请先花一些时间看看它是否 100% 有必要。有时,没有办法安装另一个插件,但这没关系。其他时候,您可以通过不安装不必要的插件来避免添加额外的代码膨胀。
选择轻量级主题
根据我们监控数千个 WordPress 网站的经验,我们发现主题有时是导致 PHP 性能不佳的原因。为了满足 WordPress 作为通用 CMS 的多功能性,一些开发人员编写了适合各种用例的主题代码。
通常,这会导致代码繁重且臃肿的主题,而这些主题无法有效地利用 PHP 和数据库查询。
在构建 WordPress 网站时,选择一个性能最佳且可自定义的主题非常重要——GeneratePress、OceanWP 和 Astra 就是三个例子。
不管你相信与否,选择合适的 WordPress 主机会对网站的性能产生巨大影响。由于 PHP Worker 的效率与 CPU 和 RAM 直接相关,因此将您的网站托管在具有最新硬件的现代服务器上可以帮助您优化 PHP Worker 的使用。
以下两个示例说明了为什么选择注重性能的主机对于您的 WordPress 网站很重要。
PHP 使用 CPU 资源来执行代码。更快的 CPU 意味着更快的代码执行。
快速 SSD 存储
磁盘 I/O 速度可以直接影响代码执行和数据库查询。如果您的数据库存储在速度较慢的机械磁盘或基于云的 SSD 上,而没有足够的 IOPS(每秒输入/输出操作),您的 PHP 工作人员将被迫花费更多时间来满足请求。
如果您不确定如何解决站点上的性能问题,我们建议您与合格的性能专家合作来诊断问题。
专家可以使用 New Relic 或 Query Monitor WordPress 插件等高级监控工具帮助您识别代码中的特定瓶颈。
通过放大并检查各个 PHP 进程和数据库查询,可以识别给站点的 PHP 工作人员带来高负载的特定代码块及其相关功能。
总结 PHP 工作线程优化,请记住以下提示。
- CPU 和 RAM 应与 PHP 工作线程一起扩展。如果 CPU 使用率锁定在 100%,添加更多 PHP Worker 不会提高性能。
- 使用注重性能的主机托管您的网站可以解决许多性能问题。
- 页面缓存和对象缓存可以显着减少 PHP 工作负载。
- 使用优质的 WordPress 插件和主题可以减少网站上不必要的代码膨胀。
- 如有必要,与性能专家合作来识别和解决复杂的问题。
PHP Workers 不足的结果
为了使您的 WordPress 网站实现快速可靠的性能,确保其拥有足够的 PHP 工作人员非常重要。当 PHP Worker 已经在站点上忙碌时,他们开始建立队列。
一旦达到 PHP 工作进程的限制,队列就会开始推出较旧的请求,这可能会导致 504 错误或不完整的请求。
由于缺乏 PHP Worker,我们看到的另一个常见错误是 502 bad gateway 错误。这些与 504 错误略有不同,因为该错误在 PHP 工作队列中超时 60 秒后发生。
这些错误不仅会给您的访问者带来糟糕的用户体验,而且还会对您网站的搜索引擎优化产生负面影响。
有许多不同的因素可能会导致页面加载缓慢或出现错误。例如,如果未缓存的请求需要数据库中的大量数据,则生成的查询可能需要 20-30 秒才能完成。
在这种情况下,一个 PHP Worker 至少会被占用半分钟。如果您的站点只有两个 PHP 工作线程,那么仅其中两个或三个长请求就足以开始导致错误。
为了解决这个问题,优化 MySQL 数据库并在 CPU 尚未达到极限的情况下增加 PHP 工作线程可以提高性能。
使用查询字符串绕过缓存
默认情况下,带有 https://www.okay6.com/?query=123
等查询字符串的 URL 会绕过页面缓存。在某些情况下,查询字符串可能会导致不必要的 PHP 和 CPU 使用率大幅上升。
例如,如果您访问来自 Facebook 的链接,您通常会在 URL 末尾看到 ?fbclid=
查询字符串。同样,单击电子邮件通讯中的链接后,您可能会看到 UTM 跟踪参数。
如果您网站上的帖子疯传,并且不断通过查询字符串进行访问,您将能够通过缓存分析报告识别特定的 URL。
有了这条关键信息,您就可以强制缓存该特定 URL,以减少 PHP Worker 的负载。
识别资源密集型插件
在某些情况下,缓存分析图表还可以用于识别资源密集型插件和进程。
例如,如果您看到顶部缓存绕过 URL 指向特定插件目录内的文件,则该插件很可能是 PHP 工作线程使用率较高的原因。
如果您在缓存绕过列表中看到大量与插件相关的请求,您可以与开发人员合作解决问题或切换到使用较少资源的插件。
总结概括
维护快速的 WordPress 网站的目标是最大限度地提高后端的效率。当通过在PHP worker 数量、CPU 使用率和代码优化之间找到平衡来正确利用 PHP workers时,WordPress 可以成为一个性能极高的 CMS。
现在轮到您了:您使用哪些优化策略来保持 WordPress 网站顺利运行?让我们在评论中知道!