Terser Show archive.org snapshot is a really good minifier ("compressor") for JavaScript code. I'm often surprised by the thoughtfulness of its compressed output.
Let's take this function:
function fn() {
if (a) {
return 'foo'
} else if (b) {
return 'foo'
} else {
return c()
}
}
console.log(fn())
Terser will reduce this to the following code:
console.log(a||b?"foo":c())
Note how:
- The
if
statement has been replaced by a tertiary expression. This is often less readable, but it doesn't matter in compressed code. - Multiple condition branches with the same effect have been into a single branch (
a || b
) - The function
fn()
has been inlined, because it is only used once.
Let's use a similiar input, but call fn()
twice:
function fn() {
if (a) {
return 'foo'
} else if (b) {
return 'foo'
} else {
return c()
}
}
console.log(fn())
console.log(fn())
This compresses down to the following:
function o(){return a||b?"foo":c()}console.log(o()),console.log(o())
Note how:
- The function remains in the compressed output, as it is called more than once.
- The function name has been shortened to
o
, as it is not exported.
Let's look at a function without a condition:
const three = 3
function fn() {
return 2 + three
}
console.log(fn())
console.log(fn())
This compresses down to the following:
console.log(5),console.log(5)
Note how:
- The function has been replaced by its constant output (
5
) - Despite being called twice the function is now inlined, as that has fewer characters.
Posted by Henning Koch to makandra dev (2024-09-30 06:59)