为了避免在应用程序中进行重复的fetch()请求,可以使用全局记忆化技术,这样可以避免不必要的网络请求,从而提高应用程序的性能。
以下是一个示例实现,它使用一个全局缓存对象来存储已经请求过的URL和其响应数据。在后续的请求中,如果请求URL已经存在于缓存对象中,则可以直接返回缓存的响应数据,而无需再次进行网络请求。
const cache = {};
function memoizingFetch(url, options) {
const cacheKey = `${url}_${JSON.stringify(options)}`;
if (cache[cacheKey]) {
console.log(`Fetching from cache: ${cacheKey}`);
return Promise.resolve(cache[cacheKey]);
} else {
console.log(`Fetching from server: ${cacheKey}`);
return fetch(url, options)
.then(response => {
cache[cacheKey] = response.clone();
return response;
})
.catch(error => {
delete cache[cacheKey];
throw error;
});
}
}
上述代码中,memoizingFetch()函数接受URL和请求选项作为参数,并使用它们构建一个唯一的缓存键。如果缓存中存在请求的结果,则直接返回响应的Promise对象;否则,将进行网络请求,并将响应数据存储到缓存中。如果请求失败,缓存将被删除。
注意:全局记忆化技术应该谨慎使用,特别是在频繁更新数据的应用程序中。在这种情况下,缓存数据可能会非常快地变得过时或失效。
下一篇:避免禁用Android的证书固定