我正在使用 requirejs 开发一个单页主干应用程序,今天当我部署到我们的 beta 服务器时,我发现初始页面加载大约需要 20 秒,同时它会获取所有脚本。
我认为这是因为我在定义模块时使用了依赖数组,如下所示:
define([
'ui',
'models/user',
'collections/campaigns',
'collections/groups',
'collections/keywords',
'collections/inboxes',
'collections/templates',
'collections/contacts',
'router'
], function (Ui, UserDetails, Campaigns, Groups, Keywords, Inboxes, Templates, Contacts, Router) {
return {
start: function () {
// ...
// initialize and start app
// ...
}
}
});
我认为这意味着当加载主应用程序模块时,将加载所有其他脚本,因为每个模块都使用这种方法。
然后,我更改了获取模块的方法,以便在需要它们require('...')
时直接调用它们,如下所示:
define(function (require) {
return Backbone.Router(function () {
// ...
// route initializtion etc
// ...
inbox: function (routeVar) {
var InboxView = require('InboxView');
this.inboxView = new InboxView();
// render view etc
}
});
});
然而令我惊讶的是,再次运行该应用程序并检查 chromes 开发人员控制台的网络选项卡时 - 我看到应用程序正在获取我的所有模块,并且我得到了相同的页面加载时间。
我完全错过了这里的重点吗?因为我的印象是每次调用 require 时都会获取脚本。这不对吗?