r.js:了解requirejs的r.js优化器

时间:2013-12-09 11:34:59

标签: requirejs r.js

我试图弄清楚使用require.js中的r.js来生成我的javascript文件中的build.js文件以仅在生产时加载一个文件是一个好主意。 但我想知道在我的情况下这是否是一个好主意,因为它似乎只是将大量内存加载到DOM中。也许我弄错了。

查看我使用require.js实现的一个基于骨干的视图。据我所知,r.js将获取此文件并进行优化并将其放入最终的build.js文件中,并以相同的方式定义所有其他视图,模型和集合。

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

  var $                   = require('jquery'),
      _                   = require('underscore'),
      Backbone            = require('backbone'),
      tpl                 = require('text!tpl/start.html'),
      Mustache            = require('mustache'),
      template            = Mustache.compile(tpl);

  return Backbone.View.extend({
    initialize: function () {
    },

    render: function () {
      this.$el.html(template());
      return this;
    },

    events: {
      'click #submit': "start"
    },

    start: function (event) {
       // stuff to do ...
    }
  });
});

我猜最终的build.js会简单地将我的代码放在上面,然后将它们连接进去,对吧? 所以这意味着当我更新我的index.html loading require.js然后我的build.js文件时,它只会将所有视图,模型和集合加载到DOM中。不会占用太多内存,因为我不需要从头开始加载所有东西。 当它已经通过build.js文件加载时调用require('path / to / my / view')是否有意义?

1 个答案:

答案 0 :(得分:2)

对于您的应用程序来说,将所有模块优化为单个文件可能没有意义。 r.js支持这种情况。您需要做的是使用modules选项并根据需要定义任意数量的输出文件。对此的一般说明可能是:

modules: [
    {
        name: 'main', 
        exclude: [ "viewA", "viewB" ],
    },
    {
        name: 'viewA',
        exclude: ['core']
    },
    {
        name: 'viewB',
        exclude: ['core']
    }
]

上面的设置假定要优化的源具有名为mainviewAviewB的模块。它将创建3个优化捆绑包:core,其中包含将在任何情况下 加载的所有核心模块,viewA表示在情况下要加载的一组模块,因此等等,viewB表示在其他情况下要加载的一组模块。

如何设置modules参数取决于应用程序的具体情况。