Ste*_*eve 3 javascript caching requirejs
我有一个淘汰赛/需要的应用程序,并且正在为一个特定文件进行缓存。不幸的是,该文件破坏了所有其他javascript文件的缓存。设置可能有点奇怪:
每个视图仅绑定一个淘汰赛视图模型。它需要系统特定区域的require库和主脚本:
<script data-main="scripts/user" src="~/Scripts/lib/require.js"></script>
Run Code Online (Sandbox Code Playgroud)
上面需要的scripts / user.js文件需要公用文件(包含require设置)和主viewmodel脚本:
require(['./Common'], function (common) {
require(['userMain']);
})
Run Code Online (Sandbox Code Playgroud)
scripts / user / userMain.js文件绑定视图模型,并且需要视图级别所需的任何内容(例如自定义绑定处理程序)。
define(function (require) {
require(['ko', 'userViewModel'], function (ko, userViewModel) {
var userVm = new userViewModel(false);
userVm.initialise();
// bound to the wrapper to stop jquery dialog bindings being applied twice
ko.applyBindings(userVm, document.getElementById('pageWrapper'));
});
});
Run Code Online (Sandbox Code Playgroud)
然后我们有了common.js:
require.config({
baseUrl: './',
paths: {
'userMain': './Scripts/user/Main',
'userAjax': './Scripts/user/userAjax',
'userBasicDetails': './Scripts/user/userBasicDetails',
'userExchangesModel': './Scripts/user/userExchangesModel',
'userModel': './Scripts/user/userModel',
'userReportAccessModel': './Scripts/user/userReportAccessModel',
'usersModel': './Scripts/user/usersModel',
'userViewModel': './scripts/user/userViewModel',
... etc
,
urlArgs: "bust=" + (new Date()).getTime()
Run Code Online (Sandbox Code Playgroud)
然后,文件夹中的每个脚本都需要在其自身模型中需要的任何内容。
然后按以下方式设置脚本结构:
scripts\common.js
scripts\user.js
scripts\user\main.js
scripts\user\userAjax
scripts\user\etc...
Run Code Online (Sandbox Code Playgroud)
此设置使我可以引用其他文件夹中的脚本,而无需指定文件在common.js之外的任何位置。缺点是所有js文件都有共同的参考,但我可以接受。例如,有4个或5个文件夹与“用户”(“脚本\报告\”,“脚本\客户端”等)处于同一级别,如果我想从这些文件夹中的任何脚本创建用户模型,可以简单地“定义(['userModel'],函数(userModel)”),并且common会告诉要求去哪里找到该文件。此系统运行良好,允许我随意移动文件,只在一个位置更改路径。
当我在common.js中添加新脚本或更改路径时,就会出现问题。尽管所有其他请求都因公共设置而崩溃,但由于公共文件本身已被缓存,因此我必须先破坏用户的chrome缓存,然后才能提取新的common.js文件。这显然是交付时的一个大问题-页面失败,因为它们无法找到新脚本,因为该脚本不存在于同一文件夹中,并且已缓存了通用脚本。
谁能建议一种自动破坏common.js或将路径配置移到单独的必需文件中的方法,以便urlArgs破产为我做这件事?
非常感谢。
在script加载RequireJS 的元素之前,添加以下代码:
<script>
require = {
urlArgs: "bust=" + (new Date()).getTime()
};
</script>
Run Code Online (Sandbox Code Playgroud)
RequireJS将以此作为其初始配置,并通过参数或其他方式加载它所加载的任何模块。data-mainbust
最好将其urlArgs从以后的调用中删除require.config。它将覆盖先前的选项,因此的值bust将更改。通常情况下,模块被加载一次,并且只有一次RequireJS所以它应该不会发生,同样的模块由同一个页面加载了两个不同的bust值。但是有些情况我不确定(例如,require.undef用于取消定义模块)。删除后者urlArgs可以避免意外情况。
| 归档时间: |
|
| 查看次数: |
1387 次 |
| 最近记录: |