NodeJS 服务器中的 ES 模块与普通 JS 模块有性能差异吗?

问题描述 投票:0回答:2

在 Nodejs 后端项目中使用 ES 模块相对于 CommonJS 模块是否有性能优势或劣势?我问这个问题是因为我看到很多人仍在使用 CJS,即使较新版本的 NodeJS 完全支持 ES 模块。

node.js node-modules es6-modules commonjs
2个回答
15
投票

import 语句可以引用 ES 模块或 CommonJS 模块。 import 语句仅允许在 ES 模块中使用,但 CommonJS 中支持动态 import() 表达式来加载 ES 模块。

导入 CommonJS 模块时,提供

module.exports
对象作为默认导出。命名导出可能可用,由静态分析提供,以方便实现更好的生态系统兼容性。

CommonJS 和 ES 模块的主要区别在于同步和异步性质,这可能会影响性能:

  • CommonJS 模块是同步的,这在小模块执行的情况下不是问题。但是,它可能会延迟较大模块的执行。
  • ES模块的加载和解析是异步的。

0
投票

我确实有一个具有嵌套导入/导出的模块。其中约 100 个来自约 15 个文件。该包是用 ESM 编写的,Commonjs 支持是用 Babel 完成的。我做了一个非常简单的测试,仅从包中导入基本类并对其进行控制台。

使用 commonjs 导入基本类比使用 ESM 更快。 差异虽小但可见。

?> time node index.cjs
> 0.15
?> time node index.mjs
> 0.25

这可能只是我的 npm 包,但在这种情况下它非常一致。在节点 20 上运行。

© www.soinside.com 2019 - 2024. All rights reserved.