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

如何限制Finnhub股票API返回数据量以提升前端搜索加载速度

可行优化方案

  • 1. 增加搜索防抖,减少无效触发

当前keyup事件每按一次键盘就执行一次全量搜索,用户连续输入时会产生大量无意义的计算,添加300ms防抖逻辑,输入停止后才执行搜索,可减少90%以上的不必要搜索操作。

  • 2. 预处理数据源,避免重复计算

原有代码每次搜索都要对标的的名称、代码字段重复转小写,28000条数据每次遍历都多执行两次重复转换,可在接口返回数据后统一预处理生成小写的检索字段,搜索时直接比对预处理内容,大幅降低单轮搜索的计算量。

  • 3. 限制渲染条数,减少DOM开销

DOM渲染是性能瓶颈的核心,就算搜索出数千条结果,用户也不会逐行查看,渲染时仅取前100-200条展示即可,能把DOM操作耗时降到原来的1%以下。

  • 4. 可选进阶优化:构建前缀索引

如果对搜索速度要求更高,可在数据加载完成后预先构建首字母/前缀索引,搜索时直接走索引匹配,无需全量遍历,28000条数据的索引构建耗时极短,搜索速度可再提升数倍。


优化后完整代码

// 防抖函数,默认延迟300ms
const debounce = (func, delay = 300) => {
  let timer = null;
  return (...args) => {
    clearTimeout(timer);
    timer = setTimeout(() => func.apply(this, args), delay);
  };
};

// 搜索事件添加防抖包装
input.addEventListener('keyup', debounce((e) => {
  const searchString = e.target.value.toLowerCase();
  // 直接匹配预处理好的小写字段,无需重复转换
  const filteredCompanies = stockCompanies.filter((company) => {
    return (
      company.lowerDesc.includes(searchString) ||
      company.lowerSymbol.includes(searchString)
    );
  });
  displayCompanies(filteredCompanies);
}));

const loadCompanies = async () => {
  try {
    const res = await fetch(`https://finnhub.io/api/v1/stock/symbol?exchange=US&token=${apiKey}`);
    const rawData = await res.json();
    // 预处理数据,提前生成小写检索字段
    stockCompanies = rawData.map(item => ({
      ...item,
      lowerDesc: item.description.toLowerCase(),
      lowerSymbol: item.displaySymbol.toLowerCase()
    }));
    displayCompanies(stockCompanies);
  } catch (err) {
    console.error(err);
  }
};

const displayCompanies = (data) => {
  const dynamic = [];
  // 最多渲染前200条,可根据业务需求调整上限
  const showData = data.slice(0, 200);
  for (let i = 0; i < showData.length; i++){
    dynamic.push(`
    <div class="listings_card">
      <h1>${showData[i].description}</h1>
      <p>${showData[i].displaySymbol}</p>
    </div>`);
  }
  document.querySelector('.listings').innerHTML = dynamic.join('');
};

loadCompanies();

以上三项基础优化落地后,28000条标的的搜索基本不会有卡顿感,完全满足日常使用需求。

内容的提问来源于stack exchange,提问作者benleem

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:45:01