在选择托管计划时,选择最符合您的WordPress网站需求的计划非常重要。
例如,一个每月有50,000名访问者的电子商务网站通常比具有相同流量的简单博客对资源的要求要高得多。
这仅仅是因为电子商务网站本质上通常是动态的,并且需要更多资源用于PHP和数据库查询。
这就是PHP worker发挥作用的地方。阅读下文,了解PHP worker是什么以及如何使用它们来加快您网站上请求的处理速度。
- 什么是PHP worker?
- WordPress如何使用PHP Workers?
- PHP Worker与CPU的关系
- 如何优化您网站的PHP Worker使用
- PHP Workers不足的后果
- 估计所需PHP workers的数量
什么是PHP worker?
在WordPress的上下文中,PHP worker构建页面、处理计划的后台任务等等。由于PHP worker直接负责生成HTML页面以提供给您网站的访问者,因此他们决定了您的网站在任何给定时间可以同时处理多少个未缓存的请求。
例如,假设您的WordPress站点配备了两个PHP workers,并且没有设置页面缓存。如果四个请求同时到达您的站点,则其中两个请求将立即得到处理,而另外两个则必须在队列中等待,直到前两个请求完成处理。
尽管我们实现了服务器级缓存,但对于绕过或丢失缓存的请求,PHP workers变得非常重要,因为他们必须为每个请求工作。
通常我们会在电子商务和社区论坛网站上看到很多未缓存的请求。因此,这些站点将需要额外的PHP workers来确保处理每个请求而不会出现延迟或超时。
如果您的网站经过高度优化或没有大量PHP代码(例如复杂的主题或大量WordPress插件),那么处理每个请求应该几乎立即发生。即使有2个PHP workers和4个请求,所有4个请求都将很快得到处理。
简单地说,PHP workers是运行PHP代码的服务器上的后台进程。
WordPress如何使用PHP Workers?
在我们讨论如何优化WordPress的PHP worker使用之前,我们必须首先了解WordPress如何使用PHP worker。
未缓存环境中的典型请求如下所示:
- Web服务器(Nginx或Apache)接收来自访问者的请求。
- Nginx将请求传递给PHP。
- PHP根据需要查询MySQL数据库并使用主题的PHP模板生成HTML页面。
- PHP将呈现的HTML页面交还给Web服务器。
- 该页面提供给访问者。
在上面突出显示的过程中,第3步是最耗费时间和资源的(CPU和RAM)。具有最少数据库查询和高效PHP代码的高度优化的站点将相对较快地完成第三步。
相反,一个编写糟糕的PHP代码并进行大量不必要的数据库查询的站点将花费更多的时间来完成第3步,这意味着请求将占用PHP worker更长的时间。
PHP Worker与CPU的关系
当谈到WordPress性能时,PHP worker和可用CPU之间的关系是一个需要考虑的重要因素。
如果CPU资源不足是您网站的瓶颈,那么增加PHP worker的数量不会提高您网站的性能——它只会让您的网站同时处理更多请求,而每个请求的性能会降低。
让我解释。
想象一个带有一根软管的消防栓。只需连接一根软管,消火栓就能提供足够的水压。现在,如果我们将十根软管连接到消火栓上会发生什么?
有限的水压分布在十根软管上,这意味着每根单独的软管完成工作所需的水压较小。在这个类比中,消火栓是CPU,软管是PHP worker。
考虑到上述情况,如果您的主机不断建议您增加PHP worker而没有提及CPU,您应该小心。
让我们暂时回到消防栓的比喻。
想象一下,您需要用5根软管扑灭10场火灾。连接所有五根软管后,您会意识到消火栓仍在提供足够的水压。
在这种情况下,连接更多软管是有意义的,因为消火栓的水压不是瓶颈。
同样,如果您的站点在CPU和RAM开销充足的情况下表现不佳,那么您应该考虑增加PHP worker的数量作为提高性能的一种选择。
如何优化您网站的PHP Worker使用
我们已经解释过PHP workers是使用PHP代码生成HTML页面的后台进程。现在,减少和优化PHP workers使用的最明显方法是减少满足对您的站点的请求所需的CPU和PHP资源量。
这是如何做到的。
1. 为您的WordPress网站设置缓存
减少PHP worker使用的第一步是为您的WordPress站点设置缓存层。默认情况下,WordPress是一个动态CMS,可以按需满足每个页面请求。
对于博客、在线杂志和作品集等许多网站,使用PHP为每个请求动态生成页面是不必要的。
页面缓存
您当前正在阅读的博客文章是不需要动态生成的页面的完美示例。与我们的许多其他文章一样,此文章中的内容被设计为静态的,因此无需花费CPU资源来连续生成相同的页面。
相反,最好让PHP生成一次页面然后缓存它。与使用PHP动态生成页面相比,页面缓存具有许多明显的优势。
例如,想象一下,如果您网站上的博客文章在发布后的几个小时内传播开来并获得100,000次页面浏览量。如果没有页面缓存,您的PHP worker可能会不堪重负,您的服务器可能会崩溃。
使用页面缓存,只会动态生成首页视图。其他99,999个请求将从您的页面缓存中提供服务,该缓存使用相对较少的CPU资源。
有两种方法可以为您的WordPress网站设置页面缓存。
- 使用Nginx等Web服务器进行服务器级页面缓存。
- 使用WP-Rocket等WordPress插件进行基于插件的页面缓存。
为了获得最佳性能,我们建议尽可能使用服务器级页面缓存,比如使用Nginx的FastCGI缓存模块以获得超快的性能。
如果您的主机不提供服务器级页面缓存选项,则下一个最佳选择是使用WordPress缓存插件在应用程序级别实现页面缓存。
对象缓存
对于无法有效利用页面缓存的WooCommerce商店、社区论坛和其他WordPress站点,在MySQL数据库前添加像Redis这样的持久对象缓存可以提高性能并减少 PHP worker的负载。
如果没有持久对象缓存,MySQL数据库查询将为每个请求执行,即使结果与前一个查询相同。
例如,绕过页面缓存的社区论坛站点将对数据库进行单独的相同查询以获取帖子数据以构建页面。
对于高流量和大量数据库的站点,这种查询数据库的方法效率低下,因为它使用PHP worker为单独的请求生成相同的查询结果。这就是Redis的用武之地。
Redis将数据库查询的结果存储在RAM中,这允许PHP抓取已经执行的查询结果。这种对象缓存方法允许PHP worker节省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有三个例子。
3. 选择一个注重性能的WordPress主机
信不信由你,选择正确的WordPress主机会对您网站的性能产生巨大影响。由于PHP worker的效率与CPU和RAM直接相关,因此将您的网站托管在具有最新硬件的现代服务器上可以帮助您优化 PHP 工作者的使用。
以下是两个示例,说明为什么选择以性能为中心的主机对您的WordPress网站很重要。
高性能CPU
PHP使用CPU资源来执行代码。更快的CPU意味着更快的代码执行。
快速SSD存储
磁盘I/O速度会对代码执行和数据库查询产生直接影响。如果您的数据库存储在速度较慢的机械磁盘或基于云的SSD上而没有足够的IOPS(每秒输入/输出操作),您的 PHP 工作人员将被迫花费更多时间来满足请求。
4. 与绩效专家合作(可选)
如果您不确定如何解决网站上的性能问题,我们建议您与合格的性能专家合作来诊断问题。
专家可以通过使用New Relic或WordPress插件Query Monitor等高级监控工具来帮助您识别代码中的特定瓶颈。
通过放大和检查单个PHP进程和数据库查询,可以识别给您网站的PHP worker带来高负荷的特定代码块及其相关功能。
总结PHP worker优化,请记住以下提示。
- CPU和RAM应该与PHP worker一起扩展。如果CPU使用率锁定在100%,添加更多PHP workers不会提高性能。
- 使用注重性能的主机托管您的网站可以解决许多性能问题。
- 页面缓存和对象缓存可以显着减少PHP工作负载。
- 使用优质的WordPress插件和主题可以减少您网站上不必要的代码膨胀量。
- 如有必要,请与性能专家合作以识别和解决复杂问题。
PHP Workers不足的结果
为了让您的WordPress网站获得快速可靠的性能,确保它有足够的PHP workers非常重要。当PHP worker已经在一个站点上忙碌时,他们开始建立一个队列。
一旦达到PHP worker的限制,队列就会开始推出较旧的请求,这可能导致504错误或不完整的请求。
由于缺少PHP worker,我们看到的另一个常见错误是502 bad gateway errors。这些与504错误略有不同,因为错误发生在PHP工作队列中的60秒超时之后。
这些错误不仅会给访问者带来糟糕的用户体验,还会对您网站的SEO产生负面影响。
502(错误网关)错误
有许多不同的因素会导致页面加载缓慢或错误。例如,如果未缓存的请求需要来自数据库的大量数据,则生成的查询可能需要20-30秒才能完成。
在这种情况下,一个PHP worker至少会被占用半分钟。如果您的站点只有两个PHP worker,那么这些长请求中的两个或三个就足以开始导致错误。
为了解决这个问题,优化MySQL数据库并在CPU尚未达到极限的情况下增加PHP worker可以提高性能。
估计所需PHP worker的数量
一般来说,以静态内容为主的站点——文章、静态页面和作品集——不需要很多PHP worker。
对于具有更多动态功能(如电子商务或论坛)的大型WordPress网站,我们发现4个PHP worker是一个很好的起点。但是,这可能因站点而异,因为每个站点都有自己独特的一组主题、插件、数据库查询和缓存与未缓存的比率。
在某些情况下,可能需要更多的PHP worker才能获得快速和可靠的性能。
PHP Worker限制图表
部分主机服务商会提供PHP worker限制图表可让您查看PHP引擎在其错误日志中报告达到最大分配worker数量的次数。此图表可以帮助您衡量性能优化是否会影响您的PHP worker使用情况。
顶级缓存绕过
例如,如果您将站点的PHP版本从5.6切换到7.4,您可能会看到PHP worker限制下降,因为PHP 7.4比5.6快得多。
同样,如果您与性能专家合作修复长数据库查询并切换到更轻量级的主题,您可以使用PHP worker限制图表查看优化前后的差异。
缓存分析图
您还可以使用服务器提供商的缓存分析报告(如果有)来确定缓存命中、绕过、未命中和过期的数量。在优化您的网站对PHP worker的使用时,此数据可能特别有用。
使用查询字符串绕过缓存
默认情况下,带有查询字符串的URLhttps://kinstalife.com/?query=123
会绕过页面缓存。在某些情况下,查询字符串可能会导致不必要的PHP和CPU使用率大幅上升。
例如,如果您访问Facebook的链接,您通常会在URL的末尾看到查询字符串?fbclid=
。同样,单击电子邮件通讯中的链接后,您可能会看到UTM跟踪参数。
带有查询字符串 (?querystring=123) 的URL
如果您网站上的帖子病毒式传播,并且不断通过查询字符串访问,您将能够使用缓存分析报告识别特定URL。
使用该关键信息,您可以强制缓存该特定URL,以减少PHP worker的负载。
识别资源密集型插件
在某些情况下,缓存分析图还可用于识别资源密集型插件和进程。
例如,如果您看到顶部缓存绕过URL指向特定插件目录中的文件,则该插件很可能是导致PHP worker使用率高的原因。
如果您在缓存绕过列表中看到大量与插件相关的请求,您可以与开发人员合作解决问题或切换到使用较少资源的插件。
小结
维护快速WordPress网站的目标是最大限度地提高后端的效率。当通过在worker数量、CPU使用率和代码优化之间找到平衡来正确利用PHP worker时,WordPress可以成为一个非常高性能的CMS。
原文地址:https://www.wbolt.com/php-workers.html