我正在使用Angular 7创建PWA应用程序。我正在决定如何在本地存储一些数据,并且有两种选择:
本地存储的优势是
机车的劣势
IndexedDB的优点是
IndexedDB的缺点
如果使用IndexedDB,则现在可以存储数据,Firefox专用会话中的用户将无法使用我的网站,如果使用本地存储,则无法利用ServiceWorker。
您如何克服IndexedDB和LocalStorage的上述问题?
答案 0 :(得分:1)
首先,请理解,按定义 PWA 或 P 渐进 W eb A pp必须支持所有浏览器和本质上应该是渐进式的,即,取决于浏览器的功能,应用必须适应并选择要利用的功能才能使用户兴高采烈。
快速类比:
鱼缸中的鲨鱼会长 7英寸,但在海洋中它将长大 7英尺以上。
您的应用就像是鲨鱼!
鱼缸/海洋就像您的浏览器一样!
鱼缸/海洋资源是您的浏览器功能
无论是鱼缸还是海洋,鲨鱼仍然是鲨鱼(看起来像鲨鱼, 它捕食)。不同之处在于规模/规模/容量/性能(例如, 海洋中的鲨鱼牙齿更大,猎物也更大。
应用类推,您的应用程序设计一定不能完全依赖数据库/存储(或任何其他浏览器功能)来呈现自己,但同时,如果浏览器支持,它应该能够使用它们,以便提供更好的用户体验。 (这意味着,即使某些奇怪的浏览器不支持localStorage,PWA也应起作用-太多了!)
进一步说明,您的应用程序可以尝试在浏览器上使用IndexedDB,如果没有,则提供适当的回退机制(回退基本上不需要本地存储,但也许很简单)呈现)。 IndexedDB用于存储需要丰富查询能力的大量数据,而localStorage与sessionStorage类似,即使关闭窗口后,该存储仍然存在,通常意味着存储一些键/值对。尝试使用一种是不正确的-它们用于不同类型的数据集/用例。
简而言之,在PWA环境中,认为“ IndexedDB或Local 存储空间?” ,但要考虑要提供什么体验 限制浏览器功能的用户。
PWA祝您好运!
有趣的阅读,在不同的浏览器上可用的存储选项 https://developers.google.com/web/fundamentals/instant-and-offline/web-storage/#comparison
答案 1 :(得分:0)
在这种情况下,只是一个建议,为什么您可以检查用户是否处于私人浏览状态,然后再使用本地存储。
像这样检查PB->
var db = indexedDB.open(“ test”);
db.onerror = function(){/ 已启用Firefox PB /};
db.onsuccess = function(){/ 未启用 /};
更多参考-> Detecting if a browser is using Private Browsing mode