RequireJS - 与define vs require的性能差异

时间:2014-01-14 19:33:19

标签: requirejs

我试图了解我使用requirejs的方式是否有任何潜在的缺点。我喜欢使用commonjs语法,典型的模块看起来像:

define(function(require) {
    "use strict";

    var Backbone = require('backbone');
    var Templates = require('templates');
    var User = require('accounts/models').User;
...

然后我将我的应用程序编译为单个JS文件。我的构建配置如下:

name: 'main',
mainConfigFile: '<%= build_dir %>/<%= main_app %>',
out: '<%= build_dir %>/app.min.js',
optimize: 'none',
include: ['main'],
insertRequire: ['main'],
almond:true,
cjsTranslate: true,
findNestedDependencies: true,
preserveLicenseComments: false

我的问题是,使用这种commonjs格式是否会产生任何性能或优化问题,如果使用define数组,我会避免这种问题?据我了解,cjsTranslate参数无论如何都将它转换为一个定义调用,但我不确定是否有遗漏的东西?它纯粹是偏好/代码可读性吗?

供参考,我的配置文件(main.js):

require.config({
    paths: {
        // Libraries
        jquery: '../../vendor/jquery/jquery',
        underscore: '../../vendor/underscore/underscore',
        backbone: '../../vendor/backbone/backbone',
        handlebars: '../../vendor/handlebars.js/dist/handlebars',
        modernizr: '../../vendor/modernizr/modernizr',

        templates: '../templates'
    },

    shim: {
        "underscore":{
            exports: "_"
        },
        "backbone": {
            deps: ["underscore", "jquery", "modernizr", "moment"],
            exports: "Backbone"
        },
        "handlebars": {
            exports: "Handlebars"
        }
    }
});

1 个答案:

答案 0 :(得分:2)

  

它纯粹是偏好/代码可读性吗?

绝对是的。一旦你建立,R.js将Commonjs转换为普通的AMD。

唯一的性能影响是使用未安装项目时。但是对于开发来说它足够快(我认为自己没有明显的区别)。