我正在尝试优化我的网站的速度,并使用pingdom.com上的优秀工具。 现在,加载页面的时间超过50%是“等待”时间,如下面的截图所示。 我能做些什么来减less这种情况? 另外,这个数字有多典型? 有没有基准呢? 谢谢!
编辑:好吧..让我澄清一些事情。 没有服务器端脚本或数据库调用正在进行。 只是HTML,CSS,JS和图像。 我已经做了一些事情,比如将js推到body标签的末尾以获得并行下载。 我知道main.html和templates.html通过在js.js下载之后同步完成而增加了总体等待时间,这不是问题。 每个请求有多less“等待”时间,我只是感到惊讶。 服务器距离是否影响到此? 在共享服务器上如何,这会影响等待时间? 有没有什么拙劣的成果来弥补这些问题?
在Apache中最常见的原因是使用DNS反向查找。 这意味着服务器每次发出请求时都会试图弄清楚你的机器是什么名字。 这可能需要几秒钟的时间,这就解释了为什么你有一个很长的等待时间,然后很快的负载,因为这个问题不是带宽。
明显的解决方法是在/etc/httpd/conf/httpd.conf中禁用主机名查找
HostnameLookups Off
但是…这通常是不够的。 事实是,在许多情况下,即使禁用主机名查找,apache仍然会进行反向查找,因此您需要仔细查看apache配置的每一行。 特别是最常见的原因之一是LOGS。 默认情况下,在许多红帽子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来解决这个问题。
如果有多个服务器请求正在等待页面,则可以确保这些服务器请求是并行发送的,以便序列化它们。
获取多个请求的最慢可能的方式是发送一个请求,等待它的响应,发送下一个请求,等待它的响应等等。通常以更快的速度异步发送所有请求,然后处理所有响应。 这将总等待时间缩短为任何单个请求的最长等待时间,而不是所有请求的累积等待时间。
如果您只是提出一个请求,那么您在客户端可以做的所有事情就是确保请求在页面加载顺序中尽早发送到服务器,以便页面的其他部分可以在请求正在处理的同时正在做他们的业务,从而更早地开始初始请求(因此更快完成)。
等待时间(也称为第一个字节的时间)是服务器从连接开始时发送第一个字节需要多长时间。 如果这个值很高,这意味着服务器在发送页面之前必须做很多工作才能呈现页面。 我们需要了解您的网站在呈现网页时所做的更多信息。
TTFB直接受到浏览器和服务器之间“物理”距离的影响。 CDN代理是缩短所述距离的最佳方式。 这与本地缓存功能相结合,将通过从最近的POP(位置放置点)位置加载缓存的对象来帮助提供更快速的响应。
效果将取决于用户的地理位置和CDN的传播。 不过,你可以预期有显着的改善 ,50%-70%或更多。
根据经验,我看到90%的内容被缓存,并从位于另一个大陆的代理直接传送到另一个地球。
这是服务器的问题…根据Pingdom的说法,“Web浏览器正在等待来自服务器的数据”是什么定义了“等待”时间。
从JavaScript或代码的最后解决这个问题你可以做的不多。