如何优化时间第一字节(TTFB)?

我有几个网站的nginx + Apachenetworking服务器。

但是TTFB(TTFB)的时间很长:每个请求( 静态和dynamic内容 )需要0.5-2秒

如何优化时间第一字节(TTFB)?

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

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

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

等待:定义:可以发送第一个字节之前的初始处理改进:这是您应该改进的地方 – 对于dynamic内容来说,这是最重要的。

另外的考虑来自:

处理 (在第一个字节之后):定义:等待+内容完全传输的总和改进:如果传输时间明显长于预期下载所接收数据的数量,则进一步处理正在发生,并且可能被优化(例如,页面正在刷新内容,因为它是可用的)

鉴于我不知道你是如何进行testing的(或者你的设置,或者你所服务的内容),下面是一些相当一般的build议:

首先,尝试在远程(客户端)机器上使用Firebug,并在服务器上使用诸如ab(ApacheBench)之类的东西。 这将有助于将TTFB号码分解为其组件值,以便您可以专注于一次修复它们,或者缩小问题的范围。 从不同位置运行testing还有助于指出连接时间和DNS查找中的问题,如果直接从服务器运行,这些问题可能不会发生。 此外,您还需要从远程计算机运行ping到您的服务器,以确定有多less时间归因于“往返时间”。

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

第三,试着确定你的性能受到的影响 – 是Apache还是nginx? 将通过nginx的请求的ab结果与直接对apache的请求(仅更改端口并指定主机头)进行比较,以确定反向代理是否是一个重要的瓶颈。

您已经提到,这个问题同样适用于静态和dynamic内容 – 但下一步将是分析您的脚本,并查看慢速查询日志以确定是否有任何重大瓶颈。

一些想法:

  1. 升级你的内存(缓冲区/caching),
  2. 在Nginx中使用proxy_cache,
  3. 使用SSD或Ramdisk,
  4. 使用内容交付networking。

如果你想要更详细的答案,你必须告诉我们更多关于。