gpt4 book ai didi

javascript - import * as _ from 'lodash' 和 import { indexOf } from 'lodash' 之间是否存在性能差异

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:30:42 30 4
gpt4 key购买 nike

我想知道 2 次导入在内存和性能方面是否有任何差异。

如果我的节点模块中有 lodash,无论导入如何,它都会编译所有文件吗?

最佳答案

理论上,based on the specification for import ,是的,应该是有区别的。

如果 lodash 模块被编写为 ES2015 模块,规范允许兼容优化使用命名导入的静态分析,以便仅加载提供 indexOf() 所需的内容。

它会创建一个 ImportEntry record保留对在 ES2015 模块上运行静态分析时如何解析 import 的引用,以便仅评估相关的 export

在实践中,这并不是那么简单,并且由于目前没有本地实现,像 Babel 这样的转译器会将 ES2015 import 语法转换为 CommonJS 功能等价物。

不幸的是,这个功能上等效的方法仍然必须评估整个模块,因为它的导出在完全评估之前是未知的。

这就是为什么 ES2015 规范要求 importexport 在顶级范围内,这样静态分析将允许 JavaScript 引擎通过确定什么来优化在为 export 评估代码时,可以安全地省略文件的某些部分。

另一方面,有一些非原生的打包器,如 Rollup 和 Webpack,它们执行静态分析以进行 tree-shaking 并删除未被 import 引用的死代码部分到包中的模块。此优化独立于 import/export 的使用,但使用命名的 imports 而不是 glob stars 允许更容易和更优化的静态分析发生在这些 bundler 中,最终发生在未来将发布的任何 native 实现中。

长话短说

理论上,是的,有区别,但在实践中,没有区别,直到 native 实现可用于 import/export,或者除非你使用独立于实际语法和规范执行静态分析和 tree-shaking 的打包器。

无论如何,建议使用命名导入,这样您就可以在您使用的任何环境中进行任何可能的优化。

ECMAScript 第 15.2 节模块规范

关于javascript - import * as _ from 'lodash' 和 import { indexOf } from 'lodash' 之间是否存在性能差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45305272/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com