如何减少服务器“等待”时间?

时间:2012-06-07 19:36:45

标签: javascript performance apache networking

我正在尝试优化网站的速度,我正在使用pingdom.com上的精彩工具。现在,加载页面所需时间的50%以上是“等待”时间,如下面的屏幕截图所示。我该怎么做才能减少这个?此外,这个数字有多典型?这方面有基准吗?谢谢!

high server wait time

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

enter image description here

5 个答案:

答案 0 :(得分:51)

Apache的最常见原因是使用DNS Reversal Lookup。这意味着服务器每次发出请求时都会尝试确定您的计算机名称。这可能需要几秒钟,这就解释了为什么你有一个很长的等待时间然后非常快速的负载,因为问题不在于带宽。

明显的解决方案是在/etc/httpd/conf/httpd.conf中禁用hostnamelookup

HostnameLookups Off

然而......这通常是不够的。事实是,在许多情况下,即使您已禁用主机名查找,apache仍会执行反转查找,因此您需要仔细查看apache配置的每一行。特别是,最常见的原因之一是LOGS。默认情况下,在许多red hat-c​​entos安装中,日志格式包括%h代表“hostname”,并且需要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的%h来解决此问题。

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

效果取决于用户的地理位置和CDN的传播。不过,您可以预期significant improvement,50%-70%或更多。

根据经验,我看到了一些案例,其中90%的内容被缓存并直接从位于不同大陆的代理发送,来自全球另一端。

答案 4 :(得分:-1)

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

您无法通过javascript或代码端来解决此问题。