Pwa错误考虑api缓存而不是db?

Pwa wrong to consider api cache instead of db?

我正在构建一本特定的书 reader,例如应用程序。

主页调用 api/booksList 并接收包含每本书信息的 json 数组,例如:

[ {  id: server_db_id,  title: "title test",  sum: 10 , date: ... }
]

在请求后对其进行缓存,因此我不会将图书列表保存到 indexedDB、localStorage 或其他存储中。如果我需要一本特定的书,我只需再次调用 api 书单并过滤它。那是糟糕的设计吗? (本书将超过 200 项)

当用户打开这本书时,它会调用 /api/book/book_id 并缓存它,打开的书响应是一个 json 书行列表,例如:

[
 {  
  id: ...
  content: "This is line...lore ipsum..."
  ....
 }
]

我将 api 响应放在 vue 数据变量中,组件被正确渲染

我没有使用任何类型的处理程序来使它保持离线状态。为了检测用户是否已经打开这本书,我只是调用 api,检查是否发生错误或响应正文是否有内容。

这是一个错误、错误或愚蠢的决定吗?这会达到配额限制 api 或其他类型的限制吗? pwa的"gods"会对我竖起手指说:WAAAT。 (我一开始没有使用 indexedDB,因为它需要一些模型处理,如果可能的话,我想让事情变得更简单)

我自己正在研究这个并得出结论,目前我将采用这种方法,我使用 cache 资产,js, css, html 等基于他们的匹配路线。

然后说到数据,例如json 请求等。最好将它们存储在 indexedDB(或等效的)中,这实际上不需要模型或模式本身。

请参阅 Jake Archibald 的 IndexedDB-Promise 库https://github.com/jakearchibald/idb它真的很容易让你头脑清醒。

尽管 Jake 和 Addy 都表示这不是事实上的规则,因此您可以最终决定什么对您最有利。

阅读此内容以获得更好的说明

它帮助我更好地决定如何继续前进。

还有推荐

这里的指南非常擅长带您完成所需的一切。

祝你的 PWA 好运

随想(编辑)

尽管基于我看到的一些示例和指南,但让我质疑这一点的一件事是,数据存储是以更临时的方式处理的。例如,如果 PWA 调用 API,我遇到了两种方法,您可以在其中管理应用程序或服务工作者中的缓存数据,例如如果您的 API 调用获取 JSON 在应用程序中失败,它可以恢复为在 indexedDB 中获取数据,希望在您的应用程序第一次调用 API 时预缓存该数据。

或者您可以使用 self.addEventListener('fetch', (event) => { ad-hoc stuff here }) 这是您可以匹配资产或数据请求并使用缓存或 indexedDB 响应劫持响应的地方。这避免了在您的应用中处理离线数据的需要。

第一种方法让我感到不安,所以我将在服务工作者中使用 addEventListener 方法,因为这就是它的用途,而且我的应用程序不必担心这个。