// 请求函数,假设使用fetch进行HTTP请求
async function fetchData(productId) {
// 检查缓存中是否有数据
if (cache[productId]) {
console.log('Returning cached data for product:', productId);
return cache[productId];
}
// 如果没有缓存,则发起请求
try {
const response = await fetch(/api/products/${productId});
const data = await response.json();
// 将请求结果存入缓存
cache[productId] = data;
console.log('Fetched new data for product:', productId);
return data;
} catch (error) {
console.error('Failed to fetch data:', error);
}
}
我们可以使用一个结合了防抖和请求缓存的方法。这个方法的核心思想是在用户频繁操作时,延迟请求的发送,同时缓存已经成功的请求结果,避免重复请求相同的数据。
首先你要定义一个缓存对象,用来存储请求的结果。接着,你需要一个防抖函数来控制请求的频率。最后,你需要确保在组件卸载时清理缓存,避免内存泄漏。
下面是具体的实现步骤:
1. 创建一个缓存对象,用于存储已经请求过的数据。
2. 实现一个防抖函数,用于控制请求的发送频率。
3. 在hover事件中使用防抖函数来触发请求。
4. 在请求发送前,先检查缓存中是否存在所需的数据。
5. 如果数据存在,直接从缓存中读取;如果不存在,则发送请求并将结果存入缓存。
6. 确保在组件卸载时清理缓存。
下面是一个简单的代码示例:
在这个例子中,
debounce函数用于控制fetchData的调用频率,防止短时间内多次请求。fetchData函数首先检查缓存中是否有数据,如果有则直接返回缓存数据,否则发送请求并缓存结果。这样既能减少不必要的请求,又能提高用户体验。记得在组件卸载时调用cleanupCache来清理缓存,防止内存泄漏。希望这个方案能帮到你,如果有其他问题也可以随时问我。