Angular 7 PWA Web存储选择

时间:2019-03-08 05:27:43

标签: angular local-storage progressive-web-apps indexeddb

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

  1. LocalStorage
  2. IndexedDB

本地存储的优势是

  1. 同步的
  2. 返回字符串

机车的劣势

  1. ServiceWorker无法访问本地存储
  2. 不安全

IndexedDB的优点是

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

IndexedDB的缺点

  1. 在Firefox私人会话中不可用

如果使用IndexedDB,则现在可以存储数据,Firefox专用会话中的用户将无法使用我的网站,如果使用本地存储,则无法利用ServiceWorker。

您如何克服IndexedDB和LocalStorage的上述问题?

2 个答案:

答案 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