Episode ini membahas optimasi performa Dart: kompilasi AOT dan tree shaking, profiling dengan DevTools dan analisis alokasi, tips performa untuk Flutter dan server, serta benchmarking dan runtime analysis.

Aplikasi yang lambat mengusir pengguna, dan server yang boros menguras anggaran. Episode 15 membahas performance optimization di Dart: bagaimana kompilasi AOT dan tree shaking bekerja, cara memprofil aplikasi dengan DevTools, tips praktis untuk Flutter dan server, serta teknik benchmarking.
Performa bukan tebakan — ia harus diukur. Kalian akan belajar menemukan bottleneck dengan data, bukan intuisi, lalu mengoptimalkan bagian yang benar-benar berdampak.
Kompilasi AOT mengubah kode Dart menjadi kode mesin sebelum aplikasi berjalan. Hasilnya: tidak ada biaya JIT saat startup, alokasi memori lebih stabil, dan waktu boot yang cepat — krusial untuk aplikasi mobile dan server yang sering di-restart.
Tree shaking membuang kode yang tidak pernah dipakai dari hasil build. Compiler menganalisis grafik pemanggilan dan hanya menyertakan fungsi yang benar-benar terjangkau dari entry point:
flutter build appbundle --releaseflutter build appbundle --release menghasilkan bundle produksi dengan tree shaking aktif. Untuk aplikasi web, dart compile js -O4 mengaktifkan optimasi paling agresif. Periksa ukuran artifact sebelum dan sesudah untuk melihat penghematan.
Tree shaking hanya bekerja pada kode yang benar-benar dipakai. Hindari export yang mengembalikan seluruh library tanpa kontrol, dan hindari dependency yang hanya dipakai untuk satu fungsi kecil. Dependency besar menambah waktu build dan ukuran bundle.
DevTools adalah suite profiling resmi untuk Dart dan Flutter:
dart devtoolsdart devtools membuka dashboard profiling di browser. Tab yang paling berguna:
Jika memori terus naik tanpa turun, kemungkinan ada kebocoran — objek lama tidak pernah dibuang. Perhatikan pola umum: listener yang tidak dibatalkan, controller yang tidak di-close, dan cache yang tidak dibatasi. DevTools tab Memory menampilkan objek yang masih tertahan dan referensinya.
const untuk widget statis.Gunakan profiling frame di DevTools untuk menemukan frame lambat. Jangan mengoptimalkan sebelum ada bukti.
await penuh dan hindari pekerjaan CPU berat di isolate utama.Ukur regresi performa secara otomatis dengan benchmark sederhana:
void main() {
final stopwatch = Stopwatch()..start();
var total = 0;
for (var i = 0; i < 1000000; i++) {
total += i;
}
stopwatch.stop();
print('Waktu: ${stopwatch.elapsedMilliseconds} ms');
}stopwatch.elapsedMilliseconds mengukur waktu eksekusi. Simpan hasil benchmark sebagai baseline dan jalankan ulang saat terjadi perubahan besar untuk menangkap regresi performa. Benchmark juga berguna untuk membandingkan dua pendekatan secara objektif — misalnya memilih struktur data atau algoritma yang lebih cepat — selama kondisi pengukuran dibuat sama persis.
Jangan hanya mengukur di development. Kumpulkan data dari produksi: latency p95, penggunaan memori, dan error rate. Alat seperti tracing dan observability (episode 19) memberi gambaran performa nyata di bawah beban pengguna sungguhan.
Ingat urutan optimasi yang benar: ukur dulu, lalu optimalkan. Memperbaiki kode yang sebenarnya tidak lambat hanya menambah kompleksitas. Mulai dari profiling untuk menemukan bottleneck terbesar, perbaiki satu per satu, dan ukur ulang setelah setiap perubahan untuk memastikan dampaknya positif.
Terakhir, jangan abaikan ukuran binary. Untuk aplikasi mobile, ukuran bundle memengaruhi waktu unduh pengguna; untuk server, ukuran image memengaruhi waktu startup container. Pantau keduanya sebagai bagian dari metrik rilis.
Inti yang harus dibawa pulang:
flutter build --release dan dart compile js -O4 mengaktifkan optimasi produksi.Di episode 16 selanjutnya kita akan membahas Dart VM dan native interop — bekerja dengan Dart VM dan command-line tools, interop native dengan FFI, membangun utilitas CLI, serta embedding Dart di aplikasi host.