4

ボイラープレートjs​​では、モジュールがプリロードされているようです

(以下のコードを参照)

return [
            require('./baseModule/module'),
            require('./sampleModule2/module'),
            require('./customerModule/module'),
            require('./orderSearchModule/module'),
            require('./orderListModule/module'),
            require('./mainMenuModule/module')
        ];

大規模な Web アプリケーション (モジュールの重い Web アプリケーション) に関しては、これにどのような影響がありますか。ボイラープレートでモジュールを遅延ロードする方法はありますか?

4

1 に答える 1

2

Java スクリプトには、オブジェクトをロードするためのリフレクション タイプのメカニズムがありません。ロードする必要があるモジュールは、どこかに登録する必要があります。これが、モジュール (サブコンテキスト) が以下のようにロードされる理由です。

appContext.loadChildContexts(moduleContexts);

(src/application.js 内)

ただし、上記のコードはrequirejs AMDモジュールに関するものです。これは基本的に、さまざまな JS スクリプト (それぞれがモジュールのコードを表す) のインポートです。requireJS AMD を使用すると、スクリプト (ソース コード) は遅延読み込みではなく、事前に読み込まれます。アプリケーションのソース コードはブラウザで実行できる必要があるため、これは理にかなっています。一方、JS の最適化を行う場合は、すべてのソース コードを含む単一のスクリプトを作成します。そうなると、別のスクリプト ファイルを用意したり、ソース コードを遅延読み込みしたりする意味がありません。

ただし、動作には遅延読み込みを適用する必要があります (コードを読み込むためではありません)。これが、UI コンポーネント (ViewTemplate) が「activate()」メソッドでのみ作成される理由です。これらは、ユーザーが要求した場合にのみ作成されます。これは動作の遅延読み込みであるため、アプリケーションのレンダリング時間が短縮されます。

    this.activate = function(parent, params) {
        // if panel is not created, lets create it and initiate bindings
        if (!panel) {
            panel = new Boiler.ViewTemplate(parent, template, nls);
            ...
        }
        vm.initialize(params.name);
        panel.show();
    }
于 2012-10-01T17:55:59.427 に答える