我希望在全球范围的 Web 应用程序方面有更多经验的人能够澄清我的一些问题、假设和可能的误解。
让我们假设一个站点(大量客户端/动态组件)在全球拥有数十万用户,并且从一个位置(比方说中欧)提供资源。
- 如果应用程序依赖于流行的 JavaScript 库,最好从 Google CDN 获取它并将其编译成一个缩小的 JS 文件(以及所有特定于应用程序的 JavaScript)还是从 Google CDN 单独加载它?
- Assetic VS headjs:加载单个 JS 文件或并行加载所有脚本(按依赖顺序执行)是否更有意义?
我的假设(请纠正我):
将所有特定于应用程序的/本地 JS 代码编译到一个文件中,使用 Google 等流行库的 CDN 等,但通过 headjs 并行加载所有这些似乎是最佳选择,但我不确定。服务器端将第三方 JS 和特定于应用程序的 JS 编译到一个文件中似乎几乎违背了使用 CDN 的目的,因为无论如何该库可能都为用户缓存在某个地方。
除了缓存之外,从 Google 的 CDN 下载第三方库可能比托管应用程序的中央服务器更快。
如果一个流行的 JS 库的新版本发布了,性能有了很大的提升,用应用程序进行测试然后实现:
- 如果所有的 JS 都被编译成一个文件,那么即使应用程序代码没有改变,每个用户都必须重新下载这个文件。
- 如果第三方脚本是从 CDN 加载的,那么用户只能从 CDN(或从某处的缓存)下载新版本。
在所描述的情况下,是否有以下任何合理的担忧?
- 一些用户(或浏览器)一次只能与一个主机名建立一定数量的连接,因此从第三方 CDN 检索一些脚本将导致整体加载时间更快。
- 一些用户可能在受限环境中使用应用程序,因此应用程序的域可能会被列入白名单,但 CDN 的域不会。(如果这可能是现实问题,是否有可能尝试从 CDN 加载并在出现故障时从中央服务器加载?)