항목을 캐시에 저장할 수 있는 기간 또는 캐시에 보관할 항목의 수를 기준으로 캐시에 제한을 적용하는 것이 일반적입니다. Workbox는 캐시의 항목 수를 제한하거나 오랫동안 캐시된 항목을 삭제할 수 있는 workbox-expiration 플러그인을 통해 이 기능을 제공합니다.
캐시 항목 수 제한
캐시에 저장되는 항목 수를 제한하려면 다음과 같이 maxEntries 옵션을 사용하면 됩니다.
import {registerRoute} from 'workbox-routing';
import {CacheFirst} from 'workbox-strategies';
import {ExpirationPlugin} from 'workbox-expiration';
registerRoute(
({request}) => request.destination === 'image',
new CacheFirst({
cacheName: 'image-cache',
plugins: [
new ExpirationPlugin({
maxEntries: 20,
}),
],
})
);
이렇게 하면 이 경로에 플러그인이 추가됩니다. 캐시된 응답이 사용되거나 새 요청이 캐시에 추가되면 플러그인은 구성된 캐시를 확인하고 캐시된 항목 수가 한도를 초과하지 않도록 합니다. 이 경우 가장 오래된 항목이 삭제됩니다.
캐시된 항목의 기간 제한
요청이 캐시되는 시간을 제한하려면 다음과 같이 maxAgeSeconds 옵션을 사용하여 최대 기간(초)을 정의하면 됩니다.
import {registerRoute} from 'workbox-routing';
import {CacheFirst} from 'workbox-strategies';
import {ExpirationPlugin} from 'workbox-expiration';
registerRoute(
({request}) => request.destination === 'image',
new CacheFirst({
cacheName: 'image-cache',
plugins: [
new ExpirationPlugin({
maxAgeSeconds: 24 * 60 * 60,
}),
],
})
);
플러그인은 각 요청 또는 캐시 업데이트 후에 항목을 확인하고 삭제합니다.
고급 사용
다른 Workbox 모듈과 별도로 만료 로직을 사용하려면 CacheExpiration 클래스를 사용하면 됩니다.
캐시에 제한사항을 적용하려면 다음과 같이 제어하려는 캐시의 CacheExpiration 인스턴스를 만듭니다.
import {CacheExpiration} from 'workbox-expiration';
const cacheName = 'my-cache';
const expirationManager = new CacheExpiration(cacheName, {
maxAgeSeconds: 24 * 60 * 60,
maxEntries: 20,
});
캐시된 항목을 업데이트할 때마다 updateTimestamp() 메서드를 호출하여 항목의 경과 시간을 업데이트해야 합니다.
await openCache.put(request, response);
await expirationManager.updateTimestamp(request.url);
그런 다음 항목 집합의 만료를 원할 때마다 expireEntries() 메서드를 호출하면 maxAgeSeconds 및 maxEntries 구성이 적용됩니다.
await expirationManager.expireEntries();
유형
CacheExpiration
CacheExpiration 클래스를 사용하면 Cache에 저장된 응답의 만료일 또는 수에 제한을 정의할 수 있습니다.
속성
-
생성자
void
새 CacheExpiration 인스턴스를 생성하려면
config속성 중 하나 이상을 제공해야 합니다.constructor함수는 다음과 같습니다.(cacheName: string, config?: CacheExpirationConfig) => {...}
-
cacheName
문자열
제한사항을 적용할 캐시의 이름입니다.
-
config
CacheExpirationConfig 선택사항
-
returns
-
-
delete
void
캐시 만료 메타데이터를 추적하는 데 사용되는 IndexedDB 객체 저장소를 삭제합니다.
delete함수는 다음과 같습니다.() => {...}-
returns
Promise<void>
-
-
expireEntries
void
지정된 캐시 및 지정된 기준의 항목을 만료합니다.
expireEntries함수는 다음과 같습니다.() => {...}-
returns
Promise<void>
-
-
isURLExpired
void
URL을 사용하기 전에 만료되었는지 확인하는 데 사용할 수 있습니다.
이렇게 하려면 IndexedDB에서 조회해야 하므로 느릴 수 있습니다.
참고: 이 메서드는 캐시된 항목을 삭제하지 않습니다.
expireEntries()를 호출하여 indexedDB 및 Cache 항목을 삭제하세요.isURLExpired함수는 다음과 같습니다.(url: string) => {...}
-
URL
문자열
-
returns
Promise<boolean>
-
-
updateTimestamp
void
지정된 URL의 타임스탬프를 업데이트합니다. 이렇게 하면 최대 항목을 기준으로 항목을 삭제할 때 가장 최근에 사용된 항목이 정확하거나 만료될 때 타임스탬프가 최신 상태가 됩니다.
updateTimestamp함수는 다음과 같습니다.(url: string) => {...}
-
URL
문자열
-
returns
Promise<void>
-
ExpirationPlugin
이 플러그인은 workbox-strategy에서 캐시된 요청의 기간 또는 수에 대한 제한을 정기적으로 적용하는 데 사용할 수 있습니다.
맞춤 cacheName 속성이 설정된 workbox-strategy 인스턴스에서만 사용할 수 있습니다.
즉, 기본 런타임 캐시 이름을 사용하는 전략의 항목을 만료하는 데 사용할 수 없습니다.
캐시된 응답이 사용되거나 업데이트될 때마다 이 플러그인은 연결된 캐시를 확인하고 오래된 응답이나 추가 응답을 삭제합니다.
maxAgeSeconds를 사용하면 캐시된 응답이 사용된 후에 만료 정리가 실행되므로 만료 후 응답이 한 번 사용될 수 있습니다. 응답에 '날짜' 헤더가 있는 경우 경량 만료 확인이 실행되고 응답이 즉시 사용되지 않습니다.
maxEntries를 사용하면 가장 최근에 요청되지 않은 항목이 먼저 캐시에서 삭제됩니다.
속성
-
생성자
void
constructor함수는 다음과 같습니다.(config?: ExpirationPluginOptions) => {...}
-
config
-
returns
-
-
deleteCacheAndMetadata
void
다음 두 가지 작업을 실행하는 도우미 메서드입니다.
- 대신 caches.delete()를 호출하여 이 플러그인 인스턴스와 연결된 기본 캐시 인스턴스를 모두 삭제합니다.
- 각 캐시 인스턴스의 만료 세부정보를 추적하는 데 사용되는 IndexedDB의 메타데이터를 삭제합니다.
캐시 만료를 사용하는 경우 이 메서드를 호출하는 것이
caches.delete()를 직접 호출하는 것보다 좋습니다. 이렇게 하면 IndexedDB 메타데이터도 완전히 삭제되고 열려 있는 IndexedDB 인스턴스가 삭제되기 때문입니다.특정 캐시에서 캐시 만료를 사용하지 않는 경우
caches.delete()를 호출하고 캐시 이름을 전달하면 됩니다. 이 경우 삭제에 필요한 Workbox별 메서드는 없습니다.deleteCacheAndMetadata함수는 다음과 같습니다.() => {...}-
returns
Promise<void>
ExpirationPluginOptions
속성
-
matchOptions
CacheQueryOptions 선택사항
-
maxAgeSeconds
번호 선택사항
-
maxEntries
번호 선택사항
-
purgeOnQuotaError
불리언 선택사항