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

Sam*_*pak 11 dart dart-js-interop

在Dart文档中的任何地方,建议使用js包进行javascript互操作.

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

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

Ale*_*uin 11

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

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

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

一旦dart:js已经准备好,包:js已被重写为使用dart:js封面.

package:js提供了一个更简单的Api,它的代价是增加了js的大小(因为package:js使用了dart:mirrorsnoSuchMethod).

以下是使用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);
}
Run Code Online (Sandbox Code Playgroud)
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']);
}
Run Code Online (Sandbox Code Playgroud)