uni-app app端缓存来源包括uni.setstorage、webview内核缓存、网络请求缓存(dns/http)、uts插件缓存及原生cookie/sqlite数据;仅清uni.removestorage无法彻底清除,需配合plus.cache.clear()和后端缓存策略控制。

uni-app App端缓存来源有哪些
uni-app 打包成 App 后,缓存不只来自 uni.setStorage,还包括 WebView 内核缓存、网络请求缓存(如 uni.request 的 DNS/HTTP 缓存)、插件层缓存(如 UTS 插件内建的内存或文件缓存),以及原生层可能保留的 Cookie 或 SQLite 数据。很多开发者只清 uni.removeStorage,结果发现「明明清了还是旧数据」——问题就出在这里。
清除 uni.setStorage 和 uni.setStorageSync 缓存
这是最常被操作的部分,但要注意两点:不能只清单个 key,也不能漏掉异步/同步混用场景。
- 清空全部本地存储:
uni.clearStorage(),它会删除所有uni.setStorage写入的数据,但不会影响uni.setStorageSync的同步写入(实际上二者底层共用同一存储区,clearStorage是全清) - 清指定 key:
uni.removeStorage({key: 'token'}),注意 key 必须完全匹配,大小写敏感 - 避免在 onLaunch 里无条件清缓存——用户退出再进 App 时,可能因清缓存导致登录态丢失
强制清理 WebView 缓存(App 端特有)
H5 页面在 App 内由 WebView 渲染,其缓存独立于 JS 层 Storage,必须调用原生能力。uni-app 提供了 plus.webview.getWebviewById + clearCache,但更可靠的是直接调用 plus.cache.clear():
if (uni.getSystemInfoSync().platform === 'app') {
const cache = uni.requireNativePlugin('plus.cache');
cache.clear(() => {
console.log('WebView 缓存已清');
});
}
⚠️ 注意:plus.cache.clear() 在 iOS 上会清空整个 WebView 缓存(含图片、脚本、样式),Android 表现一致;但它不清理 HTTP 协议层的磁盘缓存(如 OkHttp 缓存),这部分需后端配合禁用 Cache-Control 响应头。
网络请求缓存绕过与主动清理
uni.request 默认遵循 HTTP 缓存策略,尤其在 GET 请求中容易命中强缓存(Cache-Control: max-age=3600)。解决方式不是等缓存过期,而是从源头控制:
- 加时间戳参数防缓存:
url: '/api/user?_t=' + Date.now() - 设置请求 header:
header: {'Cache-Control': 'no-cache'}(部分 Android WebView 支持,iOS 效果有限) - 真要清网络层缓存?App 端没有公开 API 直接清理 OkHttp/CFNetwork 缓存,只能重启 WebView 或重装 App —— 所以更推荐服务端控制缓存策略
真正需要手动干预缓存的场景,往往卡在「WebView 缓存没清」或「Storage 清了但接口返回旧数据」,前者靠 plus.cache.clear(),后者得查服务端是否开了响应缓存或 CDN 缓存。











