关键在于资源离线化、请求策略降级与本地状态兜底:静态资源打包成带版本和哈希的离线包,WebView拦截请求优先加载本地;接口数据读缓存、写入本地待同步;媒体资源分级加载;路由与交互适配离线状态。

移动端 H5 在弱网环境下保障核心流程可用,关键不是“等网络变好”,而是把最必要的东西提前存到用户手机里,并在运行时优先用本地的。核心思路是:资源离线化 + 请求策略降级 + 本地状态兜底。
静态资源打包成离线包并按版本管理
把 HTML、JS、CSS、关键图片等打包成 ZIP 或其他压缩格式,通过后台下发或预置方式下载到 WebView 的本地存储目录(如 Android 的 getFilesDir() 或 iOS 的 NSCachesDirectory)。重点在于:
- 构建时生成资源清单(Manifest),包含文件路径、哈希值和版本号,用于校验完整性与判断是否需要更新
- 首次加载时触发下载,成功后解压并记录版本;后续访问先比对本地版本与服务端版本,仅更新差异部分(增量更新)
- WebView 加载页面时,拦截请求(如通过 shouldInterceptRequest),命中离线包内的资源就直接返回本地文件流,不走网络
关键接口数据做本地缓存与离线写入
不能只缓静态页,业务逻辑依赖的接口响应也要有容错能力:
生成可在 deepbi 沙箱 iframe 内运行或作为独立文件运行的交互式 HTML 页面,使用 `window.deepbi` JS SDK 实现数据查询、空间管理、文件浏览及用户操作。当用户提出以下需求时启用该能力: - 创建 KPI 仪表盘、数据表格、文件浏览器、成员列表、管理页面; - 明确要求“转成 dhtml”、“转译成 HTML”、“把 XX 页面转成……”、“控制台页面”、“管理后台”、“DeepBI 页面迁移”; - 提及位于 `apps/console/src/featur
- 对读取类接口(如用户信息、商品列表),使用 Service Worker 或内存+磁盘双层缓存,设置合理过期时间(如 10 分钟),弱网时优先返回缓存数据并标记“已过期”提示
- 对写入类操作(如表单提交、下单),本地先存入 IndexedDB 或 SQLite,带状态标记(如 status: 'pending'),网络恢复后自动重试并同步结果
- 避免强依赖实时接口,比如地址选择可预埋常用城市列表,登录态校验可复用本地 token 并配合静默刷新机制
播放、图片、字体等媒体资源做分级加载与 fallback
弱网下最容易卡住的是大体积资源,需主动控制加载行为:
- 视频采用分片加载 + 预加载首帧,H.265 编码压缩体积,同时缓存已播片段;断网时允许继续播放已缓存内容
- 图片使用低质量占位图(LQIP)+ 渐进式加载,网络差时自动降级为 WebP 或 base64 内联小图
- 字体文件体积大,可内联关键字符集(如中文首屏所需汉字),非关键字体延迟加载或回退系统默认字体
前端路由与交互逻辑适配离线状态
页面跳转和用户操作不能因为网络失败就中断:
- 用 History API 管理路由,所有跳转都走前端路由,避免整页刷新导致资源重拉
- 按钮点击后立即给出反馈(如 loading 状态、本地模拟成功动效),而不是等接口返回才响应
- 提供明确的离线提示(如 toast “当前网络较弱,已使用本地数据”),并支持手动刷新或切换到精简模式










