1

我目前正在开发一个需要 JS 支持(用 C# 编写的实际程序)的项目,并且正在使用 Jint 作为解释器。在我做任何进一步的工作之前,我运行了一个基本的性能测试来找出编译器(例如 Chrome V8)和解释器之间的区别。我预计最多会减速 50 倍,但我发现接近 600 倍。Chrome 的 V8 需要 60-100 毫秒,而 Jint 需要 60 到 70

我使用的测试是 Mozilla 的 Dromaeo 字符串测试 - http://dromaeo.com/?dromaeo / http://dromaeo.com/tests/dromaeo-object-string.html,在不使用DOM。

var sTime = new Date();
var startTest = function(){sTime = new Date();};
var test = function(name, fn){ fn(); };
var eTime = new Date();
var endTest = function(){eTime = new Date(); console.log(eTime.getTime() - sTime.getTime());};
var prep = function(fn){ fn(); };

所以,我的问题是:为什么 Jint 比 V8 / 原生编译慢 600 到 1000 倍?口译员真的要慢得多,还是这只是 Jint 特别慢的特例?

编辑 我在这里发布了我的测试代码:http: //pastebin.com/R017KKvR

似乎这string.lastIndexOf就是问题所在,完成该测试需要 24-26 秒。

4

1 回答 1

1

我假设您使用的是 Jint v2 或更高版本。

在几乎所有场景中,V8 总是会更快。正如您所提到的,问题实际上是多少。在这种情况下,这可能来自两个因素:

  • 解释对执行脚本的时间有多大影响
  • 字符串原型方法的实现情况和优化程度如何

回答这个问题的唯一方法是实际分析执行的脚本的性能并了解时间消耗在哪里。更简单的第一种方法还可以跟踪每个不同的分组方法调用,以确定总时间是否可能仅来自其中的一个或两个。

您可能也发现了一个巨大的性能错误,我真的很乐意修复它。

更新

修复了这个提交:https ://github.com/sebastienros/jint/commit/2ed825cda866092c728b07a9e2b6109b0d20cbc8

于 2014-11-25T18:00:59.870 回答