如何在简易自动补全组件中缓存历史查询结果?
给你的textarea补全脚本加历史查询缓存
嘿,我来帮你搞定这个历史查询结果缓存的需求!你的现有代码每次都要遍历fallback数组匹配前缀,加上缓存后就能避免重复计算,提升响应速度——尤其是当fallback数据量比较大的时候,效果会特别明显。
具体实现思路
咱们可以用Map(或者普通对象)来存储已经查询过的关键词和对应的匹配结果:键存小写后的查询词,值存匹配到的dl数组。下次遇到相同的查询词时,直接从缓存里取结果,不用再重复遍历数组。
修改后的代码示例
// 把缓存容器放在函数/模块级作用域,避免每次调用都重置 const queryCache = new Map(); // 你的补全逻辑部分 var lastQuery = term.toLowerCase(); // 第一步:先检查缓存里有没有现成结果 if (queryCache.has(lastQuery)) { const cachedResult = queryCache.get(lastQuery); if (cachedResult.length > 0) { callback(cachedResult); return false; } else { return true; } } // 缓存里没有的话,再执行原来的匹配逻辑 if(fallback[0]){ var dl = []; for(k=0; k<fallback.length; k++){ var name = fallback[k].name.toLowerCase(); if( name.substr(0, lastQuery.length) == lastQuery ){ dl.push(fallback[k]); } } // 第二步:把这次的查询结果存入缓存,方便下次复用 queryCache.set(lastQuery, dl); if(dl[0]){ callback(dl); return false; } else { return true; } } // .......... following the autocomplete function ...........
额外优化小建议
- 如果
fallback数组会动态更新(比如后端返回新数据),记得在数据更新时清空缓存queryCache.clear(),避免缓存的旧数据导致补全结果不准确。 - 要是担心缓存占用内存过多,可以给缓存加个过期机制,或者限制最大存储条目数(比如超过100条就删除最早的记录)。
内容的提问来源于stack exchange,提问作者user9631725
相关产品推荐
相关产品推荐

