2012-06-07 49 views
32

我想优化我的网站的速度,我在pingdom.com上使用了很棒的工具。目前,加载页面花费的时间超过50%是“等待”时间,如下面的屏幕截图所示。我能做些什么来减少这种情况?此外,这个数字有多典型?有没有基准呢?谢谢!如何减少服务器“等待”时间?

high server wait time

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

enter image description here

+0

这不是一个真正的编程相关问题。尝试http://serverfault.com/ – Gerrat

回答

-1

这是服务器的问题。据Pingdom的“网络浏览器正在等待来自服务器的数据”是什么定义“等待”的时间。

从JavaScript或代码的最后解决这个问题的方法并不多。

+3

这不是等待时间。 – ddlshack

1

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

+0

很好,这也可能与您的HDD/RAID上的访问时间有关。我的SSD服务器的第一个字节(TTFB)的时间较短,而且网站确实加载速度更快。 – Thom

+1

服务器可能需要做很多工作,但它可能同样需要做很多等待。在知道应该为最大的胜利应付什么之前,你需要分解那段时间。 – Jason

2

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

获取多个请求的最慢可能方式是发送一个请求,等待它的响应,发送下一个请求,等待它的响应等等。通常以更快的速度异步发送所有请求,然后处理所有请求他们到达时的反应。这将总等待时间缩短为任何单个请求的最长等待时间,而不是所有请求的累积等待时间。

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

49

在Apache中最常见的原因是使用DNS反向查找。这意味着服务器每次发出请求时都会尝试弄清楚您的机器名称。这可能需要几秒钟的时间,这就解释了为什么你需要很长的等待时间,然后是很快的负载,因为这个问题不是带宽问题。

其明显的解决方案是在/etc/httpd/conf/httpd.conf中

HostnameLookups Off 

禁用hostnamelookup但是......这通常是不够的。事实是,在许多情况下,即使您禁用了主机名查找,apache仍会进行反向查找,因此您需要仔细查看apache配置的每一行。特别是LOGS最常见的原因之一。默认情况下,在许多Red Hat - Centos安装中,日志格式包括代表“hostname”的%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来解决这个问题。

+1

感谢队友..任何来源推荐这样的提示? –

+0

@ÜnsalKorkmaz在这里你去http://httpd.apache.org/docs/2.2/mod/mod_log_config.html 编辑:对不起,我误读。以为你说过“任何资源推荐”。 – ConnectedSystems

+1

'''HostnameLookups'''已关闭,但'''LogFormat''是罪魁祸首。通过将%h更改为%a,我获得了50%的提升。 – Birla

0

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

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

根据经验,我看到90%的内容被缓存,并直接从位于另一个大陆的代理服务器提供,这些代理服务器位于全球另一端。

相关问题