【问题标题】:Code Splitting in DartDart 中的代码拆分
【发布时间】:2013-05-04 20:37:58
【问题描述】:

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

根据this link<script> 注入不起作用(“每个 HTML 页面最多可以有一个 Dart 脚本标签”、“我们不支持动态注入加载 Dart 代码的标签。”)。我还发现this fixed issue 声称:“最初的 [用例] 是延迟加载,以避免在稍后需要某些代码时或仅在某些情况下才需要时进行大量下载。我们现在有一个机制。”。不幸的是,我找不到任何关于如何实现这一点的信息。有人知道吗?

【问题讨论】:

    标签: dart


    【解决方案1】:

    2014 年 9 月更新: this has been fixed!

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

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

    这里是an official tutorial 关于使用延迟加载。


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

    this issue

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

    如果您正在使用 dart2js,则可以这样做。 Here is a blog post on how to do this.

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

    这会让你打电话给lazy.load().then((_) { ...

    【讨论】:

    • 我正在使用 dart2js。但我是否理解对了:目前只能有一个分裂点? “[...] dart2js 最多发出一个其他 JavaScript 文件”
    • 这是最近的事情,所有工作仍在进行中。对不起,我不知道。
    • 好吧,至少现在我知道要找什么了。非常感谢。
    • 正确,目前您最多可以进行一次代码拆分。见blog.sethladd.com/2013/04/lazy-load-libraries-in-dart.html
    猜你喜欢
    • 2021-06-30
    • 2023-03-12
    • 1970-01-01
    • 2020-01-10
    • 1970-01-01
    • 2023-03-23
    • 2016-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多