Jint的字符串非常慢

时间:2014-11-16 07:09:46

标签: javascript performance interpreter v8 jint

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

1 个答案:

答案 0 :(得分:0)

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

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

  • 解释对执行脚本的时间有多大影响
  • 实施的String原型方法的效果和优化程度

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

您可能已经发现了一个巨大的性能错误,我真的很乐意解决这个问题。

<强>更新

已修复此提交:https://github.com/sebastienros/jint/commit/2ed825cda866092c728b07a9e2b6109b0d20cbc8