Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
584 views
in Technique[技术] by (71.8m points)

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

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

image.png
image.png

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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

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

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...