3

我正在使用 requirejs 来构建我的 Backbone 项目。一切正常,我可以使用优化器将所有 js 模块和模板编译成一个 main.js 文件。问题是 main.js 大约是 1.5 兆。在工作中,这很好,因为我们的互联网连接很快,但我注意到在连接速度较慢的情况下,require.js 在 main.js 能够加载之前超时。

有什么办法不会让我改变 waitSeconds 超时?

例如,有没有办法将 main.js 文件分成多个部分,或者强制要求等到加载 main.js 时产生错误?

4

1 回答 1

4

我认为您不需要所有 1.5mb 来向用户展示初始应用程序。因此,您可以在代码中要求某些带有条件的部分。所以而不是:

define(['module1','module2','module3','module4'], function(m1, m2, m3, m4){
   if(m1.someCondition){
    m2.start()
  }else{
    m3.start()  
  }
})

您可以使用以下方式加载应用程序的某些部分require

define(['module1'], function(m1){
  m1.start();
  if(m1.someCondition){
    var name = 'module2'
    m2 = require(name)
    m2.start()
  }else{
    var name = 'module3'
    m3 = require(name)  
    m3.start()  
  }
})

请注意,只有当传递的名称不是字符串时,优化器才会忽略模块

从文档:

优化器只会组合在传递给顶层 require 和 define 调用的字符串文字数组中指定的模块,或者在简化的 CommonJS 包装中组合 require('name') 字符串文字调用。因此,它不会找到通过变量名加载的模块:

var mods = someCondition ? ['a', 'b'] : ['c', 'd'];
> require(mods);
于 2012-09-13T09:13:15.120 回答