Dart中的代码拆分

Mar*_*ioP 6 dart

有没有办法在Dart中进行某种代码分割?我想推迟加载一些很少使用的代码来加速初始代码下载.在Javascript中,我会<script>在GWT 注入一个新标签,我只是打电话GWT.runAsync().Dart有类似的东西吗?

根据此链接,<script>注入将不起作用("每个HTML页面最多只能有一个Dart脚本标记","我们不支持动态注入加载Dart代码的标记.").我还发现这个固定的问题声称:"最初的一个[用例]是延迟加载,以避免在稍后需要某些代码时进行大量下载,或者可能仅在某些情况下需要.我们现在有了这种机制." 不幸的是,我找不到任何关于如何实现这一点的内容.有人对这个有了解吗?

Ben*_*aum 7

2014年9月更新: 此问题已修复!

Dart现在可以使用特殊import... deferred语法轻松支持延迟加载.例如:

import analytics.dart deferred as analytics
void main(){
    analytics.loadLibrary.then((_) { // future
        // code ready
        enableAnalyticsControl()
    });
}
Run Code Online (Sandbox Code Playgroud)

这是关于使用延迟加载的官方教程.


我担心你想做的事情仍然不可能(假设你没有使用dart2js).

看到这个问题.

正如Kasper在评论3中所说的,到目前为止,已经讨论了一个部署功能,您将使用dart2dart获得.虚拟机参与支持这一点,最终通过库调用使dart2dart生成的代码可以懒惰地访问加载源.但是仍然需要指定此库API.

如果您正在使用dart2js可以做到这一点.这是一篇关于如何做到这一点的博客文章.

const lazy = const DeferredLibrary('reverser', uri: './part.js');
Run Code Online (Sandbox Code Playgroud)

哪个会让你打电话 lazy.load().then((_) { ...

  • 正确,目前你最多可以进行一次代码拆分.请参见http://blog.sethladd.com/2013/04/lazy-load-libraries-in-dart.html (3认同)