如何优化首次字节时间(TTFB)?

如何优化首次字节时间(TTFB)?

我有 nginx+apache 网络服务器和多个站点。

但是由于第一个字节的时间(TTFB)非常长:0.5-2秒对于每个请求(对于静态和动态内容)。

如何优化首次字节时间(TTFB)?

答案1

一般来说,第一个字节的时间取决于:

DNS 查找: 定义:查找域名的 IP 地址 改进:更多/分布式/响应式 DNS 服务器

连接时间: 定义:打开与服务器的套接字,协商连接改进:典型值应该在“ping”时间左右 - 通常需要往返一次

等待: 定义:发送第一个字节之前需要进行初始处理改进:这是您应该改进的地方 - 对于动态内容而言,它最为重要。

另外一个考虑因素是:

加工(第一个字节之后):定义:等待时间 + 内容的完整传输时间之和改进:如果传输时间明显长于下载接收的数据量的时间,则会发生进一步的处理,并可能进行优化(例如,页面正在刷新可用的内容)

鉴于我不知道您是如何进行测试的(或者关于您的设置,或者您所提供的内容),以下是相当一般的建议:

首先,尝试在远程(客户端)机器上使用 Firebug,并在服务器上使用 ab(ApacheBench)之类的工具。这将有助于将 TTFB 数字分解为其组成值,以便您可以集中精力一次修复一个 - 或者缩小问题范围。从不同位置运行测试还有助于指出连接时间和 DNS 查找中的问题,如果直接从您的服务器运行,则可能不会出现这些问题。此外,您需要从远程机器运行 ping 到您的服务器,以确定有多少时间仅归因于“往返时间”。

其次,尽可能避免使用 nginx 作为反向代理。如果每个请求在到达 Apache 之前都必须经过 nginx,那么它的速度会比 Apache 慢。尝试直接从 nginx 提供静态文件(即完全绕过 Apache),并缓存从 Apache 收到的一些内容(即 proxy_cache)。Nginx 应该能够非常快速地提供静态文件,特别是如果测试是从本地计算机运行的。如果不是这样,那么您需要查看您的配置以及服务器正在使用的资源。

第三,尝试确定您的性能在哪里受到影响 - 是 Apache 还是 nginx?比较通过 nginx 发出的请求与直接向 apache 发出的请求的 ab 结果(只需更改端口并指定主机标头)即可确定反向代理是否是重大瓶颈。

您曾提到该问题同样适用于静态和动态内容 - 但下一步将是对脚本进行分析,并查看慢查询日志以确定是否存在任何重大瓶颈。

答案2

一些想法:

  1. 升级你的内存(用于缓冲区/缓存),
  2. 使用 Nginx 中的 proxy_cache,
  3. 使用 SSD 或 Ramdisk,
  4. 使用内容分发网络。

如果您想要更详细的答案,您必须告诉我们更多信息。

相关内容