Minification — Nedir, Küçültme İlkeleri ve Kod Araçları

Yazar: IT Sectr Yayınlanma: 2026-05-18 Okuma süresi: 8 dk

Minification, kaynak koddaki tüm gereksiz karakterlerin (boşluklar, sekmeler, satır sonları ve yorumlar) kaldırılması işlemidir. Minification, program yürütme mantığını değiştirmeden JavaScript, CSS ve HTML dosyalarının boyutunu azaltır. MDN Web Docs'a göre, minification dosya boyutunu %50–70 oranında azaltabilir ve bu da doğrudan uygulama yükleme hızını ve First Contentful Paint (FCP)'i etkiler.

Önemli Noktalar

  • Minification — kod boyutunu azaltmak için boşlukları, satır sonlarını, yorumları kaldırma ve değişken adlarını kısaltma
  • Terser — ES6+ sözdizimi desteğiyle UglifyJS'nin halefi olan ana JavaScript minification aracı
  • esbuild — Go ile yazılmış ultra hızlı paketleyici ve küçültücü, Webpack ve Terser'dan 10–100 kat daha hızlı
  • Source maps — tarayıcıda küçültülmüş kodu orijinal biçiminde hata ayıklamaya olanak tanıyan kod haritaları
  • CSS küçültme — boşlukları kaldırma, onaltılık renkleri kısaltma ve CSS'de aynı seçicileri birleştirme

Minification Nedir?

Minification, program yürütmesini etkilemeyen tüm karakterleri kaldıran otomatik bir kaynak kod dönüşümüdür. Boşluklar, sekmeler, yeni satır karakterleri, yorumlar ve gereksiz parantezler kaldırılır veya kısaltılır. Minification, üretime dağıtımdan önce JavaScript, CSS, HTML ve daha seyrek olarak JSON yapılandırmalarına uygulanır.

Minificationın ana hedefi, ağ üzerinden iletilen dosyaların boyutunu azaltmaktır. 300 KB'lık bir JavaScript dosyası, küçültme işleminden sonra 120–150 KB yer kaplayabilir ve yavaş bir 3G bağlantısında yükleme süresini 200–400 ms azaltır. Google PageSpeed Insights ve Lighthouse doğrudan kodu küçültmeyi önerir: bu, performans değerlendirmesi ve Core Web Vitals kriterlerinden biridir.

Minification, derleme hattının (build pipeline) ayrılmaz bir parçasıdır. TypeScript veya Babel ile derleme sonrasında kod, Tree Shaking (kullanılmayan işlevlerin kaldırılması) ve ardından bir küçültücüden geçer ve ancak daha sonra nihai pakette birleştirilir. Modern paketleyicilerde (Webpack, Rollup, esbuild), küçültme, derlemenin son aşamasında eklentiler tarafından gerçekleştirilir.

Minification Neleri Kaldırır

ÖğeÖrnek (önce)Örnek (sonra)Tasarruf
Boşluklar ve sekmelerlet x = 5;let x=5;~%10–20
Satır sonları\n satırlar arasındahepsi tek satırda~%2–5
Yorumlar// commentkaldırıldı~%5–30
Gereksiz parantezlerif ((x > 0))if(x>0)~%1–3

Minification Nasıl Çalışır: Temel Teknikler

Boşlukların ve satır sonlarının kaldırılması en basit ve en belirgin tekniktir. Küçültücü ayrıştırıcı, AST'yi (Soyut Sözdizimi Ağacı) dolaşır ve dize değişmezlerinin parçası olmayan tüm boşluk karakterlerini kaldırır. Çoğu küçültücü ayrıca işleçleri tek bir satırda birleştirir ve bu da GZip veya Brotli ile sıkıştırma sırasında ek tasarruf sağlar.

Değişken adlarının değiştirilmesi (mangling) daha agresif bir tekniktir. Yerel değişkenler ve işlev parametreleri tek harfli tanımlayıcılara (a, b, c) yeniden adlandırılır. Bu, boyutu ek olarak %15–30 oranında azaltır. Terser ve esbuild, belirli adları koruma seçeneğiyle (örneğin, mangle.props.reserved aracılığıyla genel API) mangling'i destekler.

Ölü Kod Temizleme

Ölü kod temizleme (DCE), hiçbir zaman yürütülmeyen kod dallarını kaldırır. Küçültücü, her zaman yanlış olan koşulları (if (false)) analiz eder ve ilgili blokları kaldırır. Daha gelişmiş analiz, küçültmeden önce Tree Shaking aşamasında gerçekleştirilir, ancak küçültücü düzeyindeki DCE, modül düzeyinde tespit edilmeyen yerel ölü kod durumlarını yakalar.

Değişken Adı Mangling

Mangling, yerel değişkenleri ve işlev parametrelerini kısa tanımlayıcılara (bir veya iki harf) yeniden adlandırır. Terser, kapsama göre mangling gerçekleştirir: bir işlev içindeki değişkenler, dış kapsamlarla çakışmayan benzersiz kısa adlar alır. mangle.reserved seçeneği, belirli adların (örneğin, genel kitaplık API'leri) korunmasına izin verir.

Mangling, genel değişkenleri, nesne özelliklerini (mangle.props etkinleştirilmediği sürece) veya new ile kullanılan sınıf adlarını etkilemez. Bir kitaplığın genel API'sini mangling'den korumak için düzenli ifadelerle mangle.props.reserved kullanın: reserved: ["_prop", /^private_/]. Bu ayar olmadan, harici kod nesne özelliklerine ada göre erişirse mangling kitaplığı bozabilir.

Örnek: Küçültme Öncesi ve Sonrası

js
// Kaynak kod
function calculateTotal(price, tax) {
    var result = price + (price * tax);
    // Toplam tutarı döndür
    return result;
}

var total = calculateTotal(100, 0.2);
console.log(total);
js
// Terser küçültme sonrası
function calculateTotal(a, b){return a + a * b}
var c = calculateTotal(100, .2);
console.log(c);

İkinci örnekte, Terser yorumları, boşlukları ve satır sonlarını kaldırdı, price'ı a'ya, tax'i b'ye, result'ı c'ye yeniden adlandırdı. Boyut 197 karakterden 79'a düştü — %60 tasarruf. Aynı zamanda, kodun işlevselliği tamamen korunur: calculateTotal(100, 0.2) 120 döndürür.

Minification Araçları: Terser, esbuild, UglifyJS

Terser, Webpack ekosisteminde ve çoğu modern paketleyicide standart JavaScript küçültücüdür. Terser, ES6+ sözdizimini (ok işlevleri, async/await, spread), genel API korumalı mangling, kaynak haritaları ve CPU sayısıyla paralel yürütmeyi destekler. Sürüm 5.16'dan itibaren Terser, TypeScript optimizasyonlarını içerir — yalnızca tür içe aktarmalarını ve arabirimleri kaldırma.

esbuild, Go ile yazılmış ve aynı adlı paketleyiciye gömülü bir küçültücüdür. esbuild, yerel kod ve paralel işleme sayesinde Terser'dan 10–100 kat daha hızlı küçültme gerçekleştirir. Ancak esbuild daha az optimizasyonu destekler: özellik korumalı mangling yapmaz, yalnızca tür içe aktarmalarını kaldırmaz ve ifadeleri daha az agresif bir şekilde optimize eder.

Webpack'te Terser Yapılandırması

js
// webpack.config.js — TerserPlugin yapılandırması
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,
      }),
    ],
  },
};

TerserPlugin yapılandırması üç ana blok içerir. compress, ifade optimizasyonunu yönetir: drop_console console.log'u kaldırır, drop_debugger debugger'ı kaldırır, dead_code ulaşılamaz dalları kaldırır. mangle, genel adları korumak için reserved ile değişken yeniden adlandırmayı kontrol eder. parallel, CPU sayısıyla çoklu iş parçacığını etkinleştirir.

esbuild ile CSS Küçültme

js
// esbuild: JS ve CSS küçültme için CLI komutu
// 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 tek satırlık yapılandırmayı kabul eder. minify: true, hem JS hem de CSS'nin küçültülmesini etkinleştirir. sourcemap: true, hata ayıklama için kod haritaları oluşturur. target, minimum ES seviyesini tanımlar — esbuild, seçilen sürüm için modern kodu otomatik olarak dönüştürür. esbuild, derleme süresinin kritik olduğu projeler için özellikle etkilidir: CI/CD hatları, Hot Module Replacement ve hızlı prototipler.

React Native ve WebView'de Minification

React Native, Terser tabanlı küçültme içeren kendi paketleyicisi Metro Bundler'ı kullanır. Üretim modunda Metro, uygulamanın JavaScript paketine otomatik olarak küçültme uygular. Metro'da küçültme yapılandırması, transformer.minifierConfig bölümündeki metro.config.js aracılığıyla ayarlanır. Ayrıca, iOS'ta paket boyutunu azaltmak için inline-require devre dışı bırakılabilir.

Mobil uygulamalardaki WebView de küçültmeden yararlanır. WebView'de yüklenen HTML, CSS ve JS, uygulamaya gömülmeden veya sunucudan yüklenmeden önce küçültülmelidir. Yerel kaynaklar (Assets) için küçültme özellikle önemlidir — APK/IPA boyutu, uygulama mağazalarındaki yükleme dönüşümünü doğrudan etkiler.

Hermes ve Minification

Hermes, Facebook tarafından geliştirilen React Native için bir JavaScript motorudur. Hermes, Ahead-of-Time (AOT) bayt kodu derlemesi gerçekleştirir ve uygulama başlatma süresini %30–50 oranında azaltır. Hermes için JavaScript paket küçültme, Terser kullanılarak bayt kodu derlemesinden önce gerçekleştirilir. Hermes kendi HBC (Hermes Bytecode) biçimini destekler, ancak JS küçültme aşaması hala gereklidir.

React Native için Metro Yapılandırması

js
// metro.config.js — küçültme yapılandırması
const defaultConfig = require("metro-config/src/defaults");

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

Metro, minifierConfig.drop_console ile React Native üretim paketindeki tüm console.log'ları kaldırır. mangle.safari10 parametresi, Safari 10'u (iOS 10) bozan tanımlayıcıların yeniden adlandırılmasını önler. Bu, iOS 10/11 çalıştıran eski iPad ve iPhone 5s cihazlarını destekleyen uygulamalar için özellikle önemlidir.

Minification ve Sıkıştırma Arasındaki Fark

Minification ve sıkıştırma (gzip, brotli) farklı optimizasyon aşamalarıdır. Minification, kaynak kod düzeyinde çalışır ve sunucuya göndermeden önce karakter sayısını azaltır. Sıkıştırma, taşıma protokolü düzeyinde çalışır ve dosyayı istemciye iletirken sunucu (nginx, Apache, CDN) tarafından uygulanır. Minification, sıkıştırmadan önce boyutu azaltır ve bu da çift etki sağlar: gzip zaten azaltılmış verileri sıkıştırır.

Minification sonrası 300 KB'lık bir JavaScript dosyası — 120 KB, gzip sonrası — 35–40 KB. Küçültülmemiş dosyaya yalnızca gzip uygulanırsa boyut 55–70 KB olacaktır. Minification + gzip, tek başına gzip'ten %30–40 daha iyi sonuç verir. Brotli (seviye 6), küçültme sonrası gzip'ten ek %15–20 daha verimli sıkıştırır.

YöntemSeviyeDosya BoyutuAzaltma
Orijinal dosya300 KB%0
Minification sonrasıKod120 KB%60
gzip sonrası (minification yok)Taşıma65 KB%78
Minification + gzipKod + Taşıma38 KB%87
Minification + BrotliKod + Taşıma30 KB%90

Sıkça Sorulan Sorular

Minification uglify'dan nasıl farklıdır?

UglifyJS, ES6+ sözdizimini desteklemeyen eski bir minification aracıdır. Terser, modern JavaScript desteğine sahip UglifyJS'nin bir çatalıdır (fork). Tüm modern paketleyiciler (Webpack 5, Rollup, esbuild) Terser veya kendi küçültücülerini kullanırken, UglifyJS yalnızca eski projelerde kullanılır.

Source maps nedeniyle minification boyutu artırır mı?

Source maps, üretim paketine dahil edilmeyen ayrı .map dosyalarıdır. Sunucu, kaynak haritalarını yalnızca yetkili geliştiricilere (Authorization başlığı aracılığıyla) sağlamalıdır. Üretimde, kaynak haritaları kullanıcının tarayıcısı tarafından yüklenmez, bu nedenle paket boyutunu etkilemez.

Minification kodu bozabilir mi?

Bozulma riski, nesne özellik adlarını dönüştüren agresif mangling ile mevcuttur. Kod, data-attributes aracılığıyla DOM öğelerine erişirse veya alan adlandırması için JSON dizeleri kullanırsa, mangling genel özellikleri yeniden adlandırabilir. Çözüm, mangle.reserved ile hariç tutmak veya belirli ad alanları için mangling'i devre dışı bırakmaktır.

CSS küçültme zorunlu mudur?

CSS küçültme, JS küçültmeden daha az kazanç sağlar (%15–25), ancak Core Web Vitals uyumu için zorunludur. CSS küçültücüler boşlukları kaldırır, aynı seçicileri birleştirir, onaltılık renkleri kısaltır (#ff0000 → #f00) ve kullanılmayan @keyframes'leri kaldırır. CleanCSS ve esbuild, CSS küçültme için popüler araçlardır.

Küçültülmüş kod nasıl hata ayıklanır?

Source maps (.map dosyaları), küçültülmüş kodu orijinal kaynağa bağlar. Chrome DevTools ve Safari Web Inspector'da kaynak haritaları etkinleştirildiğinde orijinal dosyalar görüntülenir. Doğru çalışma için kaynak haritaları sunucuya yüklenmeli (üretimde bile) ve geliştirici araçları aracılığıyla etkinleştirilmelidir.

Özet

  • Minification — mantığı değiştirmeden koddan boşlukları, yorumları ve satır sonlarını kaldırarak dosya boyutunu azaltma
  • Terser — ES6+ desteği, mangling ve kaynak haritaları ile modern web'deki ana JavaScript küçültücü
  • esbuild — Go ile yazılmış ultra hızlı küçültücü, JS ve CSS desteğiyle Terser'dan 10–100 kat daha hızlı
  • React Native, üretim derlemeleri için Metro Bundler ve yerleşik Terser küçültme kullanır
  • Source maps, küçültülmüş kodda hata ayıklamak için gereklidir ve yalnızca geliştiriciler için yüklenmelidir
  • Minification + gzip/Brotli çift sıkıştırma etkisi sağlar: kod orijinalinden 5–10 kat daha küçük olur

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun