You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在简易自动补全组件中缓存历史查询结果?

给你的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:26:11