【发布时间】:2013-10-27 10:03:56
【问题描述】:
在 Dart 文档中的任何地方都建议使用 js 包来实现 javascript 互操作性。
但是,我最近发现 SDK 中存在 dart:js 包,似乎具有相似(但不相同)的接口。
这些包之间有什么区别吗?它们的功能是否相同?推荐哪一个?
【问题讨论】:
标签: dart dart-js-interop
在 Dart 文档中的任何地方都建议使用 js 包来实现 javascript 互操作性。
但是,我最近发现 SDK 中存在 dart:js 包,似乎具有相似(但不相同)的接口。
这些包之间有什么区别吗?它们的功能是否相同?推荐哪一个?
【问题讨论】:
标签: dart dart-js-interop
Js 互操作以 package:js 开头。它是用window.postMessage 构建的。
后来添加了dart:js,以提供更好的性能并减小编译后的js文件的大小。基本上目标是:
一旦 dart:js 准备就绪,package:js 已被重写以在封面下使用 dart:js。
package:js 提供了一个更简单的 Api,但代价是增加了 js 的大小(因为 package:js 使用了 dart:mirrors em> 和 noSuchMethod)。
package:js 和 dart: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']);
}
【讨论】:
我已经在 GitHub 上收到了回复:
那个堆栈溢出注释已经过时了。更喜欢
package:js- 我们正在努力更新文档以明确推荐。它不再通过window.postMessage(这是一个基于 Dartium 的解决方案)实现 - 它直接在编译器中处理,应该比dart:js更有效。
来源:https://github.com/flutter/flutter/issues/35588#issuecomment-522097151
【讨论】: