首页 > 解决方案 > nginx + php-fpm 产生 300ms 开销

问题描述

我目前已经设置了一个服务器来托管一个 WordPress 站点,一个运行所有 nginx、php-fpm、WordPress 和 MariaDB 的服务器。该网站在主题中进行了大量定制。当我优化网站时,我从 WP 级别开始并取得了一些成功,调试栏报告 PHP 加载时间从 ~700ms 到 ~300ms,但是在开发人员控制台中 PHP 需要 ~600ms 才能完成加载(服务器 ping <20ms) . 这意味着 nginx 和 php-fpm 会产生大约 250 毫秒的开销。

为了隔离问题,我在 index.php 中使用了 microtime() 并确认整个 WP PHP 花费了 <350ms。

然后尝试解决,我尝试了这些设置:

然而改进并不显着。我想知道是否有可能摆脱约 250 毫秒的开销?在我看来,像 nginx 这样的高性能软件上的 250 毫秒是不合理的,应该能够被淘汰。任何线索和帮助表示赞赏。

PS:这是第一次询问SO,如果我不遵守约定和规则,请见谅。

标签: phpnginx

解决方案


事实证明,应该归咎于 Autooptimize 插件。简而言之,Autoptimize 在开始时执行 ob_start 并开始缓冲整个 HTML 输出,当所有脚本结束时(即 index.php 退出),然后将执行 Autoptimize 的一些代码并进行缩小,然后将任何内容发送到 nginx。因此:

  1. 即使在 index.php 中使用 microtime() 也无法正确计时整个处理,因为缩小在index.php 结束后开始。
  2. 由于它缓冲了整个输出,因此在缩小完成之前无法发送第一个字节。

我们在 Autoptimize 上对各种配置进行了基准测试,结果基本上建议将其删除,即启用任何 HTML/CSS/JS 缩小都会降低性能/严重增加 TTFB。

基准

所有 CSS JS HTML 上

TTFB                 513
Overall_Elapsed      593
Body Size            464598
Req Count            144-154

HTML 关闭,JS CSS 开启

TTFB                 318
Overall_Elapsed      380
Body Size            518211
Req Count            144-155

HTML 开启,JS CSS 关闭

TTFB                 478.5
Overall_Elapsed      519
Body Size            285995
Req Count            161-165

HTML JS CSS 关闭

TTFB                 75.8
Overall_Elapsed      373
Body Size            340439
Req Count            163-172 

在 WP 中禁用自动优化

TTFB                 78.9
Overall_Elapsed      376
Body Size            339917
Req Count            163-171
  • Req 由于广告网络而波动。

结论

在我们的主题中,我们有 12 个 JS 和 1 个 CSS,以及一些其他插件的 JS 和 CSS。由于我们可以轻松地将 12 个 JS 合并为一个 JS,由于减少了 19 个请求,我们可以自己减少其中的 11 个。

此外,Autoptimize 通过将整个 style.css 内联到其中来“保存”CSS 请求,<head>这在很大程度上会使 HTML 膨胀。

因此,我强烈建议您尝试禁用自动优化,看看您的网站速度是否真的因此而提高。


推荐阅读