我正在努力更好地了解飞镖对性能的影响。在dart website上,他们的基准测试显示编译为Javascript的Dart代码比Javascript更快。这怎么可能?
我理解Dart VM如何比v8更快,但我不知道的是dart2js生成的javascript如何比普通的旧javascript更快,当两者都在相同的环境中运行时,v8。
答案 0 :(得分:18)
dart2js能够执行通常不会在JavaScript代码中手动添加的优化。
在这种情况下,Dart作为源语言没有什么特别之处:任何生成JavaScript的自动化工具都应该能够做到这一点,例如GWT编译器(Java to JavaScript)也可以这样做。当然,您可以在JavaScript源代码上运行自动化工具来生成更好的JavaScript,这就是Closure compiler所做的。
从技术上讲,如果您了解所有技巧,可以使用手写JavaScript手动达到相同的速度。
答案 1 :(得分:6)
一个例子是函数内联。如果需要重复调用的代码片段,则可以在函数/方法中重构它。 Dart2js经常做相反的事情。方法调用通常被称为内联的被调用函数/方法所包含的代码片段替换。如果你手动执行此操作,将导致无法维护的代码。
我认为许多优化都朝这个方向发展。 以这种方式编写代码是不可读的,因而无法维护。 这并不意味着它很草率。
答案 2 :(得分:4)
来自飞镖队的维亚切斯拉夫·叶戈罗夫(Vyacheslav Egorov)进行了精彩的演讲,他详细解释了一些优化措施,包括衬里......
http://www.infoq.com/presentations/dart-compiler
摘要 Vyacheslav Egorov详细介绍了Dart的某些语言功能如何影响新JIT Dart编译器的设计以及V8的设计 JavaScript引擎影响了整体设计。
答案 3 :(得分:3)
Seth Ladd和Kasper Lund有一个interesting video。 Kasper参与创建Dart2js编译器,并提供了一些关于编译器如何优化Javascript代码的代码示例。