代码之家  ›  专栏  ›  技术社区  ›  Samuel Hapak

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

  •  11
  • Samuel Hapak  · 技术社区  · 12 年前

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

    然而,我最近发现 dart:js SDK中存在一个似乎有相似(但不相同)接口的包。

    这些包裹之间有什么区别吗?它们的功能等效吗?推荐哪一种?

    2 回复  |  直到 12 年前
        1
  •  14
  •   Alexandre Ardhuin    12 年前

    Js互操作开始于 package:js 。它是用建造的 window.postMessage .

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

    • 删除作用域和生命周期手动处理
    • 避免使用noSuchMethod以保持编译大小尽可能小
    • 重命名对象以使api更易于理解

    一旦 省道:js 已经准备好了, 包:js 已重写为使用 省道:js 在盖子下面。

    包:js 提供了一个更简单的Api,它以增加js大小为代价(因为 包:js 使用 省道:镜子 noSuch方法 ).

    这是同样的事情 包:js 省道: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']);
    }
    
        2
  •  2
  •   Dmytro Rostopira    6 年前

    不管怎样,我在GitHub上都收到了回复:

    那个堆栈溢出注释已经过时了。更喜欢 package:js -我们正在更新文档,以明确建议这样做。它不再在 window.postMessage (这是一个基于Dartium的解决方案)-它在编译器中直接处理,应该比 dart:js .

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