13

I'm trying to better understand dart's effect on performance. On the dart website, their benchmarks show that Dart code compiled to Javascript is faster than just Javascript. How is this possible?

Tracer Benchmarks

I understand how the Dart VM is faster than v8, but what I don't get is how dart2js-generated javascript is faster than plain old javascript, when both are running in the same environment, v8.

4

4 回答 4

19

dart2js 能够执行通常不会在 JavaScript 代码中手动添加的优化。

在这种情况下,作为源语言的 Dart 并没有什么特别之处:任何生成 JavaScript 的自动化工具都应该能够做到这一点,例如 GWT 编译器(Java 到 JavaScript)也能做到这一点。当然,您也可以在 JavaScript 源代码上运行自动化工具来生成更好的 JavaScript,这就是Closure 编译器所做的。

从技术上讲,如果您知道所有技巧,您可以使用手写 JavaScript 手动实现相同的速度。

于 2014-01-05T03:48:30.167 回答
6

一个例子是函数内联。如果您需要重复调​​用的代码片段,您可以在函数/方法中重构它。Dart2js 经常做相反的事情。方法调用通常被调用的函数/方法包含的代码片段替换,这称为内联。如果您手动执行此操作,这将导致无法维护的代码。

我认为许多优化都是朝着这个方向发展的。以这种方式编写代码将是不可读的,因此无法维护。这并不意味着它是草率的。

于 2014-01-05T08:54:41.270 回答
4

dart 团队的 Vyacheslav Egorov 做了一个很棒的演讲,他详细解释了一些优化,包括衬里..

http://www.infoq.com/presentations/dart-compiler

总结Vyacheslav Egorov 详细介绍了 Dart 的一些语言特性如何影响新的 JIT Dart 编译器的设计,以及 V8 JavaScript 引擎如何影响整体设计。

于 2014-01-06T14:05:58.607 回答
3

Seth Ladd 和 Kasper Lund有一个有趣的视频。Kasper 参与了 Dart2js 编译器的创建,并提供了一些关于编译器如何优化 Javascript 代码的代码示例。

于 2014-01-05T18:37:23.057 回答