私は、requirejs を使用して単一ページのバックボーン アプリを開発しています。今日、ベータ サーバーにデプロイしたところ、すべてのスクリプトを取得する際の最初のページの読み込みが約 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
}
});
});
しかし、驚いたことに、アプリを再度実行して chrome 開発者コンソールのネットワーク タブを確認すると、アプリケーションがすべてのモジュールをフェッチする前と同じように、ページの読み込み時間が同じであることがわかりました。
ここでポイントを完全に見逃していますか?require を呼び出すたびにスクリプトがフェッチされるという印象を受けました。そうではありませんか?