Skip to content

Commit 2023900

Browse files
committed
Add overall code reduction metrics
1 parent 8e5d30f commit 2023900

2 files changed

Lines changed: 32 additions & 18 deletions

File tree

index.js

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,14 @@ const formatBytes = (bytes) => {
1313
let i = Math.floor(Math.log(bytes) / Math.log(k));
1414
return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i]
1515
};
16+
const shakenPct = (n, o) => Math.max((100 - ((n / o) * 100)).toFixed(2), 0);
1617

1718
const analyze = (bundle, opts = {}, format = false) => {
1819
let { root, limit, filter } = opts;
1920
root = root || (process && process.cwd ? process.cwd() : null);
2021
let deps = {};
2122
let bundleSize = 0;
23+
let bundleOrigSize = 0;
2224
let bundleModules = bundle.modules;
2325

2426
return new Promise((resolve, reject) => {
@@ -28,6 +30,7 @@ const analyze = (bundle, opts = {}, format = false) => {
2830
let size = renderedLength;
2931
if (!size && size !== 0) size = code ? Buffer.byteLength(code, 'utf8') : 0;
3032
bundleSize += size;
33+
bundleOrigSize += origSize;
3134

3235
if (Array.isArray(filter) && !filter.some((f) => id.match(f))) return null
3336
if (typeof filter === 'string' && !id.match(filter)) return null
@@ -46,22 +49,26 @@ const analyze = (bundle, opts = {}, format = false) => {
4649
modules.forEach((m) => {
4750
m.dependents = deps[m.id] || [];
4851
m.percent = Math.min(((m.size / bundleSize) * 100).toFixed(2), 100);
49-
m.reduction = Math.max((100 - ((m.size / m.origSize) * 100)).toFixed(2), 0);
52+
m.reduction = shakenPct(m.size, m.origSize);
5053
});
5154

5255
if (!format) return resolve(modules)
5356

5457
let heading = `Rollup File Analysis\n`;
55-
let displaySize = `${borderX}bundle size: ${formatBytes(bundleSize)}\n`;
56-
let formatted = `${borderX}${heading}${displaySize}${borderX}`;
58+
let bdlSize = `bundle size: ${formatBytes(bundleSize)}\n`;
59+
let bdlOrigSize = `original size: ${formatBytes(bundleOrigSize)}\n`;
60+
let reduction = `code reduction: ${shakenPct(bundleSize, bundleOrigSize)}%\n`;
61+
let formatted = [
62+
borderX, heading, borderX, bdlSize, bdlOrigSize, reduction, borderX
63+
].join('');
5764

5865
modules.forEach((m) => {
59-
formatted += `file:${buf}${m.id}\n`;
60-
formatted += `size:${buf}${formatBytes(m.size)}\n`;
61-
formatted += `percent:${buf}${m.percent}%\n`;
62-
formatted += `orig. size:${buf}${formatBytes(m.origSize || 'unknown')}\n`;
63-
formatted += `code reduction:${buf}${m.reduction}%\n`;
64-
formatted += `dependents:${buf}${m.dependents.length}\n`;
66+
formatted += `file: ${buf}${m.id}\n`;
67+
formatted += `bundle space: ${buf}${m.percent}%\n`;
68+
formatted += `rendered size: ${buf}${formatBytes(m.size)}\n`;
69+
formatted += `original size: ${buf}${formatBytes(m.origSize || 'unknown')}\n`;
70+
formatted += `code reduction: ${buf}${m.reduction}%\n`;
71+
formatted += `dependents: ${buf}${m.dependents.length}\n`;
6572
m.dependents.forEach((d) => {
6673
formatted += `${tab}-${buf}${d.replace(root, '')}\n`;
6774
});

module.js

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,14 @@ const formatBytes = (bytes) => {
1111
let i = Math.floor(Math.log(bytes) / Math.log(k))
1212
return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i]
1313
}
14+
const shakenPct = (n, o) => Math.max((100 - ((n / o) * 100)).toFixed(2), 0)
1415

1516
export const analyze = (bundle, opts = {}, format = false) => {
1617
let { root, limit, filter } = opts
1718
root = root || (process && process.cwd ? process.cwd() : null)
1819
let deps = {}
1920
let bundleSize = 0
21+
let bundleOrigSize = 0
2022
let bundleModules = bundle.modules
2123

2224
return new Promise((resolve, reject) => {
@@ -26,6 +28,7 @@ export const analyze = (bundle, opts = {}, format = false) => {
2628
let size = renderedLength
2729
if (!size && size !== 0) size = code ? Buffer.byteLength(code, 'utf8') : 0
2830
bundleSize += size
31+
bundleOrigSize += origSize
2932

3033
if (Array.isArray(filter) && !filter.some((f) => id.match(f))) return null
3134
if (typeof filter === 'string' && !id.match(filter)) return null
@@ -44,22 +47,26 @@ export const analyze = (bundle, opts = {}, format = false) => {
4447
modules.forEach((m) => {
4548
m.dependents = deps[m.id] || []
4649
m.percent = Math.min(((m.size / bundleSize) * 100).toFixed(2), 100)
47-
m.reduction = Math.max((100 - ((m.size / m.origSize) * 100)).toFixed(2), 0)
50+
m.reduction = shakenPct(m.size, m.origSize)
4851
})
4952

5053
if (!format) return resolve(modules)
5154

5255
let heading = `Rollup File Analysis\n`
53-
let displaySize = `${borderX}bundle size: ${formatBytes(bundleSize)}\n`
54-
let formatted = `${borderX}${heading}${displaySize}${borderX}`
56+
let bdlSize = `bundle size: ${formatBytes(bundleSize)}\n`
57+
let bdlOrigSize = `original size: ${formatBytes(bundleOrigSize)}\n`
58+
let reduction = `code reduction: ${shakenPct(bundleSize, bundleOrigSize)}%\n`
59+
let formatted = [
60+
borderX, heading, borderX, bdlSize, bdlOrigSize, reduction, borderX
61+
].join('')
5562

5663
modules.forEach((m) => {
57-
formatted += `file:${buf}${m.id}\n`
58-
formatted += `size:${buf}${formatBytes(m.size)}\n`
59-
formatted += `percent:${buf}${m.percent}%\n`
60-
formatted += `orig. size:${buf}${formatBytes(m.origSize || 'unknown')}\n`
61-
formatted += `code reduction:${buf}${m.reduction}%\n`
62-
formatted += `dependents:${buf}${m.dependents.length}\n`
64+
formatted += `file: ${buf}${m.id}\n`
65+
formatted += `bundle space: ${buf}${m.percent}%\n`
66+
formatted += `rendered size: ${buf}${formatBytes(m.size)}\n`
67+
formatted += `original size: ${buf}${formatBytes(m.origSize || 'unknown')}\n`
68+
formatted += `code reduction: ${buf}${m.reduction}%\n`
69+
formatted += `dependents: ${buf}${m.dependents.length}\n`
6370
m.dependents.forEach((d) => {
6471
formatted += `${tab}-${buf}${d.replace(root, '')}\n`
6572
})

0 commit comments

Comments
 (0)