【问题标题】:Lazy loading boilerplate modules延迟加载样板模块
【发布时间】:2012-10-01 15:31:04
【问题描述】:

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

(参考下面的代码)

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

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

【问题讨论】:

    标签: boilerplatejs


    【解决方案1】:

    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();
        }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-22
    • 2017-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多