Minification (bahasa pemrograman)

**Minifikasi** (atau minimisasi) adalah proses menghilangkan semua karakter yang tidak diperlukan dari kode sumber dalam bahasa pemrograman yang ditafsirkan atau bahasa markah, tanpa mengubah fungsinya. Karakter yang tidak diperlukan ini biasanya mencakup spasi, baris baru, komentar, dan terkadang pembatas blok yang digunakan untuk meningkatkan keterbacaan kode, tetapi tidak diperlukan agar kode dapat dijalankan.

Proses ini bertujuan untuk mengurangi ukuran kode sumber, sehingga transmisinya melalui jaringan (misalnya Internet) menjadi lebih efisien. Dalam komunitas programmer, tujuan dari kompetisi golf kode adalah untuk mencapai kode sumber yang sangat diperkecil, menciptakan solusi yang sangat ringkas dan efisien.

### Perbedaan dengan Kompresi Data
Minifikasi dapat dibedakan dari kompresi data yang lebih umum. Dalam kompresi data, data yang diperkecil memerlukan langkah dekompresi untuk bisa digunakan kembali. Sebaliknya, minifikasi memungkinkan kode sumber yang diperkecil untuk langsung ditafsirkan tanpa perlu dekompresi, dengan penafsir yang sama dapat bekerja dengan baik pada kode sumber asli maupun yang telah diperkecil.

### Minifikasi vs. Pengaburan
Tujuan minifikasi tidak sama dengan tujuan pengaburan (obfuscation). Minifikasi sering kali dimaksudkan untuk dapat dibalik (dengan menggunakan pretty-printer atau unminifier), sementara pengaburan bertujuan untuk menyulitkan pemahaman dan pemrograman ulang kode. Meskipun demikian, minifikasi terkadang menggunakan teknik yang juga digunakan dalam pengaburan, seperti memperpendek nama variabel dan melakukan refactoring kode sumber.

Ketika minifikasi menggunakan teknik-teknik tersebut, proses pembalikan dengan pretty-printer atau unminifier hanya dapat sepenuhnya membalikkan minifikasi jika rincian transformasi yang dilakukan oleh teknik tersebut diberikan. Tanpa informasi tersebut, kode sumber yang dibalik akan mengandung nama variabel dan alur kontrol yang berbeda, meskipun fungsionalitasnya tetap sama dengan kode sumber asli.

## Contoh kode
Misalnya, kode JavaScript
```javascript
// Ini adalah komentar yang akan dihapus oleh minifier 
var array = []; for ( var i = 0 ; i < 20 ; i ++ ) { array [ i ] = i ; }
```
setara dengan tetapi lebih panjang dari
```javascript
for(var a=[],i=0;i<20;a[i]=i++);
```


## Sejarah
Minifikasi JavaScript telah berkembang melalui berbagai alat dan teknik yang diperkenalkan oleh para pengembang sepanjang waktu.

JSMin diperkenalkan pada tahun 2001 oleh Douglas Crockford. Alat ini menghapus komentar dan spasi dari kode JavaScript, yang membantu mengurangi ukuran file dan mempercepat pengunduhan halaman web.

Pada tahun 2007, YUI Compressor muncul sebagai alat minifikasi yang menawarkan solusi serupa, dengan tambahan fitur untuk meminimalkan kode CSS dan JavaScript.

Pada tahun 2009, Google membuka Closure Toolkit, yang mencakup Closure Compiler. Alat ini menawarkan fitur pemetaan sumber dan diperkenalkan bersama dengan ekstensi Firefox bernama Closure Inspector.

Pada tahun 2010, Mihai Bazon memperkenalkan UglifyJS, yang kemudian digantikan oleh versi yang lebih baru, UglifyJS2, pada tahun 2012. Versi kedua ini mendukung pemetaan sumber, sebuah fitur penting untuk debugging.

Sejak tahun 2017, Alex Lam mengambil alih pemeliharaan dan pengembangan UglifyJS2, menggantinya dengan UglifyJS3, yang menyatukan Command-Line Interface (CLI) dengan API.

Pada tahun 2018, Terser muncul sebagai fork dari uglify-es. Sejak saat itu, Terser mendapatkan popularitas yang pesat. Pada tahun 2020, Terser melampaui UglifyJS dalam jumlah unduhan harian, menjadi salah satu alat minifikasi JavaScript yang paling banyak digunakan.

## Pemetaan sumber
Peta sumber adalah format berkas yang memungkinkan perangkat lunak, terutama untuk JavaScript, untuk menampilkan kode yang berbeda kepada pengguna daripada kode yang sebenarnya dijalankan oleh komputer. Peta ini membantu dalam proses debugging dengan "memetakan" kode yang diperkecil (minified) ke kode sumber asli yang tidak diperkecil, memudahkan pengembang untuk menganalisis dan memperbaiki masalah dalam kode.

Format peta sumber pertama kali dibuat oleh Joseph Schorr sebagai bagian dari proyek minifikasi Closure Inspector. Seiring waktu, versi 2 dan 3 dari format ini dikembangkan, yang mengurangi ukuran file peta secara signifikan, menjadikannya lebih efisien untuk digunakan dalam proses pengembangan perangkat lunak.

Peta sumber sangat berguna dalam situasi di mana kode JavaScript telah diperkecil atau dikompilasi, karena memungkinkan pengembang untuk melihat kode yang lebih mudah dipahami tanpa harus bekerja dengan versi yang diperkecil yang sulit dibaca dan di-debug.

## Jenis

### Peralatan
Visual Studio Code dilengkapi dengan dukungan minifikasi untuk beberapa bahasa pemrograman, memungkinkan pengembang untuk dengan mudah mengecilkan file kode sumber. Pengguna dapat menelusuri Visual Studio Marketplace untuk mengunduh dan memasang minifier tambahan yang sesuai dengan kebutuhan mereka.

Untuk JavaScript, pengoptimal dapat mengecilkan file kode dan membuat peta sumber, yang memungkinkan pengembang untuk melakukan debugging meskipun kode tersebut sudah diperkecil. Selain itu, beberapa alat daring juga dapat digunakan untuk mengompresi berkas CSS.

Dalam pengembangan web, komponen dan pustaka aplikasi web serta situs web telah dirancang untuk mengoptimalkan permintaan file dan mengurangi waktu pemuatan halaman dengan mengecilkan ukuran berbagai file. JavaScript dan Cascading Style Sheets (CSS) adalah dua jenis sumber daya utama yang sering diperkecil untuk mengurangi ukuran berkasnya secara signifikan, tanpa mengubah perilaku kode.

Beberapa pustaka yang tersedia secara daring dapat melakukan minifikasi dan pengoptimalan hingga tingkat yang bervariasi. Pustaka-pustaka ini sering juga menggabungkan beberapa berkas skrip menjadi satu berkas untuk mempercepat proses pengunduhan oleh klien. Selain itu, peta sumber JavaScript memungkinkan kode tetap dapat dibaca dan di-debug meskipun sudah digabungkan dan diperkecil, memudahkan pengembang dalam menganalisis dan memperbaiki masalah pada aplikasi yang telah dioptimalkan.

## Referensi