当前位置: 首页 > 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.jsqmd.com/news/1099435/

相关文章:

  • Tensor 是什么?PyTorch 里最重要的对象讲清楚
  • 而 C++ 就是这种能自举的编程语言
  • 基于PI外环-FCS-MPC内环的永磁同步电机双环调速系统仿真分析(Simulink仿真实现)
  • GitLab开发流程实践
  • CSDN自动化测试_草稿
  • 【最新测评】有没有降AI率的靠谱网站推荐?2026年实测15款降AI神器,省钱又高效!
  • Go模块管理教程
  • C++继承与多态解析
  • 【Claude】Claude Code CLAUDE.md 记忆系统完全指南:让 AI 永远记得你的项目规范
  • 基于单片机智能点滴控制系统智能输液非接触式液位检测心率监测33(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码
  • 临沂GEO技术应用与合规解析
  • 别再搞混了!JVM的Minor GC、Major GC、Full GC 到底有啥区别?
  • Java线程池使用指南
  • Java内存模型全面解析
  • 基于STM32单片机甲烷煤气天然气报警厨房安全火灾报警火焰物联网3(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码
  • 04_C++控制结构
  • 【Claude】Claude Code 自定义斜杠命令完全指南:把重复提示词变成一键命令
  • 如何用UniversalUnityDemosaics轻松去除Unity游戏马赛克:免费完整指南
  • C++模板编程基础
  • 互动故事树 - 你的选择决定故事走向
  • Docker部署项目实践
  • Go协程Goroutine原理
  • Docker Compose详解
  • 终极NxNandManager指南:轻松管理你的Switch NAND存储
  • 基于51/STM32单片机智能马桶设计 久坐提醒 换气除臭 杀菌消毒33(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码
  • C++文件操作详解
  • C++智能指针开发实践
  • 什么是 SIMD
  • Topit:让Mac窗口置顶的智能解决方案,告别窗口遮挡烦恼
  • M4Markets:技术架构的路径复盘