【发布时间】:2013-05-23 10:04:00
【问题描述】:
对 Dart 的性能印象深刻,我编写了一个非常简单的 Web 应用程序来渲染 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 倍.
【问题讨论】:
-
我只是猜测,所以这里是评论而不是答案。 Chrome 有大量优化的 JS 引擎。 Dartium 是一个开发工具——如果 Dart VM 被配置为调试而不是在这种情况下加速,我不会感到惊讶。此外,尽管基准测试显示 DartVM 比 V8 更快,但这些都是通用基准测试。某些部分(图形?)在 V8 中仍然可以得到更好的优化
-
您是否在打开“检查模式”的情况下运行 Dartium?这增加了开销,因为它在运行时断言所有类型(检查运行>设置)。
-
你在 Dartium 中也测试过 js 版本吗?
-
独立于你的问题:如果你想测量时间跨度,使用可能想要使用 Stopwatch 类而不是 DateTime。
-
查看我的更新:我在 Dartedit 中关闭了检查模式,但这可能还不够。 Dartium 中的 JS 版本与 Chrome 中的性能大致相同。我切换到秒表课,谢谢你的提示!同样的时间,但 Stopwatch 类允许我轻松排除像素的绘制。没有这些,Dart 和 JS 之间的执行时间非常相似。 JS 版本还是要快一些。 :) 非常感谢你们所有的 cmets!