编译成JS的Dart代码似乎比Dart(在Dartium中)更快
Dart的性能给我留下了深刻的印象,我制作了一个非常简单的web应用程序来渲染Dart中的Mandelbrot集(使用HTML5画布)。这绝对不是一个现实的性能测试。该页面在800x600画布中呈现Mandelbrot集,最大深度为10.000。 可以在此处看到该应用程序: 让我困惑的是:在Dartium中运行,图像渲染时间约为8.5秒(令人印象深刻)。Firefox中的同一页面花费的时间超过15秒。这并不奇怪 但是在Chrome(版本27.0.1453.93)中运行相同的页面,Chrome不运行Dart,但JS版本也可以在6.7秒内完成,比Dart更快 为什么会这样 更新: 我添加了一个“运行”按钮来重新渲染画布(以验证预热行为)。此外,我还添加了一个仅JS版本(当然代码相同)来检查Dartium中的JS。简言之:数字和我的问题保持不变。热身似乎没有效果。JS版本在Dartium中比Dart版本更快编译成JS的Dart代码似乎比Dart(在Dartium中)更快,dart,dartium,Dart,Dartium,Dart的性能给我留下了深刻的印象,我制作了一个非常简单的web应用程序来渲染Dart中的Mandelbrot集(使用HTML5画布)。这绝对不是一个现实的性能测试。该页面在800x600画布中呈现Mandelbrot集,最大深度为10.000。 可以在此处看到该应用程序: 让我困惑的是:在Dartium中运行,图像渲染时间约为8.5秒(令人印象深刻)。Firefox中的同一页面花费的时间超过15秒。这并不奇怪 但是在Chrome(版本27.0.1453.93)中运行相同的页面,Chrome不运
封闭式问题后更新:仅作记录:在这种特定情况下,将代码移动到并行工作程序/隔离程序中不仅带来了显著的性能提升,而且Dart现在显然将JS版本留在了尘埃中,原因有很多。在我的脑海里:
- Dart VM错过了一些优化。V8比Dart VM旧得多,一些优化还没有进入Dart
- 你不是在进行热身跑。Dart VM当前不执行OSR(堆栈上替换)。当一个函数被调用时,它将在启动时的相同“模式”下完成。也就是说,如果一个重要函数在非优化模式下启动,但包含一个真正重要的循环(并且运行很长时间),则Dart VM不会用优化版本替换它。一个简单的解决方法是首先执行函数(可能使用较小的值),以便优化函数。最终OSR将进入Dart虚拟机
- 确保您没有在选中模式下运行。Dart虚拟机在未检查模式下可以更快