编译为JS的Dart代码似乎比Dart快(在Dartium中)

时间:2013-05-23 10:04:00

标签: dart dartium

Dart的表现令我印象深刻,我整理了一个非常简单的网络应用程序来渲染Dart中的Mandelbrot(使用HTML5画布)。这绝不是一个真实的性能测试。该页面将Mandelbrot设置为800x600画布,最大深度为10.000。 该应用可在此处查看:http://goo.gl/DLuQp

让我感到困惑的是:在Dartium中运行时,图像渲染时间约为8.5秒(令人印象深刻)。 Firefox中的同一页面需要> 15秒。这并不奇怪。

但是在Chrome中运行相同的页面(版本27.0.1453.93),它不运行Dart但JS版本也在6.7秒内完成,比Dart快?

为什么会这样?

更新: 我添加了一个“运行”按钮来重新渲染画布(以验证预热行为)。另外我添加了一个只有JS的版本(当然是相同的代码)来检查Dartium中的JS。简而言之:数字和我的问题仍然存在。热身似乎没有效果。 Dartium中的JS版本比Dart版本更快。

关闭问题后的更新:仅供记录:在这个特定情况下,将代码移动到并行工作者/隔离区不仅导致显着的性能提升,而且Dart现在明显地将JS版本置于尘埃落后的因素10

2 个答案:

答案 0 :(得分:8)

可能有几个原因。脱颖而出:

  • Dart VM错过了一些优化。 V8比Dart-VM老得多,一些优化还没有进入Dart。
  • 您没有进行预热运行。 Dart-VM目前不执行OSR(堆栈替换)。调用函数时,它将以启动它的相同“模式”结束。也就是说,如果一个重要的函数在非优化模式下启动,但包含一个非常重要的循环(并且运行很长时间),那么Dart VM将不会用优化版本替换它。一个简单的解决方法是首先执行函数(可能具有较小的值),以便优化函数。最终OSR将进入Dart VM。
  • 确保您未在​​检查模式下运行。在未选中模式下,Dart-VM可以快得多。

答案 1 :(得分:5)

这是canvas绑定和API的已知问题。见http://dartbug.com/10344