【问题标题】:Cache busting specific modules with RequireJS使用 RequireJS 缓存破坏特定模块
【发布时间】:2013-05-07 14:05:58
【问题描述】:

这个问题已经被问过好几次了,但不是针对这个例子。

以下是我们应用程序的概述:

  • 使用 Express on Node 实现简单的服务器路由
  • 单页主干应用
  • 不会改变的核心模块和库 (JS/CSS)
  • 频繁更改的小部件 JS/LESS/HTML 文件

在开发过程中,我希望缓存发生变化的 bust 文件,而不是那些核心库,以加快我的页面重新加载并加快我的开发。

我在以下方面找到了解释:

  1. RequireJS 上的缓存破坏 - here
  2. 关于缓存清除特定模块的说明 - here

解决办法:

  1. 解释 requireJS 缓存破坏的工作原理?
  2. 为此特定场景提供解决方案。

【问题讨论】:

    标签: javascript node.js caching requirejs browser-cache


    【解决方案1】:

    缓存清除通过将始终唯一的查询字符串附加到所需的每个文件的末尾来工作。它利用了 RequireJS 的 urlArgs 配置值; RequireJS 会为你添加它:

    urlArgs: "bust=" + (new Date()).getTime()
    

    (new Date()).getTime() 部分只是从 JavaScript 中获取唯一字符串的简单方法。您可以对Math.random() 做一些变化,但使用number of milliseconds since the epoch 可以保证唯一性,以实现最佳缓存缓冲。

    我认为伯克先生的建议是:

    require.config({
        baseUrl: '/base/path',
        paths: {
            'fileAlias': 'fileLikelyToChange?bust=' + (new Date()).getTime(),
            'anotherFileAlias': 'anotherFileLikelyToChange?bust=' + (new Date()).getTime(),
            'jQuery': 'jQuery'
        },
    });
    

    因此,您可以将其专门应用于每个可能会更改的文件,而不是无处不在的urlArgs cache-busting;因此,排除任何库。

    我还没有测试过,但我可能会将其整理为:

    function bust(path) {
        return path + '?bust=' + (new Date()).getTime();
    }
    
    require.config({
        baseUrl: '/base/path',
        paths: {
            'fileAlias': bust('fileLikelyToChange'),
            'anotherFileAlias': bust('anotherFileLikelyToChange'),
            'jQuery': 'jQuery'
        },
    });
    

    【讨论】:

    • 谢谢 - 我的应用程序中包含但在 require.config - 路径对象中未引用的文件呢?
    • 对于这种情况,我认为没有简单的解决方案。我只是在描述我认为在 GitHub 问题中提出的建议。我不认为你真的有任何其他选择,除了修改 RequireJS 的源代码或进行精心设计的 hack。
    【解决方案2】:

    请记住,如果您确实需要依赖某些外部脚本,您可以使用 $.getScript 而不是 require 来确保包含它。我有一些用于 3rd 方集成的非 amd 脚本(例如亚马逊支付),我使用 getScript 而不是 require。如果你可以使用这种方法,它将避免将缓存清除参数从 urlArgs 发送到外部服务器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多