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

Node.js社区中有越来越多的参考文献在Twitter,GitHub和Facebook小组讨论中提到“CrankShaftScript”(和“CrankShaftJS”)。 我认为Node.js是用C ++和JavaScript编写的,那么CrankShaftScript在性能回归中提到的错误是:

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

CrankShaftScript是社区给JS在V8的CrankShaft引擎上运行得更快(est?)的成语(比如某些types的循环)的名字。

CrankShaft正在被名为TurboFan的引擎所取代。 这些年来,由开发人员编写的许多JS代码都是专门为在CrankShaft上快速运行(例如,用CrankShaftScript编写的)而使用在CrankShaft上运行得很快的已知习惯用法,因为V8引擎现在已经不再是这种情况了不同的是,在CrankShaft上跑得最快的代码并不一定保证在TurboFan上运行得最快。

如果我的答案太冗长了,这里是对NodeJS基准testing线程的一个很好的评论 ,

…我注意到,Node核心的某些部分是用CrankshaftScript编写的,也就是说,仔细地调整了曲轴上非常好的东西。

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

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

它现在被用作速记来解释为什么由于v8的CrankShaft JIT被TurboFan所取代,为什么Node.js 8.1版本系列更新到v8的更新版本,在微观和macros观基准testing中有几个性能回归到“TF”)。 正如在这些问题:

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

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

它现在正在被TurboFan取代 。