Node.js中的"CrankShaftScript"是什么?
What is "CrankShaftScript" in Node.js?
Node.js 社区在 Twitter、GitHub 和 Facebook 群组讨论中越来越多地提到 "CrankShaftScript"(和 "CrankShaftJS")。我认为 Node.js 是用 C++ 和 JavaScript 编写的,那么 CrankShaftScript 在像这样的性能回归错误中指的是什么:
CrankShaft 是 V8 的编译基础结构,Node.js' Javascript 运行时 (details)。
C运行kShaftScript 是社区对 V8 的 C运行kShaft 上 运行 更快(估计?)的 JS 习语(例如某些类型的循环)的名称引擎。
C运行kShaft 正在被名为 TurboFan 的引擎取代。多年来,开发人员编写的许多 JS 代码都是专门针对 运行 在 C运行kShaft 上快速编写的(例如,使用 "CrankShaftScript" 编写),使用 运行 快速的已知习语在 C运行kShaft 上 - 这不再是必然的,因为 V8 引擎现在不同了,并且 运行 在 C运行kShaft 上最快的代码不一定是 gua运行在 TurboFan 上达到 运行 最快。
如果我的回答过于冗长,这里有一个 great comment on the NodeJS Benchmarks 线程可以更详细地说明:
...I noticed that some parts of Node core are sort-of written in
CrankshaftScript, i.e. carefully tuned towards stuff that works
extremely well in Crankshaft.
CrankShaftScript 是社区采用的术语,用于非惯用语 and/or 非标准兼容 JavaScript 只会执行 and/or 在特定版本的 v8 JavaScript 使用 CrankShaft JIT 编译器的运行时。具体示例包括:以难以维护的方式编写的循环以解决 v8 中的 JIT 优化缺陷,以及使用特定于 v8 的内置 functions/globals.
这个术语最初是为了描述 node-chakracore 和 spidernode 中的一些根本性能问题而创造的,它们是 Node.js 使用 ChakraCore 和 SpiderMonkey 运行时而不是 v8 的发行版。
它现在被用作 shorthand 来解释为什么 Node.js 8.1 版本系列更新到 v8 的较新版本,由于由于v8 的 CrankShaft JIT 被 TurboFan 取代(有时称为 "TF")。在这些问题中:
- https://github.com/nodejs/node/issues/11851#issuecomment-287253082
- https://github.com/nodejs/CTC/issues/146#issuecomment-310229393
- https://twitter.com/matteocollina/status/870580613266501632
出于这些原因,Node.js 社区正在积极致力于在 Node.js 核心代码以及常见的 npm 包中删除 CrankShaftScript 的实例。这应该有助于替代 Node.js 分布,如 node-chakracore 表现更好,并降低未来升级到 Node.js 中的 JavaScript 运行时的风险。
Node.js 社区在 Twitter、GitHub 和 Facebook 群组讨论中越来越多地提到 "CrankShaftScript"(和 "CrankShaftJS")。我认为 Node.js 是用 C++ 和 JavaScript 编写的,那么 CrankShaftScript 在像这样的性能回归错误中指的是什么:
CrankShaft 是 V8 的编译基础结构,Node.js' Javascript 运行时 (details)。
C运行kShaftScript 是社区对 V8 的 C运行kShaft 上 运行 更快(估计?)的 JS 习语(例如某些类型的循环)的名称引擎。
C运行kShaft 正在被名为 TurboFan 的引擎取代。多年来,开发人员编写的许多 JS 代码都是专门针对 运行 在 C运行kShaft 上快速编写的(例如,使用 "CrankShaftScript" 编写),使用 运行 快速的已知习语在 C运行kShaft 上 - 这不再是必然的,因为 V8 引擎现在不同了,并且 运行 在 C运行kShaft 上最快的代码不一定是 gua运行在 TurboFan 上达到 运行 最快。
如果我的回答过于冗长,这里有一个 great comment on the NodeJS Benchmarks 线程可以更详细地说明:
...I noticed that some parts of Node core are sort-of written in CrankshaftScript, i.e. carefully tuned towards stuff that works extremely well in Crankshaft.
CrankShaftScript 是社区采用的术语,用于非惯用语 and/or 非标准兼容 JavaScript 只会执行 and/or 在特定版本的 v8 JavaScript 使用 CrankShaft JIT 编译器的运行时。具体示例包括:以难以维护的方式编写的循环以解决 v8 中的 JIT 优化缺陷,以及使用特定于 v8 的内置 functions/globals.
这个术语最初是为了描述 node-chakracore 和 spidernode 中的一些根本性能问题而创造的,它们是 Node.js 使用 ChakraCore 和 SpiderMonkey 运行时而不是 v8 的发行版。
它现在被用作 shorthand 来解释为什么 Node.js 8.1 版本系列更新到 v8 的较新版本,由于由于v8 的 CrankShaft JIT 被 TurboFan 取代(有时称为 "TF")。在这些问题中:
- https://github.com/nodejs/node/issues/11851#issuecomment-287253082
- https://github.com/nodejs/CTC/issues/146#issuecomment-310229393
- https://twitter.com/matteocollina/status/870580613266501632
出于这些原因,Node.js 社区正在积极致力于在 Node.js 核心代码以及常见的 npm 包中删除 CrankShaftScript 的实例。这应该有助于替代 Node.js 分布,如 node-chakracore 表现更好,并降低未来升级到 Node.js 中的 JavaScript 运行时的风险。