【问题标题】:What is "CrankShaftScript" in Node.js?Node.js 中的“CrankShaftScript”是什么?
【发布时间】:2017-06-26 16:56:21
【问题描述】:

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

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

【问题讨论】:

    标签: node.js v8


    【解决方案1】:

    CrankShaftScript 是社区为在 V8 的 CrankShaft 引擎上运行得更快(est?)的 JS 习语(例如某些类型的循环)起的名字。

    曲轴被一个名为 TurboFan 的引擎取代。多年来,开发人员编写的许多 JS 代码都是专门为在 CrankShaft 上快速运行而编写的(例如,用“CrankShaftScript”编写),使用在 CrankShaft 上运行速度快的已知习语——这不再一定是这种情况,因为 V8 引擎现在是不同,在 CrankShaft 上运行最快的代码不一定保证在 TurboFan 上运行最快。

    如果我的回答过于冗长,下面是 NodeJS Benchmarks 线程上的 great comment,可能会更详细:

    ...我注意到 Node 核心的某些部分是用 CrankshaftScript,即仔细调整到有效的东西 曲轴非常好。

    【讨论】:

      【解决方案2】:

      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.js 发行版(如 node-chakracore)更好地执行并降低未来升级到 Node.js 中的 JavaScript 运行时的风险。

      【讨论】:

      • 在撰写本文时尚未发布带有 V8 5.9+(默认启用 TurboFan)的 node v8.x 版本。然而,Node v8.0.0 确实带来了 V8 5.8(尽管该版本的 V8 默认不启用 TurboFan)。
      • 感谢您的澄清!我已经编辑了问题。
      • 我的评论仍然适用于只有 V8 5.8 的节点 v8.1.x。虽然 5.8 可能有一些回归,但这并不是因为切换到 TurboFan 作为默认引擎,因为如前所述,默认引擎的切换只发生在 5.9 中。此外,由于 semver,节点 v8.1.x 永远不会看到 V8 升级到 5.9+(仅限节点 v8.2.x 或更高版本)。
      • 有没有关于这些成语是什么的文档?
      • 关键是它针对 Crankshaft 进行了优化,这主要意味着避免 Crankshaft 不喜欢的一些事情(例如try..catch)。 “CrankshaftScript”代码完全符合标准,可以在任何地方运行,它恰好针对 Crankshaft 进行了优化。
      【解决方案3】:

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

      我是now being replaced by TurboFan

      【讨论】:

        猜你喜欢
        • 2020-10-10
        • 1970-01-01
        • 1970-01-01
        • 2018-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多