4

在boilerplatejs中,看起来模块是预加载的

(参考下面的代码)

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

当涉及到大型 Web 应用程序(模块重的 Web 应用程序)时,对此有何影响。有没有办法在boilerplatejs中延迟加载模块?

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 回答