使用RequireJScaching特定模块
这个问题已经被问了好几次,但并不特定于这个例子。
这里是我们的应用程序的概述:
- 使用Express on Node进行简单的服务器路由
- 单页面主干应用程序
- 核心模块和库(JS / CSS)不变
- Widget JS / LESS / HTML文件经常改变
在开发过程中,我正在寻找caching的文件,但不是这些核心库,以加快我的页面重新加载,并加快我的发展。
我find了解释:
- 在RequireJScaching破坏 – 在这里
- caching清除特定模块的说明 – 这里
可以解决scheme:
- 解释一下requireJScaching是如何工作的?
- 为此特定场景提供解决scheme。
caching清除通过在每个需要的文件末尾附加一个始终唯一的查询string来工作。 它使用了RequireJS的urlArgs
configuration值; RequireJS负责为您添加它:
urlArgs: "bust=" + (new Date()).getTime()
(new Date()).getTime()
部分是从JavaScript中获取唯一string的简单方法。 你可以在Math.random()
上做一些变化,但是使用自纪元以来的毫秒数来保证唯一性,以便获得最佳的caching。
我认为伯克先生正在提出如下的build议:
require.config({ baseUrl: '/base/path', paths: { 'fileAlias': 'fileLikelyToChange?bust=' + (new Date()).getTime(), 'anotherFileAlias': 'anotherFileLikelyToChange?bust=' + (new Date()).getTime(), 'jQuery': 'jQuery' }, });
因此,不是无处不在的urlArgs
caching破坏,而是将其专门应用于每个可能更改的文件; 因此排除任何图书馆。
我没有testing过,但是我可能会把它整理成如下forms:
function bust(path) { return path + '?bust=' + (new Date()).getTime(); } require.config({ baseUrl: '/base/path', paths: { 'fileAlias': bust('fileLikelyToChange'), 'anotherFileAlias': bust('anotherFileLikelyToChange'), 'jQuery': 'jQuery' }, });
只要记住,如果你真的需要依赖一些外部脚本,你可以使用$ .getScript而不是require来确保它包含在内。 我有一些非第三方集成(如亚马逊支付)的amd脚本,我用getScript来代替require。 如果您可以使用此方法,则可以避免将caching清除参数从urlArgs发送到外部服务器。