有没有办法强制Node.js进行即时编译(JIT)?

5

由于 Node.js 使用 V8 js 引擎,我认为它的工作方式与 v8 相同,只有在函数或某些代码需要大量的 CPU 运算或被多次调用时才会进行优化/jit 编译。

考虑到我正在开发一个服务器并想要从我的代码中获得最佳性能,而内存不是问题,是否有一种方法可以“强制”所有代码在第一次运行时就进行 JIT 编译并优化性能呢?


2
通常情况下,JIT比您更擅长优化需要它的代码。请注意,问题不仅在于内存,还包括编译时间 - 如果服务器需要编译整个应用程序的完整代码,则启动速度会慢得多。特别是考虑到很多代码实际上只运行一次。 - Bergi
多慢才算是“慢”呢?因为在我的情况下,我认为即使需要几秒钟才能启动,也不会有太大关系,因为这只需要发生一次。 - peq42
1个回答

20

我是一名V8开发者。让V8自己完成它的任务可以获得最佳性能。(我们非常关注性能,我们构建V8使其默认配置具有最佳性能)

为了测试目的,确实有一个标志强制在首次执行时对所有代码进行“优化”编译。但在这里,“优化”确实需要加上引号,因为这样做意味着性能 明显 降低 ,不如通常情况下获得的性能好。原因不仅在于编译时间,还在于像JavaScript这样的动态语言,创建优化代码至关重要取决于首先观察到的类型反馈。您可以将没有类型反馈的代码提供给优化编译器,但它将无法完成良好的工作--它有两个选择:产生能够处理任何类型的通用代码(速度与未优化的代码大致相同),或生成随机猜测可能会遇到哪些类型的代码(这意味着几乎有100%的机会至少会猜错一次,代码必须在首次执行时丢弃)。 无论哪种方式,结果性能都比通常的方法差。

如果您想要预先优化代码,请使用C ++、Rust、Go等编写您的服务器。;-)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接