【问题标题】:What is a difference between dart:js and js package?dart:js 和 js 包有什么区别?
【发布时间】:2013-10-27 10:03:56
【问题描述】:

在 Dart 文档中的任何地方都建议使用 js 包来实现 javascript 互操作性。

但是,我最近发现 SDK 中存在 dart:js 包,似乎具有相似(但不相同)的接口。

这些包之间有什么区别吗?它们的功能是否相同?推荐哪一个?

【问题讨论】:

    标签: dart dart-js-interop


    【解决方案1】:

    Js 互操作以 package:js 开头。它是用window.postMessage 构建的。

    后来添加了dart:js,以提供更好的性能并减小编译后的js文件的大小。基本上目标是:

    • 删除范围和生命周期手动处理
    • 避免使用 noSuchMethod 以保持编译大小尽可能小
    • 重命名对象以使 api 更易于理解

    一旦 dart:js 准备就绪,package:js 已被重写以在封面下使用 dart:js

    package:js 提供了一个更简单的 Api,但代价是增加了 js 的大小(因为 package:js 使用了 dart:mirrors em> 和 noSuchMethod)。

    package:jsdart:js 也是一样的:

    import 'package:js/js.dart' as js;
    
    main() {
      var pixi = new js.Proxy(js.context.PIXI.Stage, 0xffffff);
      var renderer = js.context.PIXI.autoDetectRenderer(400, 400);
      document.body.append(renderer.view);
    }
    

    import 'dart:js' as js;
    
    main() {
      var pixi = new js.JsObject(js.context['PIXI']['Stage'], [0xffffff]);
      var renderer = js.context['PIXI'].callMethod('autoDetectRenderer', [400, 400]);
      document.body.append(renderer['view']);
    }
    

    【讨论】:

      【解决方案2】:

      我已经在 GitHub 上收到了回复:

      那个堆栈溢出注释已经过时了。更喜欢package:js - 我们正在努力更新文档以明确推荐。它不再通过 window.postMessage(这是一个基于 Dartium 的解决方案)实现 - 它直接在编译器中处理,应该比 dart:js 更有效。

      来源:https://github.com/flutter/flutter/issues/35588#issuecomment-522097151

      【讨论】:

        猜你喜欢
        • 2012-12-07
        • 2013-09-18
        • 2016-04-20
        • 2015-04-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-07-08
        • 2017-12-05
        相关资源
        最近更新 更多