Angular 7 PWA Web存储选择



我正在使用Angular7创建PWA应用程序。我决定如何在本地存储一些数据并有两个选择:

  1. localstorage
  2. indexeddb

localstorage的优点是

  1. Syncronous
  2. 返回字符串

locstorages的缺点

  1. 服务工作人员无法访问LocalStorage
  2. 不安全

索引的优势是

  1. 比LocalStorage的存储空间更多
  2. 可以存储和检索对象
  3. 承诺基于

indexeddb的缺点

  1. Firefox私人会议中没有可用

现在要存储数据,如果我使用indexedDB,Firefox私人会议的用户将无法使用我的网站,如果我使用LocalStorage,我无法利用ServiceWorker。

您如何克服索引和localstorage的上述问题?

首先,了解 pwa p rogrescePP按定义必须支持所有浏览器,并且应具有本质上的渐进性,即根据浏览器的功能,应用程序必须调整并选择要利用用户的功能。

快速类比:

鱼缸中的鲨鱼会生长 7英寸,但在海洋中会生长 7 脚

  • 您的应用就像鲨鱼!

  • 鱼缸/海洋就像您的浏览器!

  • 鱼缸/海洋的资源是您的浏览器功能

无论是鱼缸还是海洋,鲨鱼仍然是鲨鱼(看起来像一个, 它捕食)。尺度/尺寸/容量/性能有什么不同(例如, 海洋中的鲨鱼有更大的牙齿,捕食更大的鱼)。

应用类比,您的应用程序设计不得仅依赖于数据库/存储(或任何其他浏览器功能)来渲染自己,但同时,如果浏览器的支持,它应该能够使用它们提供更好的用户体验。(意思是,即使某些怪异的浏览器不支持LocalStorage,PWA也应该工作 - 太多了!)

进一步详细说明,您的应用程序可以尝试在浏览器上使用索引DB,如果不是,则提供适当的后退机制(倒退本质上无需完全是本地存储!使成为)。IndexEdDB用于存储大量需要富含查询功能的数据,而LocalStorage类似于SessionStorage,即使您关闭窗口后仍然存在,通常用于存储一些键/值对。尝试使用一个是不正确的 - 它们是针对不同类型的数据集/用户的。

在简短中,在PWA上下文中,思考是错误的,请" indexeddb或local 存储?" ,但是要考虑要提供的经验 用户基于限制浏览器功能可供您使用。

祝你好运!!!

有趣的阅读不同浏览器上的可用存储选项 https://developers.google.com/web/fundamentals/instant-and-offline/web-storage/#comparison

只是在这种情况下的建议像这样检查PB ->

var db = indexeddb.open(" test");
db.onerror = function(){/ firefox pb启用/};
db.onccess = function(){/未启用/};

有关更多参考 ->检测浏览器是否使用私人浏览模式

最新更新