diff --git a/lib/parsers/string.js b/lib/parsers/string.js index 39f06593c2..cc937de346 100644 --- a/lib/parsers/string.js +++ b/lib/parsers/string.js @@ -1,7 +1,11 @@ 'use strict'; const Iconv = require('iconv-lite'); -const decoderCache = new Map(); +const LRU = require('lru-cache'); + +const decoderCache = new LRU({ + max: 500, +}); exports.decode = function (buffer, encoding, start, end, options) { if (Buffer.isEncoding(encoding)) { @@ -9,14 +13,12 @@ exports.decode = function (buffer, encoding, start, end, options) { } const decoderArgs = { encoding, options: options || {} }; - const decoder = - decoderCache.get(decoderArgs) || - decoderCache - .set( - decoderArgs, - Iconv.getDecoder(decoderArgs.encoding, decoderArgs.options), - ) - .get(decoderArgs); + const decoderKey = JSON.stringify(decoderArgs); + let decoder = decoderCache.get(decoderKey); + if (!decoder) { + decoder = Iconv.getDecoder(decoderArgs.encoding, decoderArgs.options); + decoderCache.set(decoderKey, decoder); + } const res = decoder.write(buffer.slice(start, end)); const trail = decoder.end();