我正在使用 requirejs 来构建我的 Backbone 项目。一切正常,我可以使用优化器将所有 js 模块和模板编译成一个 main.js 文件。问题是 main.js 大约是 1.5 兆。在工作中,这很好,因为我们的互联网连接很快,但我注意到在连接速度较慢的情况下,require.js 在 main.js 能够加载之前超时。
有什么办法不会让我改变 waitSeconds 超时?
例如,有没有办法将 main.js 文件分成多个部分,或者强制要求等到加载 main.js 时产生错误?
我正在使用 requirejs 来构建我的 Backbone 项目。一切正常,我可以使用优化器将所有 js 模块和模板编译成一个 main.js 文件。问题是 main.js 大约是 1.5 兆。在工作中,这很好,因为我们的互联网连接很快,但我注意到在连接速度较慢的情况下,require.js 在 main.js 能够加载之前超时。
有什么办法不会让我改变 waitSeconds 超时?
例如,有没有办法将 main.js 文件分成多个部分,或者强制要求等到加载 main.js 时产生错误?
我认为您不需要所有 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);