11

Dart ドキュメントのどこでも、jsjavascript の相互運用性のためにパッケージを使用することをお勧めします。

しかし、最近dart:js、SDK に類似した (ただし同じではない) インターフェースを持つパッケージが存在することがわかりました。

これらのパッケージに違いはありますか? それらは同等の機能ですか?どれがおすすめ?

4

2 に答える 2

13

Js 相互運用はpackage:jsで開始されました。window.postMessageで構築されました。

その後、dart:jsが追加され、パフォーマンスが向上し、コンパイルされた js ファイルのサイズが縮小されました。基本的に目標は次のとおりです。

  • スコープの削除とライフサイクルの手動処理
  • noSuchMethod を回避して、コンパイル サイズを可能な限り小さく保つ
  • オブジェクトの名前を変更して API をより理解しやすくする

dart :jsの準備が整うと、package:jsが書き直され、dart:jsを内部で使用するようになりました。

package:jsはよりシンプルな Api を提供しますが、js サイズが大きくなります ( package:jsdart: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);
}

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']);
}
于 2013-10-18T14:35:38.163 に答える
1

GitHubでこれに関係なく、応答を受け取りました:

そのスタックオーバーフローのコメントは時代遅れです。優先package:js- 明示的に推奨するドキュメントの更新に取り組んでいます。これはもはや実装されていませんwindow.postMessage(これは Dartium ベースのソリューションでした)。コンパイラで直接処理され、より効率的であるはずですdart:js

ソース: https://github.com/flutter/flutter/issues/35588#issuecomment-522097151

于 2019-08-17T08:43:33.550 に答える