我正在使用requirejs来构建我的Backbone项目。它运行良好,我可以使用优化器将所有js模块和模板编译成一个main.js文件。问题是main.js大约是1.5兆。在工作中,这很好,因为我们的互联网连接速度很快,但我注意到有一些较慢的连接,在main.js能够加载之前,require.js超时。
有没有办法让我改变waitSeconds超时?
例如,有没有办法将main.js文件拆分成多个部分,或者强制require等到加载main.js时出现错误?
答案 0 :(得分: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('name')字符串文字调用的简化 CommonJS包装。因此,它不会找到通过a加载的模块 变量名称:
var mods = someCondition ? ['a', 'b'] : ['c', 'd'];
> require(mods);