webpack 导出的模块为什么需要用memorize包裹

翻webpack 源码的时候,发现webpack的所有导出模块都用memorize函数处理了一下,具体代码如下, github 源码地址

image.png
image.png

commonjs 的 require 内容应该是缓存在内存中的,为什么还要加一个memorize 处理

阅读 1.6k
1 个回答

简单看了一下这个函数的实现,作用是把一个函数包装成只能执行一次的新函数,第二次再执行会直接返回第一次的执行结果。

源码传送门:https://github.com/webpack/we...

看起来就是个简单的性能优化。例如某个函数执行结果可能很久、或是占用内存很大,但一旦执行结束后,就可以把执行结果缓存下来,后面直接取这个结果就行了,不用再重复耗时执行。

而且我翻了一下提交记录,这个函数在 2018 年 12 月的一次 commit 中被引入。但直到 2020 年 4 月,还有相关的 commit,也没啥变化,就是把 require 之类的方法全都用 memorize 又包了一层,实在是没看明白有啥用,require 本来就是只会执行一次啊。

推荐问题