主题
缓存与数据刷新
了解系统各模块的缓存策略和数据刷新机制。
缓存概览
系统采用多层缓存机制,在保证数据实时性的同时提升页面加载速度。
| 缓存层级 | 说明 |
|---|---|
| 内存缓存 | 应用运行期间的快速缓存,关闭应用后失效 |
| 本地存储缓存 | 持久化到设备存储,支持 TTL 过期机制 |
| HTTP 请求缓存 | GET 请求响应缓存,减少重复网络请求 |
| CDN 缓存 | 静态资源通过 Cloudflare CDN 分发 |
工作台缓存策略
工作台首页是缓存策略最复杂的页面:
| 数据类型 | 缓存时间 | 刷新策略 |
|---|---|---|
| 主数据(待办、流程列表) | 5 分钟 | onShow 时判断是否超过 5 分钟,超过则刷新 |
| 常用流程 | 30 秒 | 独立缓存,确保从发起申请页返回时及时刷新 |
| 下拉刷新 | — | 强制刷新所有数据,不受缓存限制 |
刷新触发时机
- 页面 onShow:每次页面显示时检查缓存是否过期
- 下拉刷新:用户手动下拉,强制刷新所有数据
- 应用从后台恢复:监听
app-resume-refresh事件,仅在首页时刷新 - 常用流程更新:监听
common-func-updated事件,立即刷新 - 防抖机制:10 秒内不重复触发刷新
流程定义缓存
| 配置 | 值 |
|---|---|
| 缓存时间 | 5 分钟 |
| 缓存优先 | 未过期直接返回缓存数据 |
| 过期策略 | 自动刷新 |
| 强制刷新 | 调用 forceLoad() 忽略缓存 |
| 并发控制 | 防止同时发起多个请求 |
表单草稿缓存
填写审批表单时,系统会自动保存草稿:
| 配置 | 值 |
|---|---|
| 过期时间 | 24 小时 |
| 保存方式 | 500ms 防抖自动保存 |
| 存储范围 | 每个流程独立缓存 |
| 自动过滤 | 空值和系统字段(如 applyUserId) |
小贴士
- 表单草稿会在下次打开同一流程时自动恢复
- 草稿超过 24 小时会自动清除
- 提交成功后草稿会自动清除
HTTP 请求缓存
GET 请求的响应会自动缓存:
| 配置 | 值 |
|---|---|
| 缓存上限 | 100 条(LRU 淘汰) |
| 缓存键 | GET:{url}:{data} |
| 过期控制 | 通过 cacheTime 参数指定 |
| 适用范围 | 仅 GET 请求 |
基础数据缓存
通讯录、字典等基础数据采用内存 + 本地存储双层缓存:
| 数据类型 | 缓存时间 |
|---|---|
| 用户列表/树 | 1 小时 |
| 部门列表/树 | 1 小时 |
| 角色列表/树 | 1 小时 |
| 岗位列表/树 | 1 小时 |
| 区域字典树 | 1 小时 |
安全存储
本地存储的数据经过加密处理:
- 加密方式:XOR 加密 + Base64 编码
- 密钥:
OA_WORKSPACE_2024_SECURE_KEY - 存储选项:
{ encrypt?: boolean, expire?: number } - TTL 机制:
expire为毫秒数,0 表示永不过期,读取时自动检查过期并删除
静态资源缓存(CDN)
部署到 Cloudflare Pages 后,静态资源的缓存策略:
| 资源类型 | 缓存策略 |
|---|---|
index.html | 禁止缓存(no-cache, no-store) |
| 带 hash 的 JS/CSS | 30 天缓存 + immutable |
| 图片/字体 | 30 天缓存 + immutable |
version.json | 禁止缓存(供版本检测) |
数据不更新怎么办?
如果页面数据看起来不是最新的:
- 下拉刷新:在工作台首页下拉强制刷新
- 清除缓存:设置 → 清除缓存
- 重启应用:完全关闭应用后重新打开
- 检查网络:确保网络连接正常
小贴士
系统设计了合理的缓存策略,正常情况下数据会在缓存过期后自动刷新。只有在缓存异常或网络问题时才需要手动清除缓存。
