dart:js和js包之间有什么区别?

时间:2013-10-18 14:07:59

标签: dart dart-js-interop

在Dart文档中,建议使用js包进行javascript互操作。

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

这些套餐之间有什么不同吗?它们具有相同的功能吗推荐哪一个?

2 个答案:

答案 0 :(得分:9)

Js interop以package:js开头。它是使用window.postMessage构建的。

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

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

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

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

使用包完成同样的事情: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']);
}

答案 1 :(得分:1)

无论如何,我在GitHub上都收到了回复:

  

该堆栈溢出注释已过时。首选package:js-我们正在更新文档以明确推荐。它不再通过window.postMessage实施(这是基于Dartium的解决方案)-它直接在编译器中处理,并且应该比dart:js更有效率。

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