- Menjaga ukuran situs web di bawah 14kB dapat mempercepat waktu muat secara signifikan dibandingkan 15kB
- Fenomena ini terjadi karena algoritme TCP slow start, yang membatasi jumlah data awal yang dikirim sehingga menimbulkan perbedaan kecepatan yang terasa
- 14kB kira-kira setara dengan kapasitas 10 paket TCP yang biasanya dikirim server pada awal koneksi
- Di lingkungan berlatensi tinggi seperti internet satelit, satu tambahan round trip (RTT) dapat menyebabkan penundaan lebih dari 612ms
- Dalam praktiknya, menaruh konten utama di bawah 14kB, atau menempatkan resource penting dalam 14kB pertama, efektif untuk optimasi performa web
Gambaran umum dan prinsip utama
- Bahwa ukuran situs web yang lebih kecil akan dimuat lebih cepat adalah fakta yang sudah dikenal luas
- Namun, saat melewati batas dari 14kB ke 15kB, bisa muncul perbedaan besar pada kecepatan respons awal, sesuatu yang tidak selalu diduga
- Perbedaan kecepatan antara halaman 15kB dan 16kB kecil, tetapi antara 14kB dan 15kB bisa mencapai 612ms
Apa itu TCP
- Transmission Control Protocol (TCP) berjalan di atas IP (Internet Protocol) dan bertugas menjamin keandalan paket
- Browser web mengirim beberapa paket TCP saat melakukan permintaan HTTP
- Jika hanya memakai IP, tidak ada cara untuk memastikan apakah paket sudah sampai, sehingga TCP menyediakan fungsi acknowledgement paket (ACK)
- Server mula-mula mengirim sejumlah kecil paket, lalu setelah menerima ACK dari browser, server mengirim paket tambahan
- Jika tidak ada ACK, prosedur pengiriman ulang paket akan dijalankan
Apa itu TCP slow start
- TCP slow start adalah algoritme di mana server secara bertahap menaikkan jumlah paket yang dikirim untuk mengetahui kualitas koneksi jaringan (bandwidth)
- Pada awal koneksi, server hanya mengirim sedikit paket, umumnya 10 paket
- Jika komputer pengunjung mengirim ACK dengan normal, jumlah paket yang dikirim akan ditingkatkan menjadi dua kali lipat
- Jika terjadi ACK yang hilang, setelah itu paket akan dikirim dengan kecepatan lebih lambat
- Implementasi nyata bisa berbeda dalam detail, tetapi konsepnya tetap sama
Dasar batas 14kB
- Kebanyakan server dalam slow start mengirim 10 paket TCP sekaligus
- Ukuran maksimum paket TCP adalah 1500 byte, tetapi setelah dikurangi header (40 byte), data efektifnya menjadi 1460 byte
- Karena itu, 10 x 1460 = 14600 byte (sekitar 14kB) adalah batas maksimum pengiriman pertama
- Jika situs web atau resource penting dijaga di bawah 14kB (atau puluhan kB data asli bila memakai kompresi), konten bisa tampil tanpa penundaan round trip tambahan di awal
Seberapa besar penundaan yang disebabkan satu round trip
Contoh internet satelit
- Contoh khas lingkungan berlatensi tinggi adalah pengguna internet satelit (kapal pengeboran minyak, kapal pesiar, dan sebagainya)
- Saat ponsel meminta halaman depan, perjalanan router → antena satelit → satelit di luar angkasa → stasiun bumi → server membutuhkan puluhan hingga ratusan ms di tiap segmen
- Satu round trip transmisi penuh mencakup dua kali perjalanan ke luar angkasa, perpindahan antar-segmen jaringan, hingga pemrosesan server, sehingga menambah latensi sekitar 612ms
- Jika memakai HTTPS, hal ini bisa meningkat hingga 1836ms karena handshake tambahan
Latensi di jaringan darat
- Di jaringan seluler seperti 2G dan 3G, latensi 100~1000ms juga bisa terjadi
- Dalam kondisi padat, server kelebihan beban, atau ada packet loss, penundaan tambahan dapat muncul
Strategi optimasi situs web dengan aturan 14kB
- Intinya adalah membuat situs web atau halaman sekecil mungkin
- Idealnya, setiap halaman dirancang agar ukuran transfer terkompresinya tidak melebihi 14kB
- Dengan kompresi, konten sebenarnya bisa mencapai ~50kB
- Dengan mengurangi sebagian besar elemen yang tidak perlu seperti video autoplay, pop-up, tracker, serta JS/CSS yang tidak diperlukan, target ini cukup realistis
- Jika sulit membuat keseluruhan halaman muat dalam 14kB, hal terpenting adalah menaruh resource inti dan konten utama dalam 14kB pertama (CSS, JS, teks utama, dan sebagainya)
- Header HTTP (tidak bisa dikompresi) dan gambar juga termasuk dalam batas 14kB itu (jadi sebaiknya hanya memuat yang benar-benar perlu, bagian yang tampak, atau memakai placeholder)
Pengecualian aturan 14kB dan isu protokol modern
- Aturan 14kB bukan penyederhanaan yang berlebihan, tetapi ada beberapa pengecualian
- Beberapa server memperluas initial window menjadi 30 paket
- TLS handshake dapat memungkinkan jendela yang lebih besar
- Jumlah paket yang bisa dikirim per rute dapat di-cache sehingga pada koneksi berikutnya server bisa mengirim lebih banyak
- Bahkan di HTTP/2, praktik server memulai dari 10 paket karena TCP slow start secara umum tidak banyak berubah
- Di HTTP/3 dan QUIC pun, aturan 14kB tetap direkomendasikan secara resmi
Ringkasan dan materi rujukan
- Dasar teknis dan materi penjelasan tambahan dapat dilihat melalui tautan-tautan terkait
- Pertama diterbitkan: 2022-08-25, terakhir diperbarui: 2022-08-26, penulis: Nathaniel, tag terkait: performa web, HTTP, TCP
Tautan referensi
- Struktur frame Ethernet dan header TCP, materi tambahan tentang latensi dan bandwidth, spesifikasi TCP/QUIC, dan lain-lain
1 komentar
Komentar Hacker News
Pengembang perangkat lunak perlu memberi perhatian lebih pada lapisan media, terutama poin penulis tentang keandalan dan latensi 3G/5G yang sangat berkesan. Radio hampir selalu mengalami retransmisi, dan pada sebagian besar komunikasi HTTP paket harus tiba berurutan agar UI bisa diperbarui. Bahkan satu permintaan REST pun sebenarnya hanya menjadi satu paket jika permintaan dan responsnya masing-masing di bawah 1400 byte. Jika lebih besar dari itu, permintaan 'tunggal' tersebut sebenarnya terpecah menjadi beberapa paket. Jika salah satu di antaranya bermasalah, semua paket tetap harus tiba berurutan agar layar bisa diperbarui dengan benar. Jika ingin bereksperimen, aktifkan mode 3G dan packet loss di Chrome DevTools lalu uji; Anda akan melihat bahwa hanya dengan satu optimasi kecil saja responsivitas UI bisa meningkat drastis. Karena itu, ada alasan yang kuat untuk membuat API dan UI sekecil mungkin
Ukuran transfer homepage saya 7.0kB dalam keadaan terkompresi
Target 14kB memang cukup menantang, tetapi gagasan membatasinya dalam 10 paket awal juga menarik. Ada proyek seperti 512kb.club yang fokus pada ukuran situs seperti saya. Itu tempat membandingkan ukuran situs seperti skor golf. Situs saya(anderegg.ca) sebelum didaftarkan total semua resource-nya 71kB. Berkat proyek ini saya juga jadi tahu Cloudflare Radar, yang punya alat bagus untuk analisis situs dan pengukuran ukuran halaman. Tujuan utamanya memang dashboard internet secara keseluruhan, tapi di dalamnya juga ada alat analisis ukuran halaman
Jika ingin bereksperimen dengan cara yang lebih seru, ukuran initial window (IW) bisa diatur dari sisi server. Misalnya bisa disesuaikan seperti di bawah ini
Hal yang dijelaskan dalam tulisan berikut juga berlaku: Blog Cloudflare - ISP Rusia hanya mengizinkan sampai 16KB sehingga sebagian besar penelusuran web menjadi mustahil. Menurut analisis Cloudflare, ISP Rusia membatasi internet pengguna domestik mereka lewat throttling sehingga hanya 16KB pertama per aset web yang bisa dimuat
Irisan antara orang yang tidak tahu apa itu TCP Slow Start dan orang yang cukup peduli untuk memikirkan penundaan pemuatan situs sampai tingkat sangat detail itu sangat kecil. Startup seharusnya fokus menjadi startup dulu, dan hanya perusahaan besar yang punya keleluasaan untuk terobsesi dengan optimasi semacam ini
Homepage saya 17.2KB! (di luar dependensi) Ini halaman pribadi, dan saya benar-benar serius mengoptimalkannya sampai berhasil mendapat nilai penuh 100 di Lighthouse. Dulu saya kira mustahil, tapi ternyata berhasil. Sebagai catatan, ini dibuat dengan Rails. Optimasi seperti ini benar-benar layak dilakukan. Pengalaman halaman yang muncul secepat kilat tanpa terasa tidak responsif itu sendiri sangat memuaskan
Saya rasa tulisan ini punya dua kelemahan logis
Generasi sekarang cenderung membuat bahkan situs web statis sederhana dengan framework seperti Next.js. Rasanya agak disayangkan bahwa era HTML+CSS+js kini memudar
Selain latensi, meminimalkan konsumsi sumber daya adalah syarat penting untuk masa depan yang berkelanjutan. Dampak jaringan terhadap lingkungan juga sama sekali tidak kecil. Sayang rasanya nuansa komentar di sini terdengar agak menyindir. Memang optimasi ini bukan solusi pamungkas, tetapi saya berharap pengurangan konsumsi energi lebih ditekankan