3

Dart 的性能给我留下了深刻的印象,我整理了一个非常简单的网络应用程序来渲染 Dart 中的 Mandelbrot 集(使用 HTML5 画布)。这绝不意味着作为一个现实的性能测试。该页面在最大深度为 10.000 的 800x600 画布中呈现 Mandelbrot 集。该应用程序可以在这里看到:http: //goo.gl/DLuQp

令我困惑的是:在 Dartium 中运行,图像在大约 8.5 秒内呈现(令人印象深刻)。Firefox 中的同一页面需要>15 秒。那里并不奇怪。

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

为什么呢?

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

关闭问题后更新:仅作记录:在这种特定情况下,将代码移动到并行工作器/隔离器中不仅会显着提高性能,而且 Dart 现在显然将 JS 版本抛在了后面 10 倍。

4

2 回答 2

8

可能有几个原因。从我的头顶冒出:

  • Dart VM 错过了一些优化。V8 比 Dart-VM 更老,一些优化还没有进入 Dart。
  • 您没有进行热身跑。Dart-VM 目前不做 OSR(栈上替换)。当一个函数被调用时,它将以与它开始时相同的“模式”结束。也就是说,如果一个重要的函数在非优化模式下启动,但包含一个非常重要的循环(并且运行了很长时间),那么 Dart VM 不会用优化的版本替换它。一个简单的解决方法是先执行函数(可能使用较小的值),以便优化函数。最终 OSR 将进入 Dart VM。
  • 确保您没有在检查模式下运行。Dart-VM 在未检查模式下可以更快。
于 2013-05-23T10:45:02.327 回答
5

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

于 2013-05-23T20:55:05.290 回答