mead-plugin-result-cache
Caches the result of transformations. Pluggable storage implementation.
Installation
npm install --save mead-plugin-result-cache
Usage
Your mead configuration file (mead --config <path-to-config.js>
):
const resultCache = require('mead-plugin-result-cache')
module.exports = {
// Load the plugin and specify configuration
plugins: [
resultCache({
storage: inMemoryStorage,
logger: console
})
]
}
Storage adapters
The storage
takes an object with a read
and a write
function, each of which returns a promise.
A super-naive, in-memory implementation of this pattern (which should obviously never ever be used) looks something like this:
const cache = {}
const read = ({urlPath, paramsHash}) => {
const cacheKey = `${urlPath}-${paramsHash}`
return cache[cacheKey]
}
const write = ({urlPath, paramsHash, headers, body}) => {
const cacheKey = `${urlPath}-${paramsHash}`
cache[cacheKey] = {headers, body}
return true
}
read(options)
Receives an options object containing the following properties:
-
urlPath
- Request path without query string./foo/bar.jpg?w=200
would seturlPath
tofoo/bar.jpg
. -
paramsHash
- A hashed value of the sorted query parameters -
queryParams
- The query parameters used to transform this image
Returns a promise (or a plain value) which resolves to an object containing:
-
headers
- HTTP headers for the response -
body
- Body of the response. Can be either aBuffer
or aReadableStream
.
If the promise is resolved with a falsey value, a cache miss is inferred and will trigger normal resizing. Rejected promises are logged using the passed logger
.
write(options)
Receives an options object containing the following properties:
-
urlPath
- Request path without query string./foo/bar.jpg?w=200
would seturlPath
tofoo/bar.jpg
. -
paramsHash
- A hashed value of the sorted query parameters -
queryParams
- The query parameters used to transform this image -
headers
- HTTP headers for the response -
body
- Body of the response, as aBuffer
.
Returns a promise, return value is not used. Rejected promises are logged using the passed logger
.
Logger
The logger
parameter takes an object containg logging methods that corresponds to Log4j
console methods (console.error
, console.warn
, console.info
, console.debug
, console.trace
). Defaults to console
.
Cache hit hint
You can set the includeHitHeaderHint
parameter to true in order for the plugin to set a X-Result-Cache
header on responses that hit the cache. Note that this will only be set on hits, not on misses.
License
MIT-licensed. See LICENSE.