2016-11-28 84 views
1

我有一个相当大的应用程序,现在约5mb用于app.js和1mb +供应商js。我认为它将跨越10MB,我们的目标用户在慢速上网,并且每个用户有不同的权利,因此大多数组件对用户不可用。如何定制ember-cli构建以排除源代码concat

我想从构建过程中排除一些大的组件,并根据需要加载它们。到目前为止,我很喜欢这个想法https://github.com/Cryrivers/ember-remote-component/blob/master/app/components/remote-component.js,它检查如果一个组件被加载,如果没有则使用AJAX

加载它们

if(!container.hasRegistration(`component:${ componentName }`)){ 
    $.when(
     $.getScript(`/remote-components/${ componentName }/component.js`), 
     $.getScript(`/remote-components/${ componentName }/template.js`) 
    ).done(()=> { 
     let container = getOwner(this); 
     container.register(`component:${ componentName }`, require(`${ ENV.modulePrefix }/components/${ componentName }`).default, {singleton: false}); 
     this.set('isLoaded', true); 
    }) 
} 

我认为这是可行的。但这里有两个问题

答:如何排除从构建过程的组成部分,并从串联停止,但也让他们在/距离/组件/ ABC/文件夹

B:在通过AJAX加载后编译模板时,将该组件的template.hbs单独编译为template.js将导致巨大的性能问题。

回答

3

这不是OP正在寻找的解决方案,但我认为这是一个更好的长期解决方案

我想偷懒加载引擎可能是一个更好的办法来解决这个问题。 https://github.com/dgeb/ember-engines

您可以阻止大多数用户加载您的应用程序的大部分。

根据项目的自述文件,主分支中提供了延迟加载的实验支持。

+0

是的,感谢它已经降落在2.10和希望在2.12 LTS版本。那个时候我会更新到引擎...谢谢 –