SuperAPI AI 工具集

offline-sync

设计与创作

查看项目

更新于 10-16 09:50

技能介绍

用途:为跨 Web、移动端、桌面端的应用设计离线优先同步机制,适合在添加离线支持或规划同步架构时使用。

冲突解决:需按数据类型选定一种策略——最后写入获胜(LWW,适用于设置、个人资料字段)、服务端优先(库存、余额,服务端权威)、客户端优先(纯本地草稿、偏好,不共享)、字段级合并(文档,非重叠字段合并、冲突标记)、CRDT(Yjs、Automerge,协作文本、集合、计数器,合并有保证但复杂度高)。实现前应以书面形式按集合定义策略,之后更改需要数据迁移。

同步协议:每次写入分配逻辑时钟(Lamport 或混合逻辑时钟),仅用挂钟时间不够——时钟会漂移或回退。采用增量同步:客户端发送 {since: lastSyncedCursor},服务端只返回该游标之后的变更,初次加载后不应做全表同步。使用墓碑(tombstone)软删除并记录 deletedAt,在所有客户端同步过该版本前不得硬删除。同步游标由服务端生成、不透明,按集合存储在客户端,下次同步时续用。

本地存储:Web 用 IndexedDB;iOS/macOS 用 Core Data、SQLite(GRDB)或 Realm;Android 用 Room(SQLite)或 Realm;Electron/Tauri 用 better-sqlite3 或 rusqlite 的 SQLite;跨平台可选 WatermelonDB(RN + Web)、PowerSync、Realm。

乐观 UI:本地立即应用变更,后台携带客户端生成的幂等键同步;成功时若服务端有差异则对账;失败须暴露错误,绝不静默丢弃用户编辑。

后台同步:Web 用 Background Sync API(Service Worker);iOS 用 BGProcessingTask / BGAppRefreshTask(不保证执行,前台同步为主);Android 用带网络约束的 WorkManager;桌面用 setInterval 加 navigator.onLine 或系统连通性事件。

测试:断网中途禁用网络、应用本地变更后重连,断言服务端状态一致;两个客户端离线并发编辑后重连,断言最终状态符合冲突策略;A 客户端删除时 B 离线,重连后断言 B 看到删除;发送过期、未来或格式错误的游标,断言安全报错或重置。

限制与约束:不得仅用挂钟时间作为冲突仲裁;在所有客户端推进到删除游标之后前,不得硬删除已同步记录;敏感字段应启用 TLS 与字段级加密。资料未提供具体收费、价格或性能数据。