Tree shaking adalah teknik optimasi ukuran file JavaScript dengan menghapus kode yang tidak digunakan (dead code) dari bundle final.
Fitur ini sangat penting untuk meningkatkan performa web, terutama pada aplikasi modern yang menggunakan library besar seperti React, Lodash, atau D3.js.
Contents
1. Apa Itu Tree Shaking?
- Definisi: Tree shaking adalah proses menghapus fungsi, variabel, atau modul yang tidak pernah digunakan dari bundle JavaScript.
- Tujuan: Mengurangi ukuran file dan meningkatkan waktu loading web.
- Kapan efektif: Ketika menggunakan ES6 module syntax (
import/export), karena module statis memungkinkan bundler menganalisis dependency.
Contoh Dead Code:
// utils.js
export function sum(a, b) { return a + b; }
export function multiply(a, b) { return a * b; }
// main.js
import { sum } from './utils.js';
console.log(sum(2, 3));
multiplytidak digunakan → Tree shaking akan menghapusnya dari bundle.
2. Persyaratan Tree Shaking
- Gunakan ES6 Modules (
import/export)- CommonJS (
require/module.exports) tidak mendukung tree shaking sepenuhnya karena module bersifat dinamis.
- CommonJS (
- Gunakan bundler modern
- Webpack 4+, Rollup, Parcel, Vite mendukung tree shaking.
- Mode produksi
- Tree shaking biasanya aktif saat bundle dalam production mode karena bundler melakukan minification dan dead code elimination.
3. Menggunakan Tree Shaking dengan Webpack
3.1 Struktur Proyek
/src
utils.js
index.js
webpack.config.js
3.2 Contoh File utils.js
export function add(a, b) {
return a + b;
}
export function subtract(a, b) {
return a - b;
}
export function multiply(a, b) {
return a * b;
}
3.3 File index.js
import { add } from './utils.js';
console.log(add(2, 3));
subtractdanmultiplytidak digunakan → dapat di-tree shake.
3.4 Konfigurasi webpack.config.js
const path = require('path');
module.exports = {
mode: 'production', // tree shaking aktif di mode production
entry: './src/index.js',
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist'),
},
optimization: {
usedExports: true, // menandai kode yang digunakan
},
};
Langkah:
- Jalankan
webpack --mode production. - Periksa bundle → hanya fungsi
addyang masuk.
4. Tree Shaking dengan Rollup
Rollup sangat efisien untuk library karena default sudah mendukung tree shaking.
rollup.config.js:
import resolve from '@rollup/plugin-node-resolve';
export default {
input: 'src/index.js',
output: {
file: 'dist/bundle.js',
format: 'es',
},
plugins: [resolve()],
};
- Rollup akan otomatis menghapus fungsi yang tidak digunakan (
subtractdanmultiply) jika import tidak digunakan.
5. Menggunakan Library Modular
Beberapa library besar menyediakan versi modular untuk mendukung tree shaking:
- Lodash: gunakan
lodash-esbukanlodashbiasa.
import { debounce } from 'lodash-es';
- RxJS: gunakan import spesifik:
import { map } from 'rxjs/operators';
Catatan: Import default (import _ from 'lodash') akan memasukkan seluruh library → tree shaking tidak efektif.
6. Tips Memaksimalkan Tree Shaking
- Selalu gunakan ES6 module syntax.
- Gunakan bundler modern (Webpack 5, Rollup, Vite).
- Aktifkan production mode.
- Hindari side-effects pada modul:
- Tambahkan
"sideEffects": falsedipackage.jsonjika modul bebas efek samping.
- Tambahkan
{
"name": "my-app",
"version": "1.0.0",
"sideEffects": false
}
- Pisahkan kode ke modul kecil → memudahkan bundler menghapus kode yang tidak digunakan.
- Gunakan modular library (
lodash-es, modular RxJS, modular D3).
7. Contoh Hasil Tree Shaking
Sebelum: Bundle utils.js + semua fungsi → 5KB
Sesudah: Hanya fungsi yang digunakan (add) → 2KB
- Pengurangan signifikan → loading lebih cepat → performa web meningkat.
8. Kesimpulan
Tree shaking adalah teknik penting untuk optimasi performa front-end. Dengan tree shaking:
- Bundle lebih kecil
- Load lebih cepat
- Hanya kode yang digunakan masuk ke aplikasi
Kunci sukses tree shaking:
- Gunakan ES6 modules.
- Gunakan bundler modern.
- Hindari side effects pada modul.
- Gunakan versi library yang modular.
