Angular Service Worker,为脱机应用程序缓存API调用

Ced*_*Ced 4 javascript service-worker angular angular5 angular-service-worker

我正在尝试使服务工作者能够与API请求一起工作。我希望该应用离线运行,并具有以下配置:

    {
        "name": "api",
        "urls": ["https://x.com/**"],
        "cacheConfig": {
            "strategy": "performance",
            "maxSize": 20,
            "maxAge": "365d",
            "timeout": "5s"
        }
    }
Run Code Online (Sandbox Code Playgroud)

这是我离线时xhr标签的外观:

在此处输入图片说明

这是用户请求的内容:

在此处输入图片说明

如您所见,用户的API调用无法解析。

这是user在线时的响应:

在此处输入图片说明

Nad*_*lta 5

尝试这个:

  • 转到您的应用程序标签->清除存储->清除站点数据。
  • 从此更改您的DataGroups数组:

    {
        "name": "api",
        "urls": ["https://x.com/**"],
        "cacheConfig": {
            "strategy": "performance",
            "maxSize": 20,
            "maxAge": "365d",
            "timeout": "5s"
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)

对此:

"dataGroups": [
    {
      "name": "api-performance",
      "urls": [
        "/user" //<=========== I know you want all API calls to be cached, but try this first and see
      ],
      "cacheConfig": {
        "strategy": "performance",
        "maxSize": 100,
        "maxAge": "3d"
      }
    }
  ]
Run Code Online (Sandbox Code Playgroud)
  • 在中保存并构建您的应用PROD
  • 第一次访问该页面。
  • 禁用网络
  • 刷新页面

  • 谢谢 Nadhir - 我只想补充一件事。当我按原样添加您的文本时,PWA 在 localhost 上工作,但在 PROD 上没有。所以下一次,在构建之前,我将您的文本添加到 ngsw.json 文件中,构建将您的文本变成了... "dataGroups": [ { "name": "api-performance", "patterns": [ " \\/user" ], "strategy": "performance", "maxSize": 100, "maxAge": 518400000, "version": 1 }] ... 完美运行:) (2认同)

小智 -2

要离线处理 API 数据,您必须使用离线存储(即在初始 API 调用后将数据存储在 Web 浏览器中),最近我在我的应用程序中使用了 Local Forage。找到下面的链接:

https://github.com/Alorel/ngforage#types-and-polyfills

https://developers.google.com/web/fundamentals/instant-and-offline/web-storage/offline-for-pwa

  • 感谢您的回答,但我相信服务工作者能够自行缓存 API 调用,而不需要任何存储。所以这个问题是针对服务人员的 (3认同)