Skip to content

Commit 0d66130

Browse files
committed
always create a CachedSource, because it's accessed multiple times
1 parent ccd6bb5 commit 0d66130

1 file changed

Lines changed: 13 additions & 1 deletion

File tree

lib/Compilation.js

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1544,6 +1544,7 @@ class Compilation extends Tapable {
15441544

15451545
createChunkAssets() {
15461546
const outputOptions = this.outputOptions;
1547+
const cachedSourceMap = new Map();
15471548
for(let i = 0; i < this.chunks.length; i++) {
15481549
const chunk = this.chunks[i];
15491550
chunk.files = [];
@@ -1568,10 +1569,21 @@ class Compilation extends Tapable {
15681569
source = this.cache[cacheName].source;
15691570
} else {
15701571
source = fileManifest.render();
1572+
// Ensure that source is a cached source to avoid additional cost because of repeated access
1573+
if(!(source instanceof CachedSource)) {
1574+
const cacheEntry = cachedSourceMap.get(source);
1575+
if(cacheEntry) {
1576+
source = cacheEntry;
1577+
} else {
1578+
const cachedSource = new CachedSource(source);
1579+
cachedSourceMap.set(source, cachedSource);
1580+
source = cachedSource;
1581+
}
1582+
}
15711583
if(this.cache) {
15721584
this.cache[cacheName] = {
15731585
hash: usedHash,
1574-
source: source = (source instanceof CachedSource ? source : new CachedSource(source))
1586+
source
15751587
};
15761588
}
15771589
}

0 commit comments

Comments
 (0)