数据同步与离线行为
Novora 的后台编辑不用手动点保存,改动会自动进入同步流程。理解这个过程,能避免「我明明改了但大屏没变」和「刷新后数据回去了」这两类最常见的困惑。
一次修改经历了什么
text
你在后台改了内容
|
v
浏览器先记住改动(本地待同步队列)
|
v
页面上出现「正在同步」
|
v
请求发到服务端,带上版本号
|
+-- 版本一致 -> 写入数据库 -> 显示「已保存」
|
+-- 版本不一致 -> 触发冲突处理(见下文)关键点:本地先记录,再上传。所以页面显示的内容会比你想象的更早稳定下来,但只有显示「已保存」才代表云端真的写成功了。
三种状态分别是什么意思
| 状态 | 含义 | 这时候能关页面吗 |
|---|---|---|
| 正在同步 | 改动已在本地记录,正在发往服务端 | 可以关,但下次打开会继续重试 |
| 已保存 | 服务端已确认写入数据库 | 可以,数据已经安全 |
| 同步失败 | 请求没成功,改动仍在本地队列里 | 先别关,按提示处理 |
只要不是「已保存」,都不要假设改动已经生效。发布考试或上课前,务必确认看到「已保存」。
断网时会怎样
断网后继续编辑是允许的,改动会留在本地待同步队列里。恢复网络后系统会自动重试上传,你也可以手动刷新一次页面触发同步。
| 场景 | 表现 |
|---|---|
| 编辑时断网 | 显示同步失败或持续「正在同步」 |
| 断网期间继续编辑 | 改动继续进本地队列,不丢 |
| 恢复网络 | 自动重试,成功后显示「已保存」 |
| 断网期间关闭页面 | 下次在同一浏览器打开时会继续尝试 |
离线数据只属于这台设备
待同步队列保存在当前浏览器的本地存储里。换电脑、换浏览器、清除站点数据都会丢掉尚未同步的改动。
所以:离线可以编辑,但不要在没同步成功前换设备或清缓存。
两台设备同时修改同一场考试
服务端用版本号判断内容是否被别的设备改过:
- 版本一致,直接写入;
- 版本不一致,说明你打开页面之后别处已经改过,系统不会盲目覆盖,而是提示冲突。
text
设备 A 打开考试(版本 5)
设备 B 打开考试(版本 5)
设备 B 改了时间并保存 -> 版本变成 6
设备 A 也改了时间并保存 -> 版本还是 5,与云端 6 不一致
|
v
系统提示冲突,让你先看最新内容再决定处理原则:先看到底哪一处改动更重要,再决定保留哪一版。不要连续点击保存试图「压」过去。
怎么减少冲突
- 按模块分工:年级管理员管本年级考试,班级管理员管本班周测;
- 同一场考试尽量避免两人同时改;
- 改完确认看到「已保存」再交给别人;
- 大范围调整(例如批量改周测)安排在非高峰时段。
为什么大屏没立刻变
大屏不是实时推送,而是按自己的节奏同步:
| 设备 | 同步节奏 |
|---|---|
| 教室大屏 | 考试进行中或临近时每 30 秒,其余时间每 60 秒 |
| ClassIsland 插件 | 每 30 秒同步一次 |
后台显示「已保存」后,大屏可能还要等一会儿。考试开始前请预留几分钟,不要卡着打铃时间改。
清除浏览器缓存会丢什么
| 内容 | 会丢吗 | 说明 |
|---|---|---|
| 考试、周测、学校结构、用户 | 不会 | 都在数据库里 |
| 当前设备绑定的班级 | 会丢 | 需要回首页重新选择 |
| 大屏设计与字体偏好 | 会丢 | 需要重新设置 |
| 尚未同步成功的改动 | 会丢 | 这是唯一真正有风险的情况 |
清缓存前先确认没有待同步内容:所有编辑都已经显示「已保存」。
数据是怎么流动的
text
浏览器编辑
|
v
服务端接口(校验权限、版本、数据格式)
|
v
数据库(唯一权威数据源)
|
+--> 教室大屏读取
+--> ClassIsland 插件读取
+--> 安排预览与 PDF 生成数据库是唯一权威来源。大屏、插件和 PDF 都是它的读取方,不会各自保存一份独立数据。
考试记录(V2.8.0 新增)是数据库内部从考试数据自动派生的一份投影,可以随时重建,不构成第二个数据源。