如何用 cursor.continue 实现本地海量数据的分页查询加载
cursor.continue()实现分页的核心是游标递进定位而非跳过前N条,通过lastKey参数seek到指定键或更大键的下一条记录,配合索引顺序(如倒序)实现高效“下一页”加载,避免循环调用导致性能问题。用 cursor.continue() 实现本地海量数据的分页查询加载,核心是利用 IndexedDB 的游标(cursor)遍历能力,配合游标定位和分页控制,避免一次性读取全部数据导致内存溢出或卡顿。关键不在“跳过前 N 条”,而在于“从某条记录开始继续遍历”。理解 cursor.continue() 的本质作用cursor.continue(key) 不是“跳过前 N 条”,而是让当前游标移动到键值 ≥ key 的下一条记录(按索引顺序)。若不传参,就移动到下一条;若传入具体 key,则“seek”到该 key 或第一个大于它的记录。这意味着:它天然适合“下一页”加载,但不适合传统 SQL 的 OFFSET 式跳页(比如直接跳到第 10000 页)。分页必须是**连续、递进式**的。实现“下一页”加载的典型流程以按时间倒序展示日志为例(索引为 timestamp,降序):首次查询:用 openCursor(null, 'prev') 打开倒序游标,取前 20 条,并记下最后一条的 timestamp(即最小时间戳) 加载下一页:调用 cursor.continue(lastTimestamp),游标会定位到 timestamp ≤ lastTimestamp 的下一条(因是降序,实际是更早的一条) 重复取 20 条,更新 lastTimestamp,继续调用 continue()?? 注意:如果存在相同 timestamp 的多条记录,需额外用主键(如 id)做二级排序或去重处理,否则可能漏数据或重复。 Loki.Build AI原生网站构建工具
