36

我正在尝试优化我网站的速度,我正在使用pingdom.com上的出色工具。现在,加载页面所需的时间超过 50% 是“等待”时间,如下面的屏幕截图所示。我能做些什么来减少这种情况?另外,这个数字有多典型?有这方面的基准吗?谢谢!

服务器等待时间长

编辑: 好的..让我澄清一些事情。没有服务器端脚本或数据库调用正在进行。只有 HTML、CSS、JS 和图像。我已经做了一些事情,比如将 js 推送到 body 标签的末尾以获得并行下载。我知道 main.html 和 templates.html 通过在 js.js 下载后同步完成而增加了整体等待时间,这不是问题。我只是对每个请求有多少“等待”时间感到惊讶。服务器距离会影响这个吗?在共享服务器上怎么样,这会影响等待时间吗?是否有任何容易实现的成果来解决这些问题?

在此处输入图像描述

4

5 回答 5

60

对于 Apache,最常见的原因是使用了 DNS 反向查找。这意味着每次您发出请求时,服务器都会尝试找出您机器的名称。这可能需要几秒钟,这解释了为什么您有很长的等待时间,然后加载非常快,因为问题与带宽无关。

显而易见的解决方案是在 /etc/httpd/conf/httpd.conf 中禁用主机名查找

HostnameLookups Off

然而……这通常是不够的。事实是,在许多情况下,即使您禁用了主机名查找,apache 仍然会进行反向查找,因此您需要仔细查看 apache 配置的每一行。特别是,最常见的原因之一是日志。默认情况下,在许多 red hat - centos 安装中,日志格式包括代表“主机名”的 %h,并且需要 apache 进行反向查找。你可以在这里看到这个:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common

您应该将那些 %h 更改为 %a 以解决此问题。

于 2012-12-02T19:29:43.253 回答
2

如果您有多个页面正在等待的服务器请求,您可以确保这些服务器请求是并行异步发送的,以便您对它们进行序列化。

获取多个请求的最慢方法是发送一个请求,等待其响应,发送下一个请求,等待其响应等...异步发送所有请求然后在所有响应到达时处理它们通常要快得多. 这将总等待时间缩短为任何单个请求的最长等待时间,而不是所有请求的累积等待时间。

如果您只发出一个请求,那么您在客户端所能做的就是确保在页面加载顺序中尽早将请求发送到服务器,以便页面的其他部分可以在处理请求的同时开展业务,从而更快地启动初始请求(从而更快地完成)。

于 2012-06-07T20:06:27.553 回答
1

等待时间,也称为第一个字节的时间,是服务器从启动连接开始发送第一个字节所需的时间。如果这个值很高,则意味着您的服务器在发送页面之前必须做很多工作来呈现页面。我们需要更多关于您的网站正在做什么来呈现页面的信息。

于 2012-06-07T19:47:45.467 回答
0

TTFB 直接受浏览器和服务器之间的“物理”距离的影响。CDN 代理是缩短上述距离的最佳方式。这与本机缓存功能相结合,将有助于通过从最近的 POP(放置点)位置加载缓存对象来提供更快的响应。

效果将取决于用户的地理位置和 CDN 的传播。尽管如此,您仍然可以期待50%-70% 或更多的显着改进。

根据经验,我看到 90% 的内容被缓存并直接从位于不同大陆、来自地球另一端的代理传送。

于 2013-08-12T18:56:05.663 回答
-1

这是服务器的问题...根据 Pingdom 的说法,“Web 浏览器正在等待来自服务器的数据”是定义“等待”时间的原因。

您无法从 javascript 或代码端做很多事情来解决此问题。

于 2012-06-07T19:40:52.550 回答