@@ -7,6 +7,7 @@ const zlib = require('zlib')
77const port = process . env . PORT || process . env . port || 8091
88const defaultTimeout = 120000
99const checkId = { read : true , update : true , delete : true }
10+ const primitives = { string : true , number : true }
1011const noop = ( ) => { }
1112const dummyRes = {
1213 addTrailers : noop ,
@@ -253,21 +254,26 @@ function handleRequest (req, res) {
253254 } ) . catch ( ( err ) => fourOhOne ( res , err ) )
254255}
255256
257+ let sendCache = { }
256258function 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