В чем разница между пакетом dart:js и js?

Везде в документации Dart рекомендуется использовать пакет js для совместимости с javascript.

Однако недавно я обнаружил, что в SDK существует пакет dart:js, который имеет похожий (но не такой же) интерфейс.

Есть ли отличия между этими пакетами? Являются ли они эквивалентными? Какой из них рекомендуется?


person Samuel Hapak    schedule 18.10.2013    source источник


Ответы (2)


Взаимодействие Js началось с package:js. Он был создан с использованием window.postMessage.

Позже был добавлен dart:js для повышения производительности и снижения размер скомпилированного файла js. В основном цели были:

  • удаление областей действия и ручная обработка жизненного цикла
  • избегая noSuchMethod, чтобы размер компиляции был как можно меньше
  • переименование объектов, чтобы сделать API более понятным

После того, как dart:js был готов, package:js был переписан для скрытого использования dart:js.

package:js предоставляет более простой API за счет увеличения размера js (поскольку package:js использует dart:mirrors и 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']);
}
person Alexandre Ardhuin    schedule 18.10.2013

Я получил ответ независимо от этого на GitHub:

Этот комментарий о переполнении стека устарел. Предпочитаю package:js — мы работаем над обновлением документов, чтобы явно рекомендовать это. Он больше не реализован поверх window.postMessage (это было решение на основе Dartium) — он обрабатывается непосредственно в компиляторах и должен быть более эффективным, чем dart:js.

Источник: https://github.com/flutter/flutter/issues/35588#issuecomment-522097151

person Dima Rostopira    schedule 17.08.2019