php - 不同的服务器处理 TTFB 和内容下载的方式不同
问题描述
我有一个网页显示有问题的缓慢。在调试它时,我注意到在第一次请求 (TTFB) 之后,90% 到 99% 的等待时间都花在了服务器上,平均约为 8 秒。怀疑是针对未优化的查询,大量没有适当索引的内部和外部连接等......但这不是问题:)
我注意到,在生产服务器上(在 OVH 的 dedi 机器上运行 Cloudlinux),对于与我的开发机器(运行 MAMP Pro 的 Mac OS X)相同的总等待时间,分布(和行为)是完全不同的并想知道是否有人对原因有任何确切的了解:
- CloudLinux 服务器:12.22s (TTFB) + 2.61ms(内容下载)
- MAMP Pro:2.36s (TTFB) + 7.46s(内容下载)
好的,两台服务器之间的负载不同。但无论如何,这种模式很奇怪:在 Linux (Apache2 + php 7.3 + MySQL) 上,服务器似乎准备好了一切,当一切准备就绪时,它会将要下载的全部内容交给浏览器 (Chrome) 继续执行很快。
在 MAMP 服务器(Apache 2、PHP 7.3、MySQL)上,看起来浏览器(相同的 Chrome)开始下载和显示内容,即使服务器仍在处理页面的其余部分。
我不确定这是 PHP 或 Apache 配置中设置的行为,还是平台差异所固有的。如果有人能指出我正确的方向,那就太棒了。
让生产服务器像我的本地开发机器一样运行将是在等待重构发生时使该页面更可用的第一步。
编辑:
为了测试 PHP 缓冲输出,我添加了一个带有该行的 .user.ini 文件,php_value output_buffering Off
试图关闭任何缓冲。这没有发生,当所有“工作”完成后,页面仍然显示,TTFB 仍然占总等待时间的 99%。
解决方案
推荐阅读
- javascript - React Suspense 导致路由器道具未定义
- android - Unity Android USB 摄像头自动拒绝权限
- swift - 在 Swift 中获取和解码未知错误
- java - 为什么编译器在导入 javafx.scene.control.Label 时显示错误?
- javascript - JS用箭头函数和剩余参数创建数组
- laravel - 无法在附加模式下打开文件:无法打开流:权限被拒绝 laradock
- django - Django:为同一表单的不同出现自动保存不同的默认日期?
- jquery - 在元素之前选择同级
- typescript - 与 react-navigation v5 的深度链接
- java - 如何将嵌套的 For 循环输出动态输入到 ArrayList-Android