0

围绕 gzip、缩小和结合两者以获得最大压缩效果的讨论让我想知道是否可以通过将 jQuery 库直接放在我的 HTML 文件中来获得净性能效果?

我已经对图标精灵进行了此操作,我对其进行 base64 编码,然后通过 CSS 数据源加载,以尽量减少 HTTP 请求的数量。

现在我问:您是否知道以原始 min+gzip 形式加载 jQuery 库(可在官方生产下载链接上获得)与通过托管在其 CDN 上的 Google AJAX 库加载它相比是否更有效?

4

1 回答 1

1

TL;博士:

您应该始终将公共项目(如 JS 库)保留在外部文件中,因为这允许在您的服务器、浏览器以及沿途的许多节点上进行缓存。在查看页面的整体速度时,缓存时间大大超过了压缩或请求时间。

更长的版本:

对于这个问题,有很多事情需要考虑。以下是我脑海中浮现的那些。

  1. 缩小脚本和样式总是有利于速度。我觉得这里没什么好讨论的。

  2. 压缩(和浏览器中的提取)有开销。启动 gzip 模块需要花费时间来发送请求,因此对于小文件或二进制文件(图像等),通常最好跳过 gzip。然而,大型且主要由 ascii 组成的东西(如 JS 库)是一种压缩的好东西,因此请检查一下。

  3. 减少 HTTP 请求通常是一件好事。但请注意,自 HTTP 1.1(所有主流浏览器都支持)以来,新的 HTTP 请求并不意味着新的套接字连接。使用keep-alive,同一个套接字连接可以一次性为网页和所有附属文件提供服务。请求的唯一额外开销是请求和响应标头,除非您有很多小图像/脚本,否则可以忽略不计。只需确保这些文件是从无cookie 域提供的。

  4. 与第 3 点相关,在页面中嵌入内容确实有减少 HTTP 请求的好处,但也有增加页面本身大小的缺点。对于像 JS 库这样大的东西,库的大小大大超过了额外文件所需的 HTTP 开销的大小。

  5. 现在这是踢球者:如果库嵌入在页面中,它几乎永远不会被缓存。对于初学者,大多数(所有?)主流浏览器默认不会缓存主 HTML 页面。CACHE-CONTROL如果需要,您可以在页眉中添加元标记,但有时这不是一个选项。此外,即使该页面被缓存,您的其余页面(可能也在使用该库)现在也需要缓存。突然间,您的整个网站都缓存在了用户的机器上,包括许多 JS 库的副本,而这可能不是您想要对用户执行的操作。另一方面,如果您将 JS 库作为外部文件,它可以自己缓存一次,特别是(如@Barmar所说)如果库是从像 Google 这样的通用 CDN 加载的。

  6. 最后,缓存不仅仅发生在客户端的浏览器中。如果您正在运行企业级服务,您可能拥有多个共享和单独缓存的服务器池、速度极快的 CDN 缓存、通往您的域的代理缓存,甚至某些路由器和其他设备上的 LAN 缓存。因此,现在我将您带回到顶部的 TL;DR,说您可以通过缓存(尤其是在浏览器中)获得的加速比您可能遇到的任何其他考虑更重要。

希望有帮助。

于 2012-10-02T06:36:54.757 回答