Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is a difference between dart:js and js package?

Everywhere in Dart documentation it is recommended to use js package for javascript interoperability.

However, I have recently found that dart:js package exists in SDK that seems to have similar (but not same) interface.

Are there any differences between these packages? Are they feature equivalent? Which one is recommended?

like image 998
Samuel Hapak Avatar asked Oct 18 '13 14:10

Samuel Hapak


1 Answers

Js interop started with package:js. It was built with with window.postMessage.

Later dart:js has been added to provide better performance and reduce the size of the compiled js file. Basically the goal were :

  • removing scopes and lifecycle manual handling
  • avoiding noSuchMethod to keep compilation size as low as possible
  • renaming objects to make the api more understandable

Once dart:js has been ready, package:js has been rewrite to use dart:js under the cover.

package:js provides a simpler Api that comes at the cost of an increase of the js size (because package:js uses dart:mirrors and noSuchMethod).

Here is the same thing done with package:js and 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']);
}
like image 51
Alexandre Ardhuin Avatar answered Sep 29 '22 04:09

Alexandre Ardhuin