Node.js中的“CrankShaftScript”是什么?

时间:2017-06-26 16:56:22

标签: node.js v8

Node.js社区中有越来越多的关于Twitter,GitHub和Facebook小组讨论的“CrankShaftScript”(和“CrankShaftJS”)的引用。我认为Node.js是用C ++和JavaScript编写的,所以CrankShaftScript在性能回归中指的是这样的错误:

https://github.com/nodejs/CTC/issues/146#issue-237435588

3 个答案:

答案 0 :(得分:23)

CrankShaftScript是社区给出的JS惯用语(例如某些类型的循环)在V8的CrankShaft引擎上运行得更快(est?)的名称。

CrankShaft正被名为TurboFan的发动机取代。开发人员多年来编写的大量JS代码专门用于在CrankShaft上快速运行(例如用“CrankShaftScript”编写),使用在CrankShaft上快速运行的已知惯用语 - 由于V8引擎现在已经不再适用了在CrankShaft上运行速度最快的代码并不一定能保证在TurboFan上运行得最快。

如果我的答案过于冗长,great comment帖子上的NodeJS Benchmarks可能会更好地详细说明:

  

......我注意到Node核心的某些部分是写入的   CrankshaftScript,即仔细调整工作的东西   非常好的Crankshaft。

答案 1 :(得分:16)

CrankShaftScript是一个社区采用的术语,用于非惯用和/或非标准兼容的JavaScript,它只能在使用CrankShaft JIT编译器的v8 JavaScript运行时的特定版本中执行和/或执行。具体示例包括:以难以维护的方式编写的循环,以解决v8中的JIT优化缺陷,以及使用特定于v8的内置函数/全局变量。

这个术语最初用于描述node-chakracore和spidernode中的一些根性能问题,这些问题是使用ChakraCore和SpiderMonkey运行时而不是v8的Node.js发行版。

现在用它作为简写来解释为什么Node.js 8.1发布系列更新到更新版本的v8,由于v8的CrankShaft JIT被TurboFan取代,因此在微观和宏观基准测试中有几个性能回归(有时也称为“TF”)。正如在这些问题中:

由于这些原因,Node.js社区正在积极地在Node.js核心代码以及常见的npm包中切除CrankShaftScript的实例。这应该有助于像node-chakracore这样的其他Node.js发行版能够更好地运行并减轻将来升级到Node.js中JavaScript运行时的风险。

答案 2 :(得分:1)

CrankShaft是V8,Node.js的Javascript运行时(details)的编译基础结构。

这是now being replaced by TurboFan