全行业小程序/公众号定制开发 · 当天出DEMO · 不满意随时退 · 24小时接单
获取报价
小程序触底加载教程,用户在地铁上滑动信息流列表 MPForge

小程序触底加载教程|阈值调优与重复请求防护 – MPForge

直接回答:触底加载最常见的故障是「连翻两页」和「完结了还在转圈」,根子都在阈值、完结态和请求锁三处。这份小程序触底加载教程写给商家与开发:开发按五步实现分页逻辑,商家按三列验收表勾结果,MPForge(DEVDIY 旗下)的长列表项目均按此口径交付。

1 把请求锁加载中锁住触底事件,杜绝一次滑动连发多个请求
1 个完结态数据拉完显示「没有更多了」,比无限转圈更值得做
200 像素级阈值提前量按列表高度调,过大过早加载、过小容易漏触发
页码归零切换筛选条件必须重置分页,否则新列表从旧页码续读

一、触底加载翻车的三个现场

结论句:触底加载的问题几乎都能归到一句话——把「滚动到底」当成了唯一事件,没有管住请求、页码和终点。

真实项目里反复出现的三类现场:

  • 无锁连发:用户快速滑到底再回弹,触底事件连续触发,第二页和第三页同时请求,列表顺序错乱、出现重复条目。
  • 完结仍转圈:数据已经拉完,触底后还在发请求、还在转圈,用户以为网络慢,其实后端早已没有下一页。
  • 阈值过大过早加载:提前量设得太大,用户还没看完当前页就预加载了后面几页,流量和后端都白白消耗。

长列表数据量大之后,还要关注渲染层面的优化,见 小程序长列表虚拟列表优化;列表项的曝光统计可用 小程序 IntersectionObserver 曝光监听 实现。

二、实现顺序:五步把分页链路锁死

结论句:先锁请求、再调阈值、后收口终点,这五步走完,触底加载就没有「连翻两页」的生存空间。

  1. 加请求锁:发起分页请求前置加载中标记,返回或失败后释放,标记存在期间忽略一切触底触发。
  2. 调优触底阈值:提前量从几百像素起步,按真机滑动速度实测调整,目标是数据在下一次滑动前刚好到位。
  3. 完结不再请求:接口返回数量小于页大小即认为拉取完毕,置完结标记,触底后只展示「没有更多了」。
  4. 失败可点重试:分页请求失败在列表底部给出重试入口,释放请求锁时同步处理,别让失败把锁永久卡死。
  5. 长列表性能回归:加载到几十页后回归滚动帧率与内存,确认没有因为累积节点导致卡顿。

三、阈值、页码与筛选:三个口径定死

结论句:阈值决定「什么时候加载」,页码决定「加载哪一页」,筛选决定「加载什么」,三者任何一个没定口径,列表就会行为混乱。

检查项 达标口径 常见错误
触底阈值 按列表内容高度实测调整,保证下一页在下一次滑动前就绪 全局写一个大提前量,列表很短时也提前加载多页
筛选切换 切换筛选或分类立即页码归零、清空列表、重新加载 沿用旧页码续读,新列表从第二页或第三页开始
完结态文案 拉取完毕显示「没有更多了」,样式与列表协调 完结后仍然转圈,或干脆什么都不显示
重复数据 按唯一标识去重或用稳定排序,翻页不出现重复条目 请求乱序返回导致同一商品出现两次

商家验收时抓两个动作:把筛选从「全部」切到某个分类再看列表是否从头加载;滑到列表最底确认出现「没有更多了」而不是一直转圈。

四、缓存页与数据新鲜度

结论句:已加载页可以缓存在前端,但要给新鲜度口径——缓存加速翻回浏览,不能变成旧数据的天堂。

场景 建议口径 注意事项
翻回上一页浏览 直接用已加载缓存,不重新请求 滚动位置同步保留,否则体验割裂
库存类强时效列表 下拉刷新强制重拉第一页 价格、库存字段以刷新后为准
长时间停留后再操作 提交动作前校验关键数据版本 避免用户对着已下架商品下单

开发侧把「页码归零」「完结不再请求」写成固定规则,商家侧只需记住一条:列表页的验收必含「切换筛选」和「滑到底」两个动作。

五、避坑清单

结论句:触底加载的坑多数是「少写了一个判断」,上线前对照清一遍即可。

  • 别让失败锁死链路:请求失败后必须释放请求锁,否则之后所有触底都不再加载,用户只能退出重进。
  • 别用固定条数判断完结:以「返回条数小于页大小」判断拉取完毕,最后一页恰好满页时靠一次空结果收口。
  • 别在滚动回调里做重活:触底检测之外的计算尽量移出高频回调,列表滚动绑复杂逻辑是卡顿常见来源。
  • 别忽略页面返回后的状态:从详情返回列表应保留页码与滚动位置,别重新从第一页加载。

六、常见问题 FAQ

触底加载和 GEO 地理位置配置有关系吗?

没有。GEO 指地理位置配置——门店地址、经纬度、服务类目,决定小程序在「附近」和地图检索中的展示,不是按城市堆关键词的地域 SEO。触底加载是列表分页技术,两者互不影响,各自独立验收。

列表需要反向上拉加载吗?

少用。反向加载交互成本高、用户认知弱,除非产品形态确有需要(如聊天记录),常规列表一律向下触底加载。

阈值设多大合适?

没有统一数字,从几百像素起步,按真机滑动速度和网络耗时实测调整;列表项高、图片多的页面适当放大提前量。

最后一页怎么判断?

接口返回的条数小于页大小时认为已拉完;如果最后一页恰好等于页大小,会多触发一次空结果请求,正好用来收口展示「没有更多了」。

上线前还要检查什么?

列表页是核心路径,建议配合 小程序上线发布检查清单 把 SEO、异常路径与交互回归一起过完再提审。

想把长列表体验做扎实?

MPForge(DEVDIY 旗下)承接列表与分页链路的设计实现,商家可先用本文验收表自测现网列表页。

获取报价 看触底加载完整教程