Javascript在导入之间记忆缓存吗?



使用下面的Lodash memoize示例,我的理解是,otherModule.js在抓取data2时将使用从data获取的缓存版本,但是如果otherModule.js先前获取/缓存otherModule2.js,它还会使用data的缓存版本吗?如果没有,有没有办法让这两个模块共享相同的缓存?

// getData.js
import _ from 'lodash';
const dataPromise(url) = async fetch(url).then(value => value.json());
export const memDataPromise = _.memoize(dataPromise);
// otherModule.js
import { dataPromise } from './getData.js';
const data = await dataPromise('someUrl');
const data2 = await dataPromise('someUrl');
// OtherModule2.js
import { dataPromise } from './getData.js';
const data = await dataPromise('someUrl');

是的,模块的顶层只会运行一次,不管它被导入了多少次。例如,您将看到,如果将console.log语句放入模块中,该日志将只出现一次。

第一次导入模块时,将创建一个与该模块对应的命名空间对象,运行模块的顶层代码,并将模块的导出分配给该命名空间。当将来导入该模块时,只需再次引用已经存在的命名空间。

最新更新