Minifikace — co to je, principy minifikace a nástroje pro kód

Autor: IT Sectr Publikováno: 2026-05-18 Doba čtení: 8 min

Minifikace — proces odstraňování všech nepodstatných znaků ze zdrojového kódu: mezer, tabulátorů, zalomení řádků a komentářů. Minifikace zmenšuje velikost JavaScript, CSS a HTML souborů bez změny logiky provádění programu. Podle MDN Web Docs může minifikace zmenšit velikost souboru o 50–70%, což přímo ovlivňuje rychlost načítání aplikací a First Contentful Paint (FCP).

Hlavní body

  • Minifikace — odstraňování mezer, zalomení řádků, komentářů a zkracování názvů proměnných pro zmenšení velikosti kódu
  • Terser — hlavní nástroj pro minifikaci JavaScriptu, nástupce UglifyJS s podporou syntaxe ES6+
  • esbuild — extrémně rychlý bundler a minifikátor napsaný v Go, 10–100krát rychlejší než Webpack a Terser
  • Source maps — mapy kódu umožňující ladění minifikovaného kódu v původní podobě v prohlížeči
  • Minifikace CSS — odstraňování mezer, zkracování hex barev a slučování identických selektorů v CSS

Co je minifikace?

Minifikace — automatická transformace zdrojového kódu, při které jsou odstraněny všechny znaky, které neovlivňují provádění programu. Mezery, tabulátory, znaky nového řádku, komentáře a nadbytečné závorky jsou odstraněny nebo zkráceny. Minifikace se aplikuje na JavaScript, CSS, HTML a méně často na JSON konfigurace před nasazením do produkce.

Hlavním cílem minifikace je zmenšení velikosti souborů přenášených přes síť. JavaScriptový soubor o velikosti 300 KB může po minifikaci zabírat 120–150 KB, což zkracuje dobu načítání o 200–400 ms při pomalém 3G připojení. Google PageSpeed Insights a Lighthouse přímo doporučují minifikaci kódu: je to jedno z kritérií hodnocení výkonu a Core Web Vitals.

Minifikace je nedílnou součástí build pipeline. Po transpilaci TypeScriptu nebo Babelu kód prochází Tree Shakingem (odstranění nepoužívaných funkcí), poté minifikátorem a teprve poté je sestaven do konečného bundle. V moderních bundlerech (Webpack, Rollup, esbuild) se minifikace provádí pomocí pluginů v závěrečné fázi sestavení.

Co minifikace odstraňuje

PrvekPříklad (před)Příklad (po)Úspora
Mezery a tabulátorylet x = 5;let x=5;~10–20%
Zalomení řádků mezi řádkyvše na jednom řádku~2–5%
Komentáře// commentodstraněno~5–30%
Nadbytečné závorkyif ((x > 0))if(x>0)~1–3%

Jak funguje minifikace: hlavní techniky

Odstraňování mezer a zalomení řádků — nejjednodušší a nejzřejmější technika. Analyzátor minifikátoru prochází AST (Abstract Syntax Tree) a odstraňuje všechny bílé znaky, které nejsou součástí řetězcových literálů. Většina minifikátorů navíc spojuje operátory na jeden řádek, což poskytuje další úsporu při kompresi pomocí GZip nebo Brotli.

Nahrazování názvů proměnných krátkými názvy (mangling) — agresivnější technika. Lokální proměnné a parametry funkcí jsou přejmenovány na jednopísmenné identifikátory: a, b, c. To snižuje velikost o dalších 15–30%. Terser a esbuild podporují mangling s možností zachování určitých názvů (například veřejného API pomocí mangle.props.reserved).

Odstraňování nepoužívaného kódu

Dead code elimination (DCE) — odstraňování větví kódu, které se nikdy neprovedou. Minifikátor analyzuje podmínky, které jsou vždy false (if (false)), a odstraňuje odpovídající bloky. Pokročilejší analýza se provádí ve fázi Tree Shaking před minifikací, ale DCE na úrovni minifikátoru zachycuje lokální případy mrtvého kódu nezjištěné na úrovni modulů.

Zkracování názvů proměnných (Mangling)

Mangling — přejmenovávání lokálních proměnných a parametrů funkcí na krátké identifikátory (jedno-dvě písmena). Terser provádí mangling na základě rozsahu: proměnné uvnitř jedné funkce získávají jedinečná krátká jména, která nekolidují s vnějšími rozsahy. Volba mangle.reserved umožňuje zachovat určité názvy — například veřejné API knihoven.

Mangling neovlivňuje globální proměnné, vlastnosti objektů (pokud není zapnut mangle.props) a názvy tříd používané s new. Pro ochranu veřejného API knihoven před manglingem použijte mangle.props.reserved s regulárními výrazy: reserved: ["_prop", /^private_/]. Bez tohoto nastavení může mangling knihovnu poškodit, pokud externí kód přistupuje k vlastnostem objektu podle názvu.

Příklad: před a po minifikaci

js
// Zdrojový kód
function calculateTotal(price, tax) {
    var result = price + (price * tax);
    // Vracíme konečný součet
    return result;
}

var total = calculateTotal(100, 0.2);
console.log(total);
js
// Po minifikaci Terserem
function calculateTotal(a, b){return a + a * b}
var c = calculateTotal(100, .2);
console.log(c);

Ve druhém příkladu Terser odstranil komentáře, mezery a zalomení řádků, přejmenoval price na a, tax na b, result na c. Velikost se zmenšila ze 197 znaků na 79 — úspora 60%. Funkčnost kódu je přitom plně zachována: calculateTotal(100, 0.2) vrací 120.

Nástroje pro minifikaci: Terser, esbuild, UglifyJS

Terser — standardní JavaScript minifikátor v ekosystému Webpacku a většiny moderních bundlerů. Terser podporuje syntaxi ES6+ (šipkové funkce, async/await, spread), mangling s ochranou veřejného API, source maps a paralelní spouštění podle počtu CPU. Od verze 5.16 obsahuje Terser optimalizace pro TypeScript — odstraňování type-only importů a rozhraní.

esbuild — minifikátor v Go, integrovaný do stejnojmenného bundleru. esbuild provádí minifikaci 10–100krát rychleji než Terser díky nativnímu kódu a paralelnímu zpracování. esbuild však podporuje méně optimalizací: neprovádí mangling se zachováním vlastností, neodstraňuje type-only importy a optimalizuje výrazy méně agresivně.

Konfigurace Terseru ve Webpacku

js
// webpack.config.js — konfigurace TerserPlugin
const TerserPlugin = require("terser-webpack-plugin");

module.exports = {
  optimization: {
    minimize: true,
    minimizer: [
      new TerserPlugin({
        terserOptions: {
          compress: {
            drop_console: true,
            drop_debugger: true,
            dead_code: true,
          },
          mangle: {
            reserved: ["React", "Component"],
          },
          output: {
            comments: false,
          },
        },
        parallel: true,
      }),
    ],
  },
};

Konfigurace TerserPlugin zahrnuje tři klíčové bloky. compress je odpovědný za optimalizaci výrazů: drop_console odstraňuje console.log, drop_debugger odstraňuje debugger, dead_code odstraňuje nedosažitelné větve. mangle řídí přejmenovávání proměnných s reserved pro ochranu veřejných názvů. parallel zapíná vícevláknovost podle počtu CPU.

Minifikace CSS přes esbuild

js
// esbuild: CLI příkaz pro minifikaci JS a CSS
// esbuild app.js --bundle --minify --outfile=dist/app.min.js
// esbuild app.css --bundle --minify --outfile=dist/app.min.css

const esbuild = require("esbuild");

esbuild.build({
  entryPoints: ["src/app.js", "src/styles.css"],
  bundle: true,
  minify: true,
  sourcemap: true,
  target: ["es2015"],
  outdir: "dist",
}).catch(() => process.exit(1));

esbuild API přijímá konfiguraci na jeden řádek. minify: true zapíná minifikaci pro JS i CSS. sourcemap: true generuje mapy kódu pro ladění. target určuje minimální úroveň ES — esbuild automaticky transpiluje moderní kód na vybranou verzi. esbuild je obzvláště účinný v projektech, kde je doba sestavení kritická: CI/CD pipeline, Hot Module Replacement a rychlé prototypování.

Minifikace v React Native a WebView

React Native používá Metro Bundler — vlastní bundler, který zahrnuje minifikaci založenou na Terseru. V produkčním režimu Metro automaticky aplikuje minifikaci na JavaScript bundle aplikace. Konfigurace minifikace v Metru se nastavuje přes metro.config.js v sekci transformer.minifierConfig. Dále lze vypnout inline-require pro zmenšení velikosti bundle na iOS.

WebView v mobilních aplikacích také těží z minifikace. HTML, CSS a JS načítané do WebView musí projít minifikací před vložením do aplikace nebo načtením ze serveru. Pro místní zdroje (Assets) je minifikace obzvláště důležitá — velikost APK/IPA přímo ovlivňuje konverzi instalací v obchodech s aplikacemi.

Hermes a minifikace

Hermes — JavaScript engine pro React Native, vyvinutý Facebookem. Hermes provádí Ahead-of-Time (AOT) kompilaci bajtkódu, což snižuje dobu spouštění aplikace o 30–50%. Pro Hermes se minifikace JavaScript bundle provádí před kompilací do bajtkódu pomocí Terseru. Hermes podporuje vlastní formát HBC (Hermes Bytecode), ale fáze JS minifikace zůstává nezbytná.

Konfigurace Metro pro React Native

js
// metro.config.js — konfigurace minifikace
const defaultConfig = require("metro-config/src/defaults");

module.exports = require("metro-config").mergeConfig(
  defaultConfig,
  {
    transformer: {
      minifierConfig: {
        compress: {
          drop_console: true,
        },
        mangle: {
          safari10: true,
        },
      },
    },
  }
);

Metro s minifierConfig.drop_console odstraňuje všechny console.log z produkčního bundle React Native. Parametr mangle.safari10 zabraňuje přejmenovávání identifikátorů, které poškozují Safari 10 (iOS 10). To je obzvláště důležité pro aplikace podporující stará zařízení iPad a iPhone 5s s iOS 10/11.

Čím se liší minifikace od komprese

Minifikace a komprese (gzip, brotli) jsou různé fáze optimalizace. Minifikace pracuje na úrovni zdrojového kódu a snižuje počet znaků před odesláním na server. Komprese pracuje na úrovni transportního protokolu a je aplikována serverem (nginx, Apache, CDN) při přenosu souboru klientovi. Minifikace snižuje velikost před kompresí, což poskytuje dvojitý efekt: gzip komprimuje již zkrácená data.

Velikost JavaScript souboru 300 KB po minifikaci — 120 KB, po gzip — 35–40 KB. Pokud je gzip aplikován pouze na neminifikovaný soubor, velikost bude 55–70 KB. Minifikace + gzip poskytuje o 30–40% lepší výsledek než samotný gzip. Brotli (úroveň 6) komprimuje po minifikaci o 15–20% účinněji než gzip.

MetodaÚroveňVelikost souboruSnížení
Původní soubor300 KB0%
Po minifikaciKód120 KB60%
Po gzip (bez minifikace)Transport65 KB78%
Minifikace + gzipKód + Transport38 KB87%
Minifikace + BrotliKód + Transport30 KB90%

Často kladené otázky

Čím se liší minifikace od uglify?

UglifyJS — zastaralý nástroj pro minifikaci, který nepodporuje syntaxi ES6+. Terser je fork UglifyJS s podporou moderního JavaScriptu. Všechny moderní bundlery (Webpack 5, Rollup, esbuild) používají Terser nebo vlastní minifikátory, zatímco UglifyJS se uplatňuje pouze v legacy projektech.

Proč minifikace zvyšuje velikost kvůli source maps?

Source maps — samostatné .map soubory, které nejsou zahrnuty do produkčního bundle. Server by měl poskytovat source maps pouze autorizovaným vývojářům (přes hlavičku Authorization). V produkci source maps nejsou načítány prohlížečem uživatele, a proto neovlivňují velikost bundle.

Může minifikace poškodit kód?

Riziko poškození existuje při agresivním manglingu s transformací názvů vlastností objektů. Pokud kód přistupuje k DOM elementům přes data-atributy nebo používá JSON řetězce pro pojmenování polí, mangling může přejmenovat veřejné vlastnosti. Řešení — exclude pomocí mangle.reserved nebo vypnutí manglingu pro určité jmenné prostory.

Je nutné minifikovat CSS?

Minifikace CSS přináší menší zisk (15–25%) než minifikace JS, ale je povinná pro soulad s Core Web Vitals. CSS minifikátory odstraňují mezery, slučují identické selektory, zkracují hex barvy (#ff0000 → #f00) a odstraňují nepoužívané @keyframes. CleanCSS a esbuild jsou populární nástroje pro minifikaci CSS.

Jak ladit minifikovaný kód?

Source maps (.map soubory) spojují minifikovaný kód s původním. V Chrome DevTools a Safari Web Inspector se zapnutými source maps se zobrazují původní soubory. Pro správnou funkci musí být source maps nahrány na server (i v produkci) a povoleny prostřednictvím vývojářských nástrojů.

Shrnutí

  • Minifikace — odstraňování mezer, komentářů a zalomení řádků z kódu bez změny logiky pro zmenšení velikosti souborů
  • Terser — hlavní JavaScript minifikátor v moderním webu s podporou ES6+, manglingu a source maps
  • esbuild — extrémně rychlý minifikátor v Go, 10–100krát rychlejší než Terser, s podporou JS a CSS
  • React Native používá Metro Bundler s vestavěnou minifikací přes Terser pro produkční sestavení
  • Source maps jsou nezbytné pro ladění minifikovaného kódu a měly by se načítat pouze pro vývojáře
  • Minifikace + gzip/Brotli poskytuje dvojitý kompresní efekt: kód je 5–10krát menší než originál

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také