考虑以下requirejs config:
requirejs.config({
waitSeconds: 10,
baseUrl: 'js/libs',
paths: {
'jQuery' : 'jquery',
'jQueryUi' : 'jquery.ui',
'cookie' : 'jquery.cookie',
'underscore' : 'underscore',
'backbone' : 'backbone',
'text' : 'text',
'reusable' : '../../tmpl/reusable.tmpl.html'
},
shim: {
'jQuery':{
exports: '$'
},
'cookie':['jQuery'],
'jQueryUi':['jQuery'],
'underscore': {
exports: '_'
},
'backbone':{
deps: ['underscore'],
exports: 'Backbone'
}
}
});
require(['cookie','jQueryUi'],function(){
require(['backbone'],function(){
this._templates = {};
require(['text!reusable'],function(reusable){
this._templates['reusable'] = reusable;
});
});
});
到目前为止,一切都按预期工作......
some_module.js的内容:
define(function(){
var init = function(){
console.log('some_module initialized');
};
return{
init:init
};
});
基于Backbone路由器导航功能,在某一点上需要some_module
,如下所示:
require(['some_module'],function(module){
module.init();
});
在路线改变时,类似的模块被称为相同的方式。
导航时,用户可以返回上一个路线,这意味着再次请求some_module
,这次是cache
,因为some_module.js
在第一次通话时存储了some_module
。 / p>
问题:
由于var some_module = require('some_module');
可以被请求一次或多次,所以每次加载模块都是一个好习惯,即使文件被缓存了吗?...或者最初在全局范围内设置它: / p>
some_module.init()
每次需要模块时,只需致电:
{{1}}
或者它可能返回的任何财产?
内存泄漏和一般应用程序功能有什么区别?
答案 0 :(得分:1)
一般规则是,您通过RequireJS加载的所有内容都加载一次。
第一次需要模块时(由于require
或define
将模块作为依赖项),它实际上将从网络中获取,然后将执行其工厂函数。 (工厂是您为define
提供的功能。)工厂函数的结果由RequireJS缓存。
当需要模块再次时,模块将从RequireJS缓存返回,而不使用浏览器的文件缓存或进入网络。