From 52b1b0e4ada7c11e7f1b4f3d69b50684938c684e Mon Sep 17 00:00:00 2001 From: Ryan Wilson-Perkin Date: Fri, 10 Mar 2023 10:04:26 -0500 Subject: [PATCH] Revert "Improve performance of hashRegExp lookup" --- lib/optimize/RealContentHashPlugin.js | 58 +++++++-------------------- 1 file changed, 14 insertions(+), 44 deletions(-) diff --git a/lib/optimize/RealContentHashPlugin.js b/lib/optimize/RealContentHashPlugin.js index c7e19754e73..9ceb157781d 100644 --- a/lib/optimize/RealContentHashPlugin.js +++ b/lib/optimize/RealContentHashPlugin.js @@ -178,43 +178,10 @@ class RealContentHashPlugin { } } if (hashToAssets.size === 0) return; - const hashRegExps = Array.from(hashToAssets.keys(), quoteMeta).map( - hash => new RegExp(hash, "g") + const hashRegExp = new RegExp( + Array.from(hashToAssets.keys(), quoteMeta).join("|"), + "g" ); - - /** - * @param {string} str string to be matched against all hashRegExps - * @returns {string[] | null} matches found - */ - const hashMatch = str => { - /** @type {string[]} */ - const results = []; - for (const hashRegExp of hashRegExps) { - const matches = str.match(hashRegExp); - if (matches) { - matches.forEach(match => results.push(match)); - } - } - if (results.length) { - return results; - } else { - return null; - } - }; - - /** - * @param {string} str string to be replaced with all hashRegExps - * @param {function(string): string} fn replacement function to use when a hash is found - * @returns {string} replaced content - */ - const hashReplace = (str, fn) => { - let result = str; - for (const hashRegExp of hashRegExps) { - result = result.replace(hashRegExp, fn); - } - return result; - }; - await Promise.all( assetsWithInfo.map(async asset => { const { name, source, content, hashes } = asset; @@ -231,7 +198,7 @@ class RealContentHashPlugin { await cacheAnalyse.providePromise(name, etag, () => { const referencedHashes = new Set(); let ownHashes = new Set(); - const inContent = hashMatch(content); + const inContent = content.match(hashRegExp); if (inContent) { for (const hash of inContent) { if (hashes.has(hash)) { @@ -331,7 +298,7 @@ ${referencingAssets identifier, etag, () => { - const newContent = hashReplace(asset.content, hash => + const newContent = asset.content.replace(hashRegExp, hash => hashToNewHash.get(hash) ); return new RawSource(newContent); @@ -356,12 +323,15 @@ ${referencingAssets identifier, etag, () => { - const newContent = hashReplace(asset.content, hash => { - if (asset.ownHashes.has(hash)) { - return ""; + const newContent = asset.content.replace( + hashRegExp, + hash => { + if (asset.ownHashes.has(hash)) { + return ""; + } + return hashToNewHash.get(hash); } - return hashToNewHash.get(hash); - }); + ); return new RawSource(newContent); } ); @@ -407,7 +377,7 @@ ${referencingAssets await Promise.all( assetsWithInfo.map(async asset => { await computeNewContent(asset); - const newName = hashReplace(asset.name, hash => + const newName = asset.name.replace(hashRegExp, hash => hashToNewHash.get(hash) );