使用systemjs动态加载,如何不一次加载所有文件?
Dynamic loading using systemjs, how to not load all files at once?
有一个主 app.js
文件,其中包含 import {Route} from "./router"
。路由器 - 一个 class 取决于页面的当前 url
,将创建此页面处理程序的实例。例如,对于页面 /home/accountPage
- 路由器将以这种方式创建处理程序:return new AccountPageHandler(params)
。事实证明,在路由器中导入了所有页面的所有处理程序(以及它们这么多)。当我执行 System.import ( 'js/app.js')
时,我将加载所有脚本,包括和不必要的 - 因为它们被导入到路由器中,并且路由器在 app.js.
中导入
我怎样才能做到不一次导入所有内容,而只导入我想使用的内容?我确信这个问题对于许多开发人员来说已经很早就出现了,但是如何解决它 - 我不知道,因为我第一次遇到这个问题。
P.S.
我的javascript是从打字稿生成的(如果突然这影响了解决问题的选项)。
在没有看到实际代码的情况下,我的猜测是 SystemJS 导入了您的所有脚本,因为您 import
所有页面的所有处理程序。您可以做什么(如果您的路由器支持页面处理程序的承诺和异步加载)。是使用 System.import('specific_page_handler.js')
只导入现在需要的页面处理程序。
但取决于您的应用程序的大小,以及您可以延迟加载的单独块的大小,只需创建一个缩小的包、设置较长的缓存过期时间并一次加载所有内容就可以了。增加复杂性可能带来小收益。
有一个主 app.js
文件,其中包含 import {Route} from "./router"
。路由器 - 一个 class 取决于页面的当前 url
,将创建此页面处理程序的实例。例如,对于页面 /home/accountPage
- 路由器将以这种方式创建处理程序:return new AccountPageHandler(params)
。事实证明,在路由器中导入了所有页面的所有处理程序(以及它们这么多)。当我执行 System.import ( 'js/app.js')
时,我将加载所有脚本,包括和不必要的 - 因为它们被导入到路由器中,并且路由器在 app.js.
我怎样才能做到不一次导入所有内容,而只导入我想使用的内容?我确信这个问题对于许多开发人员来说已经很早就出现了,但是如何解决它 - 我不知道,因为我第一次遇到这个问题。
P.S.
我的javascript是从打字稿生成的(如果突然这影响了解决问题的选项)。
在没有看到实际代码的情况下,我的猜测是 SystemJS 导入了您的所有脚本,因为您 import
所有页面的所有处理程序。您可以做什么(如果您的路由器支持页面处理程序的承诺和异步加载)。是使用 System.import('specific_page_handler.js')
只导入现在需要的页面处理程序。
但取决于您的应用程序的大小,以及您可以延迟加载的单独块的大小,只需创建一个缩小的包、设置较长的缓存过期时间并一次加载所有内容就可以了。增加复杂性可能带来小收益。