我正在使用Angular7创建PWA应用程序。我决定如何在本地存储一些数据并有两个选择:
- localstorage
- indexeddb
localstorage的优点是
- Syncronous
- 返回字符串
locstorages的缺点
- 服务工作人员无法访问LocalStorage
- 不安全
索引的优势是
- 比LocalStorage的存储空间更多
- 可以存储和检索对象
- 承诺基于
indexeddb的缺点
- 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(){/未启用/};
有关更多参考 ->检测浏览器是否使用私人浏览模式