Installations
npm install cache-digest-immutable
Developer Guide
Typescript
No
Module System
CommonJS
Node Version
7.2.0
NPM Version
3.10.9
Releases
Unable to fetch releases
Download Statistics
Total Downloads
2,425
Last Day
3
Last Week
5
Last Month
13
Last Year
90
Bundle Size
1.77 kB
Minified
846.00 B
Minified + Gzipped
Package Meta Information
Latest Version
1.0.1
Package Id
cache-digest-immutable@1.0.1
Size
7.05 kB
NPM Version
3.10.9
Node Version
7.2.0
Total Downloads
Cumulative downloads
Total Downloads
2,425
Last day
200%
3
Compared to previous day
Last week
-37.5%
5
Compared to previous week
Last month
1,200%
13
Compared to previous month
Last year
-53.1%
90
Compared to previous year
Daily Downloads
Weekly Downloads
Monthly Downloads
Yearly Downloads
📑 Cache Digest Immutable
Uses a service worker's fetch
event and Cache API to set the cache-digest
header. Webservers use this digest to check which files the client aleady has cached. This avoids server-pushing redundant data, providing atomic cache invalidation when used in combination with filename revving (aka cache busting).
As an explicit opt-in, to avoid overly aggressive caching, this implementation only includes, in the digest, responses that have the cache-control: immutable
extension set.
Usage
1if ('serviceWorker' in navigator) { 2 addEventListener('load', function () { 3 navigator.serviceWorker.register('cache-digest-immutable.js') 4 }, {once: true}) 5}
Note: This waits until everything else on the page has loaded. This is fine since the service worker only receives fetch
events on future page loads.
Server Support
- H2O - Successfully tested with v2.1.0-beta3 (see config)
- http2server - Future support expected, see #6
Specifications
- Cache Digests for HTTP/2
draft-kazuho-h2-cache-digest-01
- HTTP Immutable Responses
draft-mcmanus-immutable-00
Significant Decisions
- Written in ES2015+ which works fine as of Chrome 56 (Canary version at the time of starting this implementation).
- Uses
importScripts(...)
for native module loading within Service Workers. Not meant to be compatible with alternatives like CommonJS, ES2015 Modules (export
/import
), etc. - Only caches if
cache-control: immutable
extension is set. This makes it opt-in for server configurations and avoids overly aggressive caching. Also minimises the cache digest size to only contain assets that will be cached long-term, as opposed to short-term ephemeral resources that require revalidation. - Respects all caching directives by fully parsing the
date
/expires
/cache-control
headers (inclmax-age=N
/no-store
/no-cache
/must-revalidate
). - Manages cache by purging stale responses.
- Rewritten the URL value hashing code to use the browser's asynchronous SubtleCrypto API's SHA256 implementation.
- Rewritten the digest algo to closely follow the spec. Still uses the same (slightly tweaked) BitCoder implementation of Golomb coding.
- Memoises the digest to avoid recalculating on every single request. Huge performance improvement by throttling only one calculation per second.
- Rewrote Base64 encoding to use browser's native
btoa
function.
Related
- Unbundle - Originally developed for, and extracted from, this package.
- cache-digest.js - Passes the same test suite for guaranteed binary output compatibility.
Colophon
Made by Sebastiaan Deckers in Singapore 🇸🇬
No vulnerabilities found.
No security vulnerabilities found.