8

有什么方法可以在 Dart 中进行某种代码拆分?我想推迟一些很少使用的代码的加载,以加速初始代码下载。在 Javascript 中,我会注入一个新<script>标签,在 GWT 中我只需调用GWT.runAsync(). Dart中是否有类似的东西?

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

4

1 回答 1

7

2014 年 9 月更新: 已修复!

import... deferredDart 现在很容易支持使用特殊语法的延迟加载。例如:

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

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


恐怕您尝试做的事情仍然不可能(假设您没有使用 dart2js)。

看到这个问题

正如 Kasper 在评论 3 中所说,到目前为止,已经讨论了一个部署功能,您将使用 dart2dart 获得。参与支持这一点的 VM 最终通过库调用让 dart2dart 生成的代码访问延迟加载源。不过,这个库 API 仍然需要指定。

如果您使用的是dart2js,则可以这样做。这是一篇关于如何做到这一点的博客文章。

const lazy = const DeferredLibrary('reverser', uri: './part.js');

然后让你打电话 lazy.load().then((_) { ...

于 2013-05-04T20:46:58.863 回答