最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 译|如何在浏览器上使用 NoSQL 数据库 IndexedDB

    正文概述 掘金(Zz招锦)   2021-02-19   566

    译|如何在浏览器上使用 NoSQL 数据库 IndexedDB

    你听说过浏览器上的 NoSQL 数据库吗?

    你可以在下面找到 IndexedDB 的示例。 译|如何在浏览器上使用 NoSQL 数据库 IndexedDB

    在本文中,我们将重点介绍以下内容:

    • 为什么我们需要 IndexedDB
    • 如何在应用程序中使用 IndexedDB
    • IndexedDB 的功能
    • IndexedDB 的局限
    • IndexedDB 是否适合你的应用程序

    为什么我们需要 IndexedDB

    你知道背后的原因吗?让我们一起找出答案。

    • 可以存储比本地存储(localStorage)大得多的数据量

    IndexedDB 没有像本地存储(localStorage)那样的特殊存储限制(介于 2.5MB 和 10MB 之间)。IndexedDB 存储的最大限制取决于浏览器和磁盘空间。例如,Chrome 和基于 Chromium 的浏览器最多允许 80% 的磁盘空间可供使用。如果你有 100GB,则 IndexedDB 最多可以使用 80GB 的空间,单个来源最多可以使用 60GB。 Firefox 允许每个来源最多 2GB,而 Safari 允许每个来源最多 1GB。

    • 可以存储基于键值对 { key: value } 的任意类型值

    IndexedDB 存储不同数据类型的灵活性更高。支持的数据类型不仅包括字符串类型,还包括二进制数据(ArrayBuffer 对象、Blob 对象等)。而 IndexedDB 在内部使用对象存储来保存数据。

    • 提供查找接口

    这个功能在其他浏览器存储选项(如本地存储 localStorage 和会话存储 sessionStorage)中都没有。

    • 对于不需要持续联网的 Web 应用程序很有用

    IndexedDB 对于在线和离线工作的应用程序都非常有用。例如,它可以用于渐进式 Web 应用程序(PWA)中的客户端存储。

    • 可以存储应用状态

    通过为频繁使用的用户存储应用程序状态,可以大幅提高应用程序的性能,让应用程序可以在后续与后端服务器同步,并通过懒加载来更新应用程序。

    让我们看一下可以存储多个数据库的 IndexedDB 结构。

    IndexedDB 结构

    译|如何在浏览器上使用 NoSQL 数据库 IndexedDB

    如何在应用程序中使用 IndexedDB

    在以下内容中,我们将探讨如何在应用程序中使用 IndexedDB。

    1. 使用 window.indexedDB 打开数据库连接

    const openingRequest = indexedDB.open('UserDB', 1);
    

    在这里,UserDB 是数据库名称,1 是数据库的版本。这将返回一个对象,该对象是 IDBOpenDBRequest 接口的实例。

    2. 创建对象存储

    开启数据库连接后,将触发 onupgradeneeded 事件,该事件可用于创建对象存储。

    // 创建 UserDetails 对象存储和索引
    
    request.onupgradeneeded = (event) => {
         let db = event.target.result;
    
         // 创建 UserDetails 对象存储 
         // 具有自动递增 id
         let store = db.createObjectStore('UserDetails', {
             autoIncrement: true
         });
    
         // 在 NIC 属性上创建索引
         let index = store.createIndex('nic', 'nic', {
             unique: true
         });
     };
    

    3. 将数据插入对象存储

    只要开启数据库连接,就可以在 onsuccess 事件处理程序中管理数据。插入数据分四步进行。

    function insertUser(db, user) {
        // 创建新的事务
        const txn = db.transaction('User', 'readwrite');
    
        // 获取 UserDetails 对象存储
        const store = txn.objectStore('UserDetails');
    
        // 插入新记录
        let query = store.put(user);
    
        // 处理成功案例
        query.onsuccess = function (event) {
            console.log(event);
        };
    
        // 处理错误案例
        query.onerror = function (event) {
            console.log(event.target.errorCode);
        }
    
        // 事务结束后关闭数据库
        txn.oncomplete = function () {
            db.close();
        };
    }
    

    创建插入函数后,可以使用请求的 onsuccess 事件处理程序插入更多记录。

    request.onsuccess = (event) => {
       const db = event.target.result;
    
       insertUser(db, {
         email: 'john.doe@outlook.com',
         firstName: 'John',
         lastName: 'Doe',
       });
    
       insertUser(db, {
         email: 'ann.doe@gmail.com',
         firstName: 'Ann',
         lastName: 'Doe'
       });
    };
    

    可以在 IndexedDB 上执行很多操作。包括下面这些:

    • 通过键(key)从对象存储中读取或查找数据
    • 通过索引(index)从对象存储中读取或查找数据
    • 更新记录的数据
    • 删除一条记录
    • 从旧版本的数据库迁移等

    如果你需要关于如何实现上述操作的资料,请在下方评论区告诉我。你也可以参考这里获得更多信息。

    IndexedDB 的功能

    IndexedDB 提供了许多其它浏览器存储无法实现的特殊功能。下面简要说明一些功能。

    • 具有异步 API

    这样就可以在不阻塞 UI 线程的情况下执行高代价的操作,并为用户提供更好的体验。

    • 支持可靠性事务

    如果其中一个步骤失败,事务将被取消,数据库将回滚到以前的状态。

    • 支持版本控制

    你可以在创建数据库时对其进行版本控制,并在需要时对其进行升级。在 IndexedDB 中也可以从旧版本迁移到新版本。

    • 支持私有域

    数据库是私有域,因此任何站点都不能访问其它网站的 IndexedDB 存储。这也称为同源策略

    IndexedDB 的局限

    到目前为止,IndexedDB 似乎很有希望用于客户端存储。然而,有几个限制值得注意。

    • 虽然现代浏览器支持 IndexedDB,但是 IE 等浏览器却没有完全支持。

    译|如何在浏览器上使用 NoSQL 数据库 IndexedDB

    • IndexedDB 在 Firefox 的无痕浏览模式下是完全禁用的 —— 通过隐身窗口访问应用程序时,接口无法使用可能导致应用程序出现故障。

    IndexedDB 是否适合你的应用程序

    考虑到 IndexedDB 提供的诸多特性,这个百万美元问题(译者注:指至关重要的问题)答案可能是 Yes!然而,在得出结论之前,先问自己以下几个问题。

    • 你的应用程序需要离线访问吗?
    • 是否需要在客户端存储大量数据?
    • 是否需要在大量数据中快速定位或查找数据?
    • 应用程序是否使用 IndexedDB 支持的浏览器访问客户端存储?
    • 需要存储包括 JavaScript 对象在内的各种类型的数据吗?
    • 从客户端存储中写入或读取数据需要是非阻塞的吗?

    如果以上所有问题的答案都是肯定的,那么 IndexedDB 是你的最佳选择。但是,如果不需要这样的功能,你也可以选择本地存储(localStorage),因为它提供了大多数浏览器采用和易于使用的应用编程接口(API)。

    总结

    当我们考虑所有客户端存储机制时,IndexedDB 显然是胜出者。让我们来看一下不同客户端存储方法的总结比较。 译|如何在浏览器上使用 NoSQL 数据库 IndexedDB

    希望你对 IndexedDB 及其特性有一个清晰的认识。也让我们知道你的想法。



    起源地下载网 » 译|如何在浏览器上使用 NoSQL 数据库 IndexedDB

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元