【问题标题】:does FP make code run faster in V8?FP 是否使代码在 V8 中运行得更快?
【发布时间】:2015-08-12 23:02:57
【问题描述】:

最近我玩了很多 Javascript(Chrome),我想到了一些事情。

  1. V8 有一个 JIT,可以让代码运行得更快。
  2. 函数式编程意味着您将逻辑写入函数并通过链调用/组合它们,这意味着核心函数将被频繁调用(不是它的真正定义,只是为了理解我的意思)。
  3. JIT 是exchange time with space 的一种最佳实践,基本上是在第一次缓存高级函数的机器代码并在下次运行缓存时。

所以我可以说如果以 FP 方式编写代码并由具有 JIT 功能的 VM 运行,应用程序会更快。

【问题讨论】:

  • 我不理解 - 为什么您认为如果以函数式风格编写代码在 V8 的 JIT 下会执行得更快? (相对于传统的命令式 JS 风格...?)

标签: javascript functional-programming jit


【解决方案1】:

关于这个主题的好读物在这里:http://thibaultlaurens.github.io/javascript/2013/04/29/how-the-v8-engine-works/

特别是讨论 V8 如何编译和注入 JIT 代码的部分

V8 如何编译 JavaScript 代码?

V8 有两个编译器!

可以为任何 JavaScript 生成好的代码的“完整”编译器:好 但不是很好的 JIT 代码。这个编译器的目标是生成代码 迅速地。为了实现它的目标,它不做任何类型分析和 对类型一无所知。相反,它使用内联缓存 或“IC”策略来完善有关类型的知识,而程序 跑。 IC 非常高效,带来约 20 倍的速度提升。

一种优化编译器,可为大多数应用程序生成出色的代码 JavaScript 语言。它稍后出现并重新编译热函数。这 优化编译器从内联缓存中获取类型并生成 关于如何更好地优化代码的决策。然而,有些 尚不支持语言功能,例如 try/catch 块 实例。 (try/catch 块的解决方法是写“非 稳定”代码到一个函数中,并在 try 中调用该函数 块)

简而言之,您最快的代码是在定义对象或原型函数定义后不修改它们的代码

【讨论】:

  • 感谢您对 V8 中最快的代码的评论非常好。
猜你喜欢
  • 1970-01-01
  • 2022-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-18
  • 1970-01-01
  • 2019-11-01
  • 1970-01-01
相关资源
最近更新 更多