当前位置: 首页 > news >正文

把 quicklink 的预加载思想搬到 API 层:我设计了一套‘懒请求调度器’,首屏并发从 9 降到了 2

背景

运营后台的仪表盘页面有 9 个图表组件,每个都要调后端 API。用户一进来,9 个请求同时发出,后端扛不住,前端首屏等最慢的那个 API(1.8s)。

常规方案是给每个图表加一个"进入视口再加载"。用 IntersectionObserver 实现,大概是每个组件里加一段:

const{ref,stop}=useIntersectionObserver(target,([{isIntersecting}])=>{if(isIntersecting){fetchData()stop()}})

改动量不大,但有个问题:每个图表都是"看到才开始加载",用户往下滚,每个图表依次出现 loading 态。视觉上很碎,体验不好。

我需要的是另一种策略:不是"看到再加载",而是“有可能被看到之前就预加载”——这就是 quicklink 的思路,只不过它预加载的是页面 URL,我需要预加载的是 API 数据。

整体设计

参考 quicklink 的调度层架构,我搭了三个模块:

┌───────────────────────────────────┐ │ useLazyPreload(intersectionOptions)│ │ 视口检测层:哪些图表马上要进入视口 │ └───────────┬───────────────────────┘ │ 返回候选列表 ┌───────────▼───────────────────────┐ │ useIdlePreloader(threshold) │ │ 调度层:等主线程空闲后批次执行 │ └───────────┬───────────────────────┘ │ 按批次调用 ┌───────────▼───────────────────────┐ │ prefetchApi(urls, concurrency) │ │ 执行层:控制并发、去重、缓存结果 │ └───────────────────────────────────┘

核心思路和 quicklink 完全一致:把"何时加载"和"如何加载"解耦。视口层只管"哪些该加载",调度层只管"什么时候执行",执行层只管"怎么加载、怎么去重"。

实现细节

第一层:视口预检测

quicklink 用IntersectionObserver检测<a>标签。我这层检测的是图表组件的容器 DOM,但不是"进入"视口才触发,而是"即将进入"视口就触发

functionuseLazyPreload(rootMargin='300px'){constpending=ref(newSet())constobserver=newIntersectionObserver((entries)=>{entries.forEach((entry)=>{
http://www.cnnetsun.cn/news/3075169.html

相关文章:

  • 化学图像识别工具横评:DECIMER、Img2Mol、MolScribe,哪个更适合你的科研流水线?
  • 《Debezium + Kafka Connect 实战:从零搭建 MySQL CDC 数据管道,踩坑全记录》
  • M4Markets:技术架构的路径复盘
  • open harmony 项目实战:用 AppStorage 实现轻量级页面路由和状态管理
  • open harmony 项目实战:用 ArkTS 实现诗词收藏和阅读历史
  • 基于51/STM32单片机温湿度控制系统设计大棚检测成品恒温恒湿光照44(设计源文件+万字报告+讲解)(支持资料、图片参考_相
  • JavaScript Promise详解
  • Grid布局开发实践
  • C++虚函数工作原理
  • Angular基础开发教程
  • 阅读APP书源配置终极指南:一键解锁全网小说库的完整教程
  • PHP SQL注入检测实战:从原理到自动化工具实现
  • java+前端学习笔记
  • Python网站下载器:三步将整个网站完整保存到本地
  • 5个实用技巧:快速掌握Monitorian多显示器亮度调节
  • CAIWY 采购知识库(六)
  • Parsec虚拟显示器终极指南:如何实现零延迟的4K游戏串流体验
  • 6款论文降AIGC工具实测:AI率秒归安全区,学生党狂喜款
  • 计算机Java毕设实战-基于 SpringBoot 的大学生在线评教打分系统的设计与实现 基于 SpringBoot 的高校教学质量评价系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 别再乱按复位键了!手把手教你搞懂STM32的三种复位方式(含独立/窗口看门狗详解)
  • Java基础快速入门: File类与IO流基础
  • 【AI大模型应用开发】【项目实战】9.基于GPT2搭建医疗问诊机器人
  • 版本兼容设计事件类预留版本字段:
  • C++ STL之互斥锁与条件变量详解
  • C++ STL 之随机数生成详解
  • GPIO详细介绍
  • 汽车软件测试,难点到底在哪?
  • 2026年7月零代码网站搭建与企业无代码建站工具测评:谁更适合你,
  • 手机AI Agent系统级集成实战:从架构到代码的完整指南
  • 告别信息过载:利用聚合平台的 Grok 模型快速提炼长文章核心观点