2

连接的目的是通过只下载一个文件来提高性能,但这意味着每次您更改一些自己的 javascript 时,都会重新编译整个包并进行指纹识别 - 包括像 jQuery 这样的大型库没有改变,如果它们可以单独下载,它们会被缓存,但现在每次都将重新下载 jQuery,作为统一 application.js 的一部分。

我在这里想念什么?最好的方法不是创建两个清单吗 - 一个用于您自己的文件(很小且经常更改),另一个用于库(很大且不经常更改)?

4

1 回答 1

4

我会试一试,里面有一些猜测......

首先,JQuery 由 Rails 本身提供,根据您的布局,它将来自 CDN。因此,让我们看看可能随时间变化的库。这里有哪些场景?

  • 用户第一次访问该网站。他的浏览器(取决于类型)必须加载所有 Javascript 文件,然后才能显示低于该文件的内容(因此,将其移至末尾)。根据浏览器的不同,它可能一次加载 2、4、6 或 8 个资源,如果您的站点由数十个甚至数百个资源组成,那么这将减慢演示速度。
  • 用户第二次访问该网站(此页面)。通常在同一天、一小时甚至一分钟。整个东西都会被缓存,只有一个请求,可以使用缓存的东西,然后很快。如果所有资源(数百个)一个接一个被加载,如果缓存有效,将有数百个请求。
  • 用户第二次访问该网站,中间有一段时间(比如说 15 天)。仅更改了 1 个资源,所有其他资源都可以缓存和重用。这概率有多大?
  • 用户(开发人员)在开发期间访问他的工作。不使用资产管道,不使用缓存,因为每个更改都应该立即注意到。

所以我认为,从网站的角度来看,只有场景 3 可能(有点)慢,这是最不可能的。通常,许多请求的开销比请求的大小更相关。

如果您有时间,只需尝试使用显示所有资源加载时间的工具即可。可能存在一种资源会经常更改的极端情况,因此不应包含在资产管道中,但通常情况下,每次更改都包含大量资源,将它们缓存为一位 blob 有助于避免大量请求。

以下是讨论此问题的一些参考文献:

于 2012-07-14T17:20:43.513 回答