javascript - Jint 对于字符串来说非常慢

标签 javascript performance interpreter v8 jint

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

我使用的测试是 Mozilla 的 Dromaeo String 测试 - 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 秒才能完成该测试。

最佳答案

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

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

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

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

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

更新

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

关于javascript - Jint 对于字符串来说非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26954728/

相关文章:

javascript - 单击 <a> 标记时的事件顺序

javascript - PushState 创建重复的历史条目并覆盖以前的历史条目

javascript - 在条形图上显示负值

performance - 在html5下动画多个 Sprite 的最快方法是什么?

c - 构建解释器 : designing an AST

c++ - 用标准 C 或 C++ 编写的解释器

javascript - 检索不同错误结果的 React Fetch 错误文本

mysql - 处理大量数据时 MySql 中的查询性能

java - 在 Java 中 : is where a way to create a subarray that will point to a portion of a bigger array?

python - Python 如何读取和解释源文件?