假设我有一个 url 列表,如下所示:
[ '/images/1', '/images/2', ... ]
我想预取n
这些,以便图像之间的转换更快。我现在正在做的componentWillMount
是以下内容:
componentWillMount() {
const { props } = this;
const { prefetchLimit = 1, document = dummyDocument, imgNodes } = props;
const { images } = document;
const toPrefecth = take(prefetchLimit, images);
const merged = zip(toPrefecth, imgNodes);
merged.forEach(([url, node]) => {
node.src = url;
});
}
用imgNodes
像这样被定义:
imgNodes: times(_ => new window.Image(), props.prefetchLimit),
和times
, zip
,take
来自ramda。
现在,当我在react中使用这些网址时:
<img src={url} />
无论 url 在哪里使用,它都会根据Etag
和Expire
标签访问浏览器缓存。我还计划在n
我们n - 1
进入视图内部时使用它来预取下一个图像imgNodes
,以相同的方式重用。
我的问题是:
这是否是一个有效的想法,提供 100 多个将使用此想法的组件,但一次只能看到 1 个?
这样做我会遇到内存问题吗?我假设
imgNodes
在卸载组件时将被垃圾收集。
我们正在使用,redux
所以我可以将这些图像保存在商店中,但这似乎是我在处理缓存而不是利用浏览器的自然缓存。
这是一个多么糟糕的主意?