是否减少HTTP请求?

时间:2010-06-24 15:34:59

标签: javascript http performance minify

理论问题:
我们都知道缩小和组合javascript文件以减少HTTP请求以加速网站的专业人士。但是当使用流行的javascript库(例如jQuery)时,假设这些库已经从另一个页面下载到客户端计算机并不是太愚蠢。

那么应该更喜欢什么呢? 业内的大家伙如何处理它?<​​/ strong>

A)将每个脚本合并并缩小为一个大型脚本并从我自己的CDN中提供。

B)将所有“自编”脚本合并到一个文件中,尽可能利用可用的CDN库。

谢谢!

7 个答案:

答案 0 :(得分:13)

  • “将每个脚本合并并缩小为大型脚本并从我自己的CDN

    如果你有CDN,我们在说什么? :)你的意思是服务器,对吧?

  • “业内大公司如何处理它?”

    大家伙总是使用他们自己的服务器。

  • “......假设这些已经从其他页面下载到客户端计算机上并不是太愚蠢。”

    不幸的是。事实:

    • 40-60%的用户拥有 empty cache experience
    • 浏览器 cache limits are small
    • 正在使用不同版本的库,只有匹配
    • 才会发生缓存 来自新域的
    • 资源会创建 DNS查找,这很慢
    • +您需要管理依赖关系

答案 1 :(得分:6)

我认为这取决于您的网站:

  • 如果您的网站主要包含需要相同脚本的相同类型的网页,我会选择 A)
  • 如果你有很多脚本与你网站的每个子网站不同,我会选择 B)。在一个脚本中将最常用的脚本组合在一起。如果您有大型脚本未在每个页面上使用,请为其创建单独的脚本。

真正知道该怎么做的最好方法是测试哪种技术组合可以为您节省最多的流量/连接。

P.S。:我个人不喜欢让其他人为我的网页提供文件的想法,因为如果CDN失败会发生什么,但你的服务器还活着?如果这对您来说不是问题,请尝试从可靠的CDN为您使用的所有库提供服务。

答案 2 :(得分:4)

我认为最好的方法是使用缩小的'application.js'文件(包含所有特定于应用程序的javascript),然后使用Google AJAX Libraries API(找到here)等服务来加载jQuery,Prototype等等。

答案 3 :(得分:3)

我认为这取决于几件事:

  1. 在整个网站中使用代码的页数
  2. CDN的质量
  3. 它是多少代码
  4. 使用流行的Javascript包(例如jQuery)和使用个人包之间也存在差异,只有访问过您网站的访问者才会使用。

    性能增强可能发生在两个地方:1)浏览器缓存和2)dns缓存,即使文件没有存储在本地,dns服务器也有一条路径可以最小化请求时间,甚至可以临时服务文件。

    我建议使用CDN并在本地托管文件。根据您的资源(硬件/带宽),您可能无论如何都需要使用CDN。使用服务器端调度程序检查CDN状态并在适用时重新路由路径会很好。

    另外,请提醒一些用户选择关闭浏览器缓存。所以缩小你的JS总是有利的。您应该将JS分成两个文件:1)加载时需要和2)加载时不需要。基本上,首先获取必要的代码,以改善感知的加载时间。然后加载所有其他附加功能(例如幻灯片,换色器等)。

    最后一点是使用Expires标头,因为如果不对其进行优化,这一点都不重要。这将真正降低启用缓存的返回访问者的速度。 YSlow是一个不错的Firefox插件,有助于评估您的负载性能。


    回答您的问题:减少HTTP请求,但是对JS的文件大小进行自己的评估。

    (极端)您不需要一个10MB的JS文件,或者您的网站需要很长时间才能加载。由于HTTP开销,您也不想要1000个10KB文件。再次,使用它来说明您希望在文件大小和数量之间取得平衡的点 - 正如我之前所说的那样,将它们打包成所需的性能与所需的性能。

答案 4 :(得分:3)

Omar al Zabir经营着一个名为pageflakes的网站,并且有很多关于如何提高性能的文章。 One of them特别解释了在发送到客户端之前如何在服务器端压缩和组合各种事物。

您还可以使用css image sprites来减少HTTP请求。它们对常用图像有很大帮助。

*我当然没有庞大的制作网站,但这些确实有助于节省带宽成本。

答案 5 :(得分:2)

特别是关于业内大公司如何处理客户端脚本的问题,您可以随时查看。 stackoverflow.com似乎很好依赖谷歌的jquery lib版本。其他人最不明智......

答案 6 :(得分:2)

没有特别的原因,获得一个脚本会比分割它更快。这是因为浏览器并发下载是有限的,但不是一个。

我认为应该先处理同步UI脚本,然后再处理“用户活动响应”脚本(如验证等)。

其他所有条件相同,选项B看起来是最好的。