【发布时间】:2012-08-21 22:25:50
【问题描述】:
编辑澄清:
就性能(尽管我知道这仍然是一个野蛮的术语)而言,哪个更好 - 加载本地版本或 CDN 版本的 jQuery,而不是 RequireJS?
作为记录,RequireJS online doc 包含一些似乎不鼓励使用 CDN 的段落,尽管我不确定 100% 的含义:
不要在构建中混合使用 CDN 加载和 shim 配置。示例场景: 你从 CDN 加载 jQuery,但使用 shim 配置加载一些东西 就像依赖 jQuery 的 Backbone 的股票版本一样。当你这样做 构建,确保在构建文件中内联 jQuery 并且不要加载 它来自 CDN。否则,Backbone 将内联在构建的文件中 它将在加载 CDN 的 jQuery 加载之前执行。这是 因为 shim 配置只是延迟加载文件,直到 依赖项已加载,但不会对定义进行任何自动包装。 构建后,依赖项已经内联,垫片配置 不能延迟执行未定义()的代码,直到以后。 构建后定义()的模块确实可以与 CDN 加载的代码一起工作,因为 他们正确地将源代码包装在定义工厂函数中 在加载依赖项之前不执行。所以教训:垫片配置 是针对非模块化代码、遗留代码的权宜之计。 define() 的模块更好。
理论上,使用 CDN jQuery 文件会导致多出 1 个 HTTP 请求(不能使用 r.js 与其他 JS 文件合并),但潜在的好处是您的访问者可能已经缓存了其他的 CDN 版本他们访问过的网站。
但是,如果我从 google 搜索到的信息正确,您仍然需要为 r.js 提供本地 jQuery 副本,因为生成的缩小 JS 文件会仍然需要包含 jQuery 模块的副本以确保依赖的一致性。这将导致通过本地和 CDN 加载 jQuery。 (希望我没听错?)
那么,哪种方式更好?
【问题讨论】:
标签: javascript jquery requirejs cdn