localforage优先使用indexeddb,不支持时自动降级到websql或localstorage;需显式配置driver数组确保降级顺序,用driver()验证实际驱动,并通过ready()和setdriver()处理失败兜底。

明确驱动加载顺序
localForage 默认按 IndexedDB → WebSQL → localStorage 的顺序尝试启用驱动。你不需要手动“切换”,只需显式声明偏好顺序即可确保行为可控:
- 推荐写法(兼顾兼容性与现代浏览器性能):
localforage.config({<br> driver: [localforage.INDEXEDDB, localforage.WEBSQL, localforage.LOCALSTORAGE],<br> name: "myAppDB",<br> version: 1<br>}); - 如果确定不支持 WebSQL(如新版 Safari 已弃用),可省略:
driver: [localforage.INDEXEDDB, localforage.LOCALSTORAGE] - 避免只写单个驱动(如
[localforage.INDEXEDDB]),否则在不支持的环境会直接报错,失去降级能力
验证当前生效的驱动
初始化后立刻检查实际使用的后端,避免“以为用了 IndexedDB,其实 fallback 到了 localStorage”:
- 调用
localforage.driver()获取当前驱动名(返回字符串如"asyncStorage"或"localStorageWrapper") - 配合
localforage.ready()确保初始化完成再读取:localforage.ready().then(() => {<br> console.log("当前驱动:", localforage.driver());<br>}); - 开发时可在控制台快速验证:
await localforage.ready(); localforage.driver()
处理初始化失败的兜底逻辑
即使配置了多驱动,某些极端情况(如隐私模式禁用 IndexedDB + WebSQL)仍可能初始化失败。这时需主动捕获并降级:
- 用
setDriver()显式重试更保守的组合:localforage.setDriver([localforage.LOCALSTORAGE])<br> .catch(err => console.warn("连 localStorage 都不可用,启用内存模拟")); - 更健壮的做法是封装一个初始化函数,带超时和回退策略:
async function initStorage() {<br> try { await localforage.ready(); }<br> catch { await localforage.setDriver([localforage.LOCALSTORAGE]); }<br>}
多实例场景下的驱动隔离
每个 createInstance() 实例可独立配置驱动,适合不同数据类型分层存储:
- 用户配置(小数据、高可靠性):
const userDB = localforage.createInstance({<br> name: "user_prefs",<br> driver: [localforage.INDEXEDDB, localforage.LOCALSTORAGE]<br>}); - 缓存数据(大数据、允许丢失):
const cacheDB = localforage.createInstance({<br> name: "api_cache",<br> driver: [localforage.INDEXEDDB] // 强制用 IndexedDB,不降级<br>}); - 注意:不同实例之间 driver 互不影响,但同名
name+ 同驱动会导致数据库共享










