Кэш манифеста рабочего сервиса - PullRequest
0 голосов
/ 19 апреля 2019

Я пытаюсь очистить кэши служб после развертывания нового приложения.Я использую http-сервер для развертывания на локальном хосте.У меня уже запущено угловое приложение, и мой сервисный работник зарегистрирован.Когда я изменяю некоторый код и повторно внедряю приложение, я вижу в кеш-памяти, что старый кеш все еще присутствует.В манифесте кеша я вижу массив файлов ngsw.json.Существует вкладка «последние», где хранится последний хэш.Приложение отображается с использованием последнего хеша манифеста, но иногда оно также отображается и с помощью более старых манифестов.Я не могу воспроизвести этот случай, но это случается очень редко.Через 10-15 минут манифест очищается, и в хранилище кэша присутствует только один хэш манифеста.Это происходит случайным образом без какой-либо согласованности.

Если я проверю «Обновить при перезагрузке» на вкладке «Работник службы», старые манифесты кэша будут немедленно очищены.Мне бы хотелось, чтобы старый кеш мгновенно удалялся работником службы угловых служб.

Вот так выглядит мой ngsw-config:

{
  "configVersion": 1,
  "index": "/index.html",
  "appData": ["/index.html", "/*.bundle.css", "/*.bundle.js", "/*.chunk.js"],
  "assetGroups": [
    {
      "name": "app",
      "installMode": "prefetch",
      "resources": {
        "files": ["/favicon.ico", "/index.html"],
        "versionedFiles": ["/*.bundle.css", "/*.bundle.js", "/*.chunk.js"]
      }
    },
    {
      "name": "assets",
      "installMode": "prefetch",
      "updateMode": "prefetch",
      "resources": {
        "files": ["/assets/**"]
      }
    }
  ]
}

И вот как я зарегистрировал его вapp.module.ts:

@NgModule({
  declarations: [AppComponent],
  imports: [
    BrowserModule,
    RouterModule,
    APP_ROUTING,
    ServiceWorkerModule.register('/ngsw-worker.js', {
      enabled: environment.production
    })
  ],
  providers: [],
  bootstrap: [AppComponent]
})

Вот так выглядит мой app.component.ts:

import { Component } from '@angular/core';
import { SwUpdate } from '@angular/service-worker';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  title = 'app';
  constructor(private updates: SwUpdate) {
    this.updates.available.subscribe((event: any) => {
      this.updates.activateUpdate().then(() => {
        document.location.reload(true);
      });
    });
  }

Вот так выглядит несколько манифестов в Cache Storage:

113eb2d75d6b2b62654822b31924678b90ee76e9: {configVersion: 1, index: "/index.html",…}..
23er43ertgvcx6751cvb8u8u9o0mnb6765098h76: {configVersion: 1, index: "/index.html",…}..
987ujvsskjfd56snsnf34flo3298fcdgnzx768z7: {configVersion: 1, index: "/index.html",…}..
343eb2d56d6b2b638493hh331664690f55ssz8j8: {configVersion: 1, index: "/index.html",…}..

И самый последний ключ чуть выше манифеста:

{ latest: "113eb2d75d6b2b62654822b31924678b90ee76e9" }

В Cache Storage должен быть только последний хэш, присутствующий в один момент времени.Как очистить старые кэши Манифеста и сохранить последний?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...