Skip to content

Commit d91d82d

Browse files
committed
Cache expensive-ish where if we can
1 parent ed17aab commit d91d82d

1 file changed

Lines changed: 10 additions & 4 deletions

File tree

index.js

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ const zlib = require('zlib')
77
const port = process.env.PORT || process.env.port || 8091
88
const defaultTimeout = 120000
99
const checkId = {read: true, update: true, delete: true}
10+
const primitives = {string: true, number: true}
1011
const noop = () => {}
1112
const dummyRes = {
1213
addTrailers: noop,
@@ -253,21 +254,26 @@ function handleRequest (req, res) {
253254
}).catch((err) => fourOhOne(res, err))
254255
}
255256

257+
let sendCache = {}
256258
function sendData (res, data = null) {
257259
if (res.headersSent) {
258260
logIt(new Error(`Can't send data after headers sent`), 'warn')
259261
return Promise.resolve()
260262
}
263+
let tmp = sendCache
264+
let canCache = !data || primitives[typeof data]
265+
let hasCache = canCache && data === tmp.data
261266
return new Promise((resolve, reject) => {
262-
data = JSON.stringify({data, error: null})
263-
let len = Buffer.byteLength(data)
267+
let out = hasCache ? tmp.out : JSON.stringify({data, error: null})
268+
let len = hasCache ? tmp.len : Buffer.byteLength(out)
269+
if (canCache && !hasCache) sendCache = {data, out, len}
264270
res.statusCode = 200
265271
if (!res.useGzip || len < gzipThreshold) {
266-
res.end(data)
272+
res.end(out)
267273
return resolve()
268274
}
269275
res.setHeader('Content-Encoding', 'gzip')
270-
zlib.gzip(Buffer.from(data), (err, zipd) => {
276+
zlib.gzip(Buffer.from(out), (err, zipd) => {
271277
if (err) return reject(sendErr(res, err))
272278
res.end(zipd)
273279
return resolve()

0 commit comments

Comments
 (0)