5 menit

Ukur Sebelum Mengoptimalkan: Alur Kerja Paul Irish untuk Performa

Gunakan prinsip 'ukur sebelum mengoptimalkan' sebagai loop sederhana: baseline, profiling, ubah satu hal, verifikasi dampak, dan bangun kebiasaan performa yang lebih tenang.

Ukur Sebelum Mengoptimalkan: Alur Kerja Paul Irish untuk Performa

Mengapa mengoptimalkan dulu biasanya membuang-buang waktu

Pekerjaan performa terasa acak ketika Anda mulai dengan perbaikan. Suatu hari Anda meminify file, hari lain Anda mengubah caching, lalu Anda menghapus sebuah library. Kadang membantu. Kadang tidak ada perubahan, dan Anda tidak tahu kenapa.

Risiko terbesar adalah mengoptimalkan hal yang salah. Jika halaman lambat karena main thread diblokir oleh JavaScript, menghabiskan berjam-jam mengompresi gambar mungkin hampir tidak menggeser jarum. Atau Anda bisa mempercepat sesuatu yang pengguna tidak perhatikan sementara keterlambatan nyata adalah panggilan API yang lama, layout yang terus reflow, atau satu script blocking.

Ada juga jebakan menilai berdasarkan rasa. “Terasa lebih cepat” bisa jadi efek plasebo (misalnya spinner) atau karena pengujian pada jaringan, perangkat, atau waktu yang berbeda. “Benar-benar lebih cepat” berarti tindakan yang sama, dalam kondisi yang sama, menghasilkan angka yang lebih baik.

Sebuah janji sederhana memperbaiki sebagian besar ini: ukur sebelum Anda mengoptimalkan, lalu putuskan. Saat Anda memperlakukan performa seperti masalah pengukuran, Anda berhenti menebak dan mulai belajar.

Loop praktisnya seperti ini: pilih satu tindakan pengguna untuk ditingkatkan, catat baseline di kondisi yang dapat diulang, lakukan satu perubahan yang bisa Anda jelaskan, lalu ukur ulang dan pertahankan perubahan hanya jika angkanya membaik.

Paul Irish dan kebiasaan mengukur dulu

Paul Irish adalah salah satu suara paling dikenal di dunia performa web. Lewat karyanya pada tooling browser dan panduan performa, ia membantu memopulerkan ide sederhana: tugas pertama Anda bukan menebak apa yang lambat, melainkan membuktikannya.

Mindset itu mengubah dinamika tim. Alih-alih berdebat dari kebiasaan seperti “gambar selalu jadi masalah” atau “pasti framework-nya,” Anda mulai dari bukti. Saat Anda bisa menunjuk timeline, query yang lambat, atau long task, pembicaraan berpindah dari menyalahkan ke memperbaiki.

"Ukur sebelum mengoptimalkan" juga mendinginkan debat performa karena menciptakan aturan bersama: sepakati apa yang diukur, sepakati apa arti “lebih baik,” dan rayakan hanya ketika angkanya bergerak.

Ini bekerja pada situs kecil maupun aplikasi besar. Sebuah baseline tunggal bisa menghentikan micro-optimasi acak di halaman marketing. Pada produk besar, pengukuran konsisten mencegah performa berubah menjadi daftar tugas tanpa akhir.

Cara sederhana membuatnya nyata adalah memperlakukan performa seperti laporan bug: langkah reproduksi yang jelas, metrik yang terlihat, dan satu perubahan yang terkait dengan satu hasil. Jika dua orang tidak setuju, jalankan pengukuran ulang dan biarkan data yang memutuskan.

Performa sebagai masalah instrumentasi

Perlakukan performa sebagai masalah instrumentasi terlebih dahulu: tambahkan cara untuk mengamati apa yang benar-benar dialami pengguna. Jika Anda tidak bisa melihatnya, Anda akan berakhir memperdebatkan opini, bukan bukti. Itu makna sebenarnya di balik mengukur dulu.

Instrumentasi tidak harus rumit. Ini mengumpulkan beberapa sinyal secara konsisten, di tempat yang sama, sehingga Anda bisa menjawab pertanyaan dasar:

  • Apa yang terasa lambat?
  • Ke mana perginya waktu?
  • Apakah perubahan membantu?

Biasanya Anda ingin dua jenis data.

Data lab ditangkap dalam setup terkontrol: laptop atau perangkat uji tertentu, profil jaringan stabil, langkah yang sama setiap kali. Bagus untuk debugging karena Anda bisa mereproduksi slowdown kapan saja.

Data pengguna nyata adalah apa yang dialami orang di lapangan: perangkat, lokasi, dan kualitas koneksi yang berbeda. Bagus untuk memprioritaskan karena menunjukkan apa yang benar-benar menyakiti pengguna, bukan hanya satu kali uji coba.

Bahkan tanpa menjadi pakar, Anda bisa mengukur milestone pemuatan halaman (seperti konten pertama yang terlihat), long tasks dan blocking main-thread, request jaringan lambat, pekerjaan rendering yang mahal (layout, style, paint), dan waktu respons server.

Sinyal-sinyal itu biasanya ada di beberapa tempat: developer tools browser untuk profiling lab, log server dan trace untuk timing backend, dan dashboard analytics atau RUM untuk data pengguna nyata. Misalnya, jika checkout terasa lambat, DevTools mungkin menunjukkan browser sibuk merender UI keranjang besar sementara log server menunjukkan API cepat. Tanpa instrumentasi, Anda bisa mengoptimalkan backend dan tak pernah memperbaiki masalah sebenarnya.

Langkah 1: Tetapkan baseline yang bisa diulang

Untuk mengukur sebelum mengoptimalkan, Anda butuh titik awal yang bisa dipercaya. Baseline adalah tindakan yang sama, diukur dengan cara yang sama, dalam kondisi yang sama.

Mulailah dengan satu perjalanan pengguna nyata, bukan “seluruh situs.” Pilih sesuatu yang bisa Anda jelaskan dengan satu kalimat, seperti “buka halaman utama dan scroll ke grid produk pertama” atau “login dan buka dashboard.” Menjaganya sempit membuat angkanya lebih stabil dan langkah berikutnya lebih jelas.

Selanjutnya, pilih 1 sampai 3 metrik yang cocok dengan perjalanan itu. Untuk tampilan halaman, pasangan umum adalah LCP (seberapa cepat konten utama muncul) dan TTFB (seberapa cepat server merespons). Untuk alur seperti checkout, Anda bisa melacak waktu menyelesaikan langkah 1 plus waktu respons API untuk panggilan pembayaran. Terlalu banyak metrik mempermudah untuk cherry-pick.

Tuliskan setup pengujian agar orang lain bisa mereproduksinya nanti. Perbedaan kecil bisa mengubah hasil:

  • Perangkat dan browser (termasuk versi)
  • Jaringan (wifi vs 4G, throttling on/off)
  • Status cache (cold vs warm)
  • Lokasi dan data uji (region, tipe akun, ukuran keranjang)
  • Jumlah pengulangan (misalnya, 5 kali dan gunakan median)

Terakhir, definisikan “cukup baik” untuk audiens Anda. Contoh: “LCP di bawah 2.5s pada ponsel kelas menengah, di 4G.” Jika Anda menggunakan Koder.ai, mengambil snapshot sebelum pengujian membantu menjaga baseline terkait dengan satu versi yang diketahui.

Langkah 2: Reproduksi slowdown dengan sengaja

Sebelum Anda profiling apapun, buat masalah itu terjadi lagi sesuai permintaan. Jika Anda tidak bisa mengulanginya, Anda tidak bisa mempercayai hasilnya.

Mulailah dari apa yang dirasakan orang, bukan asumsi Anda. Apakah itu render pertama yang lambat? Klik yang menggantung sebelum ada perubahan? Tunggu lama setelah submit form? Pilih momen yang dikeluhkan pengguna dan fokus di sana.

Lakukan run cepat untuk mengonfirmasi slowdown nyata dan dapat diulang. Jaga semua hal lain sama: halaman yang sama, perangkat yang sama, jaringan yang sama jika bisa. Lalu catat trigger dan momen tepatnya terasa lambat, seperti “setelah klik Pay, tombol membeku selama satu detik” atau “scroll stutter saat daftar produk muncul.”

Cara sederhana menjaga agar dapat diulang adalah skrip kecil: buka halaman dari tab baru, lakukan aksi yang lag, catat titik persis saat melambat, lalu ulangi sekali untuk konfirmasi.

Ambil satu atau dua rekaman baseline, bukan puluhan. Anda ingin cukup bukti untuk mengatakan, “Ya, slowdown terjadi, dan terjadi tepat di sini.”

Langkah 3: Profil untuk menemukan bottleneck utama

Verifikasi setelah deploy
Kirim build uji dan ukur ulang perjalanan yang sama di bawah kondisi yang sama.

Setelah Anda bisa mereproduksi slowdown, berhenti menebak. Buka profiler (untuk kebanyakan orang, panel Performance di browser) dan rekam satu run dari interaksi yang lambat. Tujuannya bukan menemukan setiap isu. Tujuannya adalah mengetahui ke mana waktu pergi.

Mulailah dari blok waktu terbesar. Lonjakan kecil bisa nyata, tapi jarang menjelaskan delay yang terasa sendiri.

Cara membaca rekaman yang berguna adalah mengelompokkan waktu ke beberapa ember: network dan loading (menunggu request), scripting di main thread (tugas JS panjang), rendering dan paint (layout dan style), celah idle (menunggu hal lain), dan kerja yang diulang (langkah mahal yang terjadi berulang).

Kesalahan umum adalah bingung antara response server yang lambat dan kerja klien yang lambat. Jika timeline menunjukkan celah panjang saat request sedang berjalan, bottleneck Anda mungkin network atau backend. Jika menunjukkan long tasks di main thread, Anda punya masalah front end meski network cepat.

Sebelum mengubah apa pun, tulis hipotesis singkat dan dapat diuji berdasarkan apa yang Anda lihat. Contoh: “Halaman terasa lambat karena main thread diblokir oleh parsing JSON tepat setelah respons API tiba.” Kalimat itu menyiapkan langkah berikutnya.

Langkah 4: Ubah satu hal, dengan sengaja

Setelah Anda mengidentifikasi bottleneck yang kemungkinan besar, tahan keinginan untuk “memperbaiki semuanya.” Ubah satu variabel sehingga Anda bisa menghubungkan sebab dan akibat.

Jaga perubahan kecil dan mudah dibatalkan. Rework besar membuat hasil kabur: jika performa membaik, Anda takkan tahu kenapa. Jika memburuk, rollback jadi berisiko.

Perubahan satu-hal yang baik itu spesifik dan dapat diuji. Contoh: menunda atau menghapus satu skrip pihak ketiga yang memblokir rendering, mengompresi satu gambar besar di halaman lambat, menambahkan caching pada satu query database mahal, memecah satu komponen UI berat agar merender lebih sedikit kerja awal, atau mengurangi kerja di satu loop panas yang Anda lihat di profiler.

Sebelum menyentuh kode, tulis apa yang Anda ubah, mengapa memilihnya, dan apa yang Anda harapkan membaik (mis. “mengurangi waktu main-thread” atau “memotong waktu DB separuh”).

Jika tim Anda menggunakan platform yang mendukung snapshot dan rollback (seperti Koder.ai), ambil snapshot tepat sebelum perubahan sehingga “kecil dan bisa dibalik” nyata, bukan aspirasi.

Langkah 5: Verifikasi dampak dan hindari kesimpulan berisik

Ukur di lingkungan nyata
Deploy dan bandingkan TTFB serta timing pengguna antar versi dengan skrip yang sama.

Anda sudah mengubah satu hal. Sekarang buktikan itu membantu.

Jalankan lagi setup uji yang sama persis seperti yang digunakan untuk baseline: perangkat yang sama, versi browser yang sama, rute dan flow yang sama, dan jumlah run yang sama. Bandingkan sebelum vs setelah menggunakan metrik yang sama. Jangan menambahkan metrik baru di tengah jalan hanya karena itu terlihat lebih baik.

Noise adalah alasan paling umum tim berdebat soal performa. Waspadai perbedaan warm vs cold cache, ekstensi atau proses latar, kondisi jaringan atau pengaturan VPN yang berbeda, variasi server (menit sepi vs menit sibuk), dan perbedaan antara “langsung setelah deploy” dan keadaan steady.

Jika median membaik tapi kasus terburuk malah lebih buruk, itu tradeoff nyata. Putuskan apa yang penting untuk pengguna Anda, lalu dokumentasikan keputusan: pertahankan perubahan, rollback, atau tulis hipotesis baru dan uji lagi.

Perangkap umum yang membuat pekerjaan performa terasa mustahil

Pekerjaan performa jadi membingungkan ketika Anda mengukur hal yang salah atau mengubah terlalu banyak sekaligus. Anda bisa membakar banyak usaha tanpa kemenangan jelas, bahkan jika aplikasi Anda membaik.

Satu kesalahan umum adalah memperlakukan skor tunggal sebagai tujuan. Skor bisa berguna, tapi pengguna tidak mengalami “nilai 92.” Mereka mengalami “halaman menampilkan konten dalam 2 detik” atau “menekan Beli langsung merespons.” Pilih satu hasil yang terlihat pengguna dan ukur secara konsisten.

Perangkap lain adalah hanya menguji di laptop bertenaga. Banyak slowdown muncul di ponsel kelas menengah, jaringan yang tidak stabil, atau saat CPU sibuk. Jika Anda hanya memprofil pada perangkat terbaik yang Anda miliki, Anda bisa melewatkan bottleneck.

Kebingungan biasanya datang dari pola seperti memperbaiki yang paling mudah alih-alih yang paling memakan waktu, menggabungkan beberapa tweak jadi satu perubahan, mengganti jalur uji tiap kali, melewatkan re-test karena terasa lebih cepat, atau menyatakan kemenangan tanpa mengulang baseline yang sama.

Jika Anda membangun aplikasi dengan platform berbasis chat seperti Koder.ai, disiplin yang sama berlaku: satu perubahan, lalu verifikasi pada flow yang sama agar Anda bisa mempercayai hasilnya.

Daftar cek cepat yang bisa Anda pakai tiap kali

Jika Anda menjaga satu kebiasaan, jaga ini: ukur sebelum mengoptimalkan. Tujuannya bukan data tanpa akhir. Ini loop yang dapat diulang dan Anda percayai.

Beri nama perjalanan pengguna yang tepat. “Homepage lambat” terlalu umum. “Dari halaman produk ke klik Beli sampai melihat konfirmasi” memberi Anda jalur klik yang bisa diulang.

Gunakan daftar cek ini:

  • Tulis perjalanan sebagai skrip singkat agar siapa pun bisa mengulangnya.
  • Bekukan setup (perangkat, browser, jaringan, lokasi jika memungkinkan).
  • Ambil angka baseline plus rekaman baseline.
  • Profil, pilih bottleneck terbesar, dan ubah hanya satu hal.
  • Uji ulang, rekam angka baru, dan tulis keputusan.

Versi tenang dari pekerjaan performa itu sederhana: satu jalur, satu setup, satu perubahan, satu hasil terverifikasi.

Contoh: memperbaiki checkout yang lambat tanpa menebak

Ubah satu hal dengan aman
Ambil snapshot sebelum perubahan agar satu tweak tetap aman dan mudah dibandingkan.

Keluhan umum: checkout terasa lambat tepat setelah pelanggan klik “Pay.” Orang mulai menebak (gambar, font, tombol). Sebagai gantinya, perlakukan ini seperti uji yang bisa Anda ulang.

Tetapkan baseline yang bisa Anda jalankan ulang. Pilih satu perangkat dan satu jalur (cart → checkout → Pay → confirmation). Nyalakan throttling jaringan (misalnya, Fast 3G) dan pertahankan sama setiap run. Ukur satu angka sederhana: waktu dari klik “Pay” sampai melihat layar konfirmasi.

Lalu profil momen yang sama dan lihat ke mana waktu pergi. Anda biasanya memilih antara tiga ember: network (request panjang atau terlalu banyak request), server (panggilan payment lambat meski browser idle), atau main thread (browser sibuk menjalankan JavaScript dan tak bisa memperbarui UI).

Bayangkan profil menunjukkan bahwa setelah klik “Pay,” browser mengirim request analytics dan memanggil script pemeriksaan fraud, sehingga request pembayaran menunggu di belakang keduanya. Itu bukan masalah “percepat semuanya.” Itu satu langkah yang memblokir.

Lakukan satu perubahan dengan sengaja. Contoh: mulai request pembayaran segera, dan kirim analytics hanya setelah layar konfirmasi ditampilkan.

Verifikasi dengan setup yang sama: throttling sama, langkah sama, beberapa run. Jika waktu konfirmasi turun dan error tidak meningkat, Anda dapat kemenangan nyata. Juga cek sekilas bahwa Anda tidak merusak refund, retry, atau proteksi double-submit.

Langkah berikutnya: buat alur kerja jadi kebiasaan tim

Performa tetap terkendali ketika itu jadi rutinitas, bukan misi penyelamatan. Jadikan pengukuran tindakan default, bahkan ketika semuanya terasa baik.

Pilih set kecil metrik yang tim Anda akan selalu lacak. Jaga konsistensi sehingga tren mudah dilihat:

  • Page load: Largest Contentful Paint (LCP)
  • Interaktivitas: Interaction to Next Paint (INP)
  • Stabilitas: Cumulative Layout Shift (CLS)
  • Kecepatan API: p95 response time untuk endpoint kunci
  • Error: tingkat error klien dan server

Bangun loop di sekitar metrik-metrik itu. Cek baseline mingguan seringkali cukup. Ketika metrik bergeser, itu pemicu Anda untuk mereproduksi slowdown, memprofilnya, mengubah satu hal, dan verifikasi dampak.

Simpan log performa sederhana dalam format apapun yang tim Anda gunakan. Catat apa yang Anda ukur (termasuk perangkat, jaringan, dan build), apa yang Anda ubah, dan apa yang terjadi pada angka setelahnya.

Jika Anda membangun dengan Koder.ai, Planning Mode dapat membantu menulis perjalanan pengguna dan metrik yang Anda pedulikan sebelum mengubah apapun. Lalu gunakan snapshot dan rollback untuk menjaga eksperimen aman: snapshot, terapkan satu perubahan, uji ulang, dan rollback jika hasil berisik atau lebih buruk.

Dalam perencanaan atau review, satu pertanyaan menjaga budaya tetap sehat: “Apa yang kita ukur, dan apa yang berubah?”

Pertanyaan umum

Why does optimizing first usually waste time?

Karena Anda bisa menghabiskan waktu berjam-jam memperbaiki sesuatu yang sebenarnya bukan penyebab keterlambatan. Mulailah dengan membuktikan ke mana waktu pergi (network, server, main thread, rendering), lalu targetkan bottleneck terbesar.

What’s a “baseline" and how do I make it repeatable?

Tulis satu tindakan spesifik dan kondisi persisnya, lalu ulangi:

  • Perangkat + versi browser yang sama
  • Profil jaringan yang sama (atau throttling)
  • Status cache yang sama (cold atau warm)
  • Data uji yang sama (akun, ukuran keranjang, region)
  • Beberapa kali pengulangan (gunakan median)

Jika Anda tidak bisa mengulanginya, Anda tidak bisa mempercayainya.

Which metrics should I track for a single journey?

Pilih 1–3 metrik yang cocok dengan apa yang pengguna rasakan:

  • Page load: LCP (konten utama muncul), TTFB (server merespons)
  • Interaksi: INP (seberapa responsif terasa)
  • Stabilitas: CLS (pergeseran tata letak)
  • Backend: p95 waktu endpoint untuk API spesifik yang Anda tunggu

Hindari melacak terlalu banyak angka sekaligus agar tidak tergoda melakukan cherry-pick.

What’s the difference between lab data and real user data?

Data lab ditangkap dalam setup terkontrol dan dapat diulang (bagus untuk debugging). Data pengguna nyata merefleksikan perangkat dan jaringan sebenarnya (bagus untuk memprioritaskan).

Kebiasaan yang baik: gunakan data pengguna nyata untuk menemukan perjalanan terburuk, lalu pakai profil lab untuk menjelaskan mengapa mereka lambat dan menguji perbaikan dengan aman.

How do I stop performance debates from becoming opinion fights?

Perlakukan ini seperti laporan bug:

  • Langkah tepat untuk mereproduksi
  • Momen yang terasa lambat
  • Apa yang Anda ukur (metrik + nilai)
  • Satu rekaman (profil atau trace) yang menunjukkan ke mana waktu pergi

Ini menggeser pembicaraan dari opini (“pasti gambarnya”) ke bukti.

What should I look for first in a performance profile?

Rekam interaksi yang lambat di profiler dan cari bagian waktu terbesar:

  • Celah panjang saat menunggu request → kemungkinan network/backend
  • Tugas panjang di main thread → JavaScript atau kerja UI berat
  • Banyak layout/style/paint → masalah rendering
  • Kerja mahal berulang → re-render atau loop yang tidak perlu

Lalu tulis hipotesis satu kalimat yang bisa Anda uji.

Why is “change one thing” so important?

Ini menjaga hubungan sebab-akibat jelas. Jika Anda mengubah lima hal dan halaman jadi lebih cepat, Anda tidak akan tahu apa yang bekerja. Jika jadi lebih lambat, rollback jadi berisiko.

Aturan praktis: satu perubahan yang bisa Anda jelaskan, satu metrik yang Anda harapkan bergerak, lalu ukur ulang.

How do I verify a change actually helped (and wasn’t just noise)?

Lakukan setup uji yang sama dan bandingkan sebelum/ sesudah dengan metrik yang sama.

Untuk mengurangi noise:

  • Jalankan beberapa kali dan gunakan median
  • Jaga status cache konsisten
  • Nonaktifkan ekstensi/proses latar jika memungkinkan
  • Uji pada beban server yang serupa (hindari membandingkan menit sepi dengan menit sibuk)

Pertahankan perubahan hanya jika angka membaik dalam kondisi yang sama.

What are the most common mistakes that make performance feel impossible?

Kesalahan umum:

  • Mengoptimalkan yang paling mudah, bukan yang paling memakan waktu
  • Menguji hanya pada laptop bertenaga tinggi
  • Mengganti perjalanan pengguna tiap run
  • Merayakan skor alih-alih hasil yang terlihat pengguna
  • Melewatkan pengujian ulang karena terasa lebih cepat

Tetap pada satu perjalanan, satu setup, dan satu hasil terverifikasi.

How can Koder.ai snapshots and Planning Mode help with performance work?

Gunakan untuk membuat eksperimen aman dan terbandingkan:

  • Ambil snapshot tepat sebelum perubahan performa sehingga Anda bisa revert cepat
  • Gunakan Planning Mode untuk menulis perjalanan, baseline, dan metrik keberhasilan sebelum edit
  • Mengekspor kode atau deploy boleh saja—tetapi pertahankan skrip uji yang sama supaya hasil tetap setara

Alat membantu, tapi kemenangan nyata adalah loop yang dapat diulang: baseline → profile → satu perubahan → verifikasi.

Related posts