对于做3D WebGL 的开发者来说,加载大量的 hdr、glb、gltf 等文件往往是很令人头疼的,因为这些文件体积不小,在网络侧加载会消耗大量时间,从而影响用户体验。对于这些大文件,localstorage 和 sessionstorage 的缓存容量肯定是不够塞牙缝的。所以这时候我们要请出 IndexedDB。
IndexedDB 是一种可以让你在用户的浏览器内持久化存储数据的方法, 允许储存大量数据,提供查找接口,还能建立索引。 IndexedDB 的兼容性也还不错,基本上不兼容太老的浏览器,都还是可用的。
IndexedDB 不属于关系型数据库(不支持 SQL 查询语句),更接近 NoSQL 数据库,可以简单认为是一个基于事务操作的 key-value 型前端数据库。它的 API 大部分都是异步。IndexedDB 语法比较底层,所以可以使用一些基于 IndexedDB 封装的库来简化操作:
- localForage: 一个提供 name:value 的简单语法的客户端数据存储垫片(Polyfill),它基于 IndexedDB 实现,并在不持支 IndexedDB 的浏览器中自动回退只 WebSQL 和 localStorage。
- dexie.js: 对 IndexedDB 的封装,通过提供更友好和简单语法以进行快速的编码开发。
- ZangoDB: 一个类 MongoDB 的 IndexedDB 接口实现,提供了诸如过滤、投影、排序、更新和聚合等大多数 MongoDB 常见的特性。
- JsStore: 一个具备类 SQL 语法的简单和先进的 IndexedDB 封装实现。
关于 IndexedDB 的其他介绍和基本使用可以查看MDN、浏览器数据库 IndexedDB 入门教程、HTML5 indexedDB前端本地存储数据库实例教程,这里就不多介绍了。