Improve caching; allow using stale cache for longer on network error
This commit is contained in:
parent
4dc77897e9
commit
5b99ba2937
|
@ -32,12 +32,23 @@ function devMapper(file, type, data) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const STATIC_MAX_AGE = 10 * 60; // 10 minutes
|
const STATIC_CACHE = {
|
||||||
const RENDER_MAX_AGE = 60 * 60 * 24 * 7; // 1 week
|
maxAgeSeconds: 10 * 60, // 10 minutes
|
||||||
|
staleSeconds: 60 * 60 * 24 * 365, // 1 year
|
||||||
|
};
|
||||||
|
const RENDER_CACHE = {
|
||||||
|
immutable: true,
|
||||||
|
maxAgeSeconds: 60 * 60 * 24 * 30, // 1 month
|
||||||
|
staleSeconds: 60 * 60 * 24 * 365, // 1 year
|
||||||
|
};
|
||||||
|
const PREVIEW_CACHE = {
|
||||||
|
maxAgeSeconds: 60 * 60, // 1 hour
|
||||||
|
staleSeconds: 60 * 60 * 24, // 1 day
|
||||||
|
};
|
||||||
const SKETCH_CSS_SHA = 'sha256-s7UPtBgvov5WNF9C1DlTZDpqwLgEmfiWha5a5p/Zn7E=';
|
const SKETCH_CSS_SHA = 'sha256-s7UPtBgvov5WNF9C1DlTZDpqwLgEmfiWha5a5p/Zn7E=';
|
||||||
|
|
||||||
const statics = new StaticRequestHandler('')
|
const statics = new StaticRequestHandler('')
|
||||||
.setCacheMaxAge(DEV ? 0 : STATIC_MAX_AGE)
|
.setCache(DEV ? {} : STATIC_CACHE)
|
||||||
.addHeader('Content-Security-Policy', [
|
.addHeader('Content-Security-Policy', [
|
||||||
'base-uri \'self\'',
|
'base-uri \'self\'',
|
||||||
'default-src \'none\'',
|
'default-src \'none\'',
|
||||||
|
@ -86,7 +97,7 @@ if(DEV) {
|
||||||
}
|
}
|
||||||
|
|
||||||
const render = new RenderRequestHandler('/render')
|
const render = new RenderRequestHandler('/render')
|
||||||
.setCacheMaxAge(DEV ? 0 : RENDER_MAX_AGE)
|
.setCache(DEV ? {} : RENDER_CACHE)
|
||||||
.setCrossOrigin(true)
|
.setCrossOrigin(true)
|
||||||
.addHeader('Content-Security-Policy', [
|
.addHeader('Content-Security-Policy', [
|
||||||
'base-uri \'self\'',
|
'base-uri \'self\'',
|
||||||
|
@ -99,7 +110,7 @@ const render = new RenderRequestHandler('/render')
|
||||||
.addHeader('X-Content-Type-Options', 'nosniff');
|
.addHeader('X-Content-Type-Options', 'nosniff');
|
||||||
|
|
||||||
const preview = new PreviewRequestHandler('/preview')
|
const preview = new PreviewRequestHandler('/preview')
|
||||||
.setCacheMaxAge(DEV ? 0 : RENDER_MAX_AGE)
|
.setCache(DEV ? {} : PREVIEW_CACHE)
|
||||||
.addHeader('Content-Security-Policy', [
|
.addHeader('Content-Security-Policy', [
|
||||||
'base-uri \'self\'',
|
'base-uri \'self\'',
|
||||||
'default-src \'none\'',
|
'default-src \'none\'',
|
||||||
|
|
|
@ -4,13 +4,17 @@ class RequestHandler {
|
||||||
this.matcher = matcher;
|
this.matcher = matcher;
|
||||||
this.handleFn = handleFn;
|
this.handleFn = handleFn;
|
||||||
this.cacheMaxAge = 0;
|
this.cacheMaxAge = 0;
|
||||||
|
this.cacheStale = 0;
|
||||||
|
this.immutable = false;
|
||||||
this.allowAllOrigins = false;
|
this.allowAllOrigins = false;
|
||||||
this.staticHeaders = [];
|
this.staticHeaders = [];
|
||||||
this.info = `Custom handler at ${this.method} ${this.matcher}`;
|
this.info = `Custom handler at ${this.method} ${this.matcher}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
setCacheMaxAge(seconds) {
|
setCache({ maxAgeSeconds = 0, staleSeconds = 0, immutable = false }) {
|
||||||
this.cacheMaxAge = seconds;
|
this.cacheMaxAge = maxAgeSeconds;
|
||||||
|
this.cacheStale = staleSeconds;
|
||||||
|
this.immutable = immutable;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,7 +35,9 @@ class RequestHandler {
|
||||||
if(this.cacheMaxAge > 0) {
|
if(this.cacheMaxAge > 0) {
|
||||||
res.setHeader(
|
res.setHeader(
|
||||||
'Cache-Control',
|
'Cache-Control',
|
||||||
`public, max-age=${this.cacheMaxAge}`
|
`public, max-age=${this.cacheMaxAge}` +
|
||||||
|
(this.cacheStale ? `, stale-if-error=${this.cacheStale}` : '') +
|
||||||
|
(this.immutable ? ', immutable' : '')
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
for(const header of this.staticHeaders) {
|
for(const header of this.staticHeaders) {
|
||||||
|
|
Loading…
Reference in New Issue