什么更好?更多HTTP请求=传输的数据更少或HTTP请求更少=传输更多数据?

时间:2011-06-24 23:17:56

标签: javascript css apache2 lazy-loading

像Facebook这样的网站使用“懒惰”加载js。 当你必须考虑到我有一台服务器,流量很大时。

我很感兴趣 - 哪个更好?

当我一次执行更多HTTP请求时 - 页面加载速度变慢(由于限制(一次2个请求))

当我使用所有代码执行一个HTTP请求时 - 流量(GB)变高,并且apach稍微休息一下。但是,我们的页面加载速度会变慢。

结果更快?

3 个答案:

答案 0 :(得分:2)

减少请求!这就是为什么我们组合JS文件,CSS文件,使用图像精灵等等。你看到web的问题不是服务器或浏览器的速度或处理问题。最大的瓶颈是延迟!你应该查看Steve Souders的演讲。

答案 1 :(得分:2)

问题就是那个细微差别。

如果您将脚本标记放在页面底部的任何位置,那么您将减慢页面呈现速度,因为浏览器在遇到脚本标记时不会太多,其他则下载并执行它。因此,如果脚本标记位于标题中,则会在其他任何内容之前发生,这会导致用户坐在白色屏幕上,直到所有内容都下载。

“正确”的方式是将所有内容放在最底层。这样,页面呈现为资源下载,最后一步是应用行为。

但是如果你有大量的javascript会发生什么? (在facebook的例子中,关于一个meg)你得到的是页面渲染,并且在js关闭之前完全无法使用。

此时,您需要查看您拥有的内容并开始在重要和非重要的js之间进行分割。通过这种方式,您可以采用多阶段方法,为页面引入必要的内容,以便在最低级别快速运行,然后加载不太重要的内容,甚至按需加载。

通常,您会知道何时到达那里,此时您需要查看更高级的技术,如脚本加载器。在此之前,答案总是“减少http请求”。

答案 2 :(得分:1)

这实际上取决于情况,设备,受众和互联网连接。

移动设备例如需要尽可能少的HTTP请求,因为它们在较慢的连接上,并且每次往返都需要更长的时间。你应该在CSS文件中使用内联(base-64)图像。

通常,我将主平台和js libs + css压缩为一个文件,每个文件都缓存在CDN上。只在一个页面上的JavaScript或CSS功能我将内联或包含在它自己的文件中。 JS功能并不重要,我将移到页面底部。对于所有文件,我设置了一个远HTTP HTTP expires头,因此它永远存在于浏览器缓存中(或者直到我更新它们或者当缓存填满时它会被淘汰)。

此外,为了克服下载限制,您可以使用像images.yourcdn.com和scripts.yourcdn.com这样的CNAMES,以便用户可以并行下载更多文件。即使您不使用CDN,也应该将您的静态媒体托管在单独的主机名上(可以指向同一个框),这样用户就可以在不需要时发送cookie。这听起来像是溢出,但cookie可以轻松地为每个请求添加额外的4-8kb。

在开发人员环境中,您应该使用所有未压缩和单个文件,例如,不需要将每个插件移动到一个脚本 - 当有更新时很难维护。在测试和部署之前,您应该有一个脚本来合并文件。这听起来像很多工作,但它是你为一个项目做的事情,可以重用于所有未来的项目。

TL; DR:这取决于,但通常两者的混合是合适的。 'Cept for mobile,更少的HTTP更好。