Terser is good at minifying JavaScript

Posted . Visible to the public.

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.
Henning Koch
Last edit
Henning Koch
Keywords
uglifier, compressor, mangler
License
Source code in this card is licensed under the MIT License.
Posted by Henning Koch to makandra dev (2024-09-30 06:59)