使用systemjs动态加载,如何不一次加载所有文件?

时间:2016-09-17 22:31:18

标签: javascript typescript systemjs

app.js个文件有import {Route} from "./router"。路由器 - 一个取决于页面当前url的类,将创建此页面处理程序的实例。例如,对于页面/home/accountPage - 路由器将以这种方式创建处理程序:return new AccountPageHandler(params)。事实证明,在路由器中导入了所有页面的所有处理程序(以及它们)。当我System.import ( 'js/app.js')时,我将加载所有脚本,包括和不必要的 - 因为它们被导入到路由器中,并且路由器在app.js中导入。

我该如何制作,不会一次导入所有内容,只有我想要使用的内容?我确信很多开发人员已经提前解决了这个问题,但是如何解决这个问题 - 我不知道,因为我第一次遇到这个问题。

P.S。

我的javascript是从打字稿中生成的(如果突然这会影响解决问题的选项)。

1 个答案:

答案 0 :(得分:1)

在没有实际代码的情况下,我的猜测是SystemJS导入了所有脚本,因为你import所有页面的所有处理程序。您可以做什么(如果您的路由器支持承诺和页面处理程序的异步加载)。是使用System.import('specific_page_handler.js')仅导入当前所需的页面处理程序。

但是根据你的应用程序的大小,以及你可以延迟加载的单独块的大小,只需创建一个缩小的包,设置一个长的缓存过期,并立即加载所有可以很好。增加的复杂性可能会带来微小的收益。