什么是需要模块的正确方法

时间:2014-11-03 10:48:23

标签: backbone.js requirejs

考虑以下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}}

或者它可能返回的任何财产?

内存泄漏和一般应用程序功能有什么区别?

1 个答案:

答案 0 :(得分:1)

一般规则是,您通过RequireJS加载的所有内容都加载一次

第一次需要模块时(由于requiredefine将模块作为依赖项),它实际上将从网络中获取,然后将执行其工厂函数。 (工厂是您为define提供的功能。)工厂函数的结果由RequireJS缓存。

当需要模块再次时,模块将从RequireJS缓存返回,而不使用浏览器的文件缓存或进入网络。