使用RequireJScaching特定模块

这个问题已经被问了好几次,但并不特定于这个例子。

这里是我们的应用程序的概述:

  • 使用Express on Node进行简单的服务器路由
  • 单页面主干应用程序
  • 核心模块和库(JS / CSS)不变
  • Widget JS / LESS / HTML文件经常改变

在开发过程中,我正在寻找caching的文件,但不是这些核心库,以加快我的页面重新加载,并加快我的发展。

我find了解释:

  1. 在RequireJScaching破坏 – 在这里
  2. caching清除特定模块的说明 – 这里

可以解决scheme:

  1. 解释一下requireJScaching是如何工作的?
  2. 为此特定场景提供解决scheme。

caching清除通过在每个需要的文件末尾附加一个始终唯一的查询string来工作。 它使用了RequireJS的urlArgsconfiguration值; 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' }, }); 

因此,不是无处不在的urlArgscaching破坏,而是将其专门应用于每个可能更改的文件; 因此排除任何图书馆。

我没有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发送到外部服务器。