【问题标题】:Does NodeJS have any performance demerits or significant overhead in comparison to pure V8?与纯 V8 相比,NodeJS 是否有任何性能缺点或显着开销?
【发布时间】:2019-01-30 09:42:05
【问题描述】:

我正在开发的应用程序在桌面环境中运行。在后端,它运行 C++。前端是用户可修改的,并用 JavaScript 编写,使用 C++ 中的一些公开的类/函数。

我目前正在尝试确定应用程序是否应该单独运行 v8 以运行 JavaScript 代码,或者是否应该“升级”以使用 NodeJS。升级的好处是可以访问大量的 Node 模块,包括内置的和第三方的供用户依赖。但是,我担心 JavaScript 的性能可能会因为 Node 带来的额外包袱而受到阻碍。

也许在 C++ 后端通过自己的版本实现最常见的 Node 模块并将它们公开给 JS 会更好?或者他们是否会有不相关/没有任何性能差异?

【问题讨论】:

  • Javascript 由 V8 在 Chrome 和 node.js 中运行。目前尚不清楚您认为这些性能下降将来自何处,或者您为什么认为这是值得关注的事情。此外,创建一个运行 V8 的新环境并重新创建一堆 node.js 模块并不是一个微不足道的项目,所以即使你发现 node.js 的某些方面给你带来了问题,我认为你宁愿分叉它和修改而不是从头开始重新创建。
  • @jfriend00 Node 是否还包含大量其他特性和功能,例如 libuv、require、额外库等? JavaScript 不只是直接进入 v8。
  • 好吧,一旦 Javascript 执行,它只是 V8 执行它。 libuv 是一个跨平台库,允许设计适用于多个操作系统的功能。它不会在实际执行 Javascript 指令时发挥作用。它确实有助于实现计时器、事件循环、文件系统访问等......,您可能需要所有这些。但是,仅仅因为一个平台有很多特性并不能说明它在运行 Javascript 时的表现。它们在很大程度上是两个独立的东西。
  • 例如,将fs 模块添加到环境中与Javascript 循环的执行速度没有任何关系。您没有说明您关注的确切性能,因此我们无法更具体地发表评论。在这种情况下,作为一个词的“性能”是一个非常宽泛的词。
  • 好吧,我明白了!感谢您的解释,对于所提供问题的含糊之处,我深表歉意。在这种情况下,我将使用 Node 进行开发。

标签: c++ node.js embed v8 embedded-v8


【解决方案1】:

针对 NodeJS 构建不会导致显着的性能损失。但是,它可能会引入可维护性惩罚和安全性惩罚。 NodeJS 可能有很多你没有在你的应用程序中使用的特性。它可能具有您实际上不希望您的 Javascript 作者访问的功能。您是否在高度安全的环境中运行?您可能希望限制 Javascript 作者对文件系统和网络的访问。如果您在应用程序中运行第三方不受信任的代码,并且您的应用程序在单独的第三方系统上运行,那么您肯定需要考虑安全隐患。在这种情况下,直接针对 V8 构建会是更好的选择。

【讨论】:

  • 这里需要补充的重要一点是 Node.js 使用 libuv,这是(用非常简单的术语来说)一个大的 while 循环。这是因为在 Node.js 中,JavaScript 驱动执行。如果你调用 JS 领域的次数多于 JS 调用 C++ 领域的次数,那么你应该警惕这个事实。
猜你喜欢
  • 1970-01-01
  • 2016-11-16
  • 1970-01-01
  • 1970-01-01
  • 2013-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多