Speculation Rules API: Prerender dan Prefetch Instan di Chrome

Foto oleh Tyler Hardie on Unsplash
Ini adalah API browser yang memungkinkan Anda mendeklarasikan, dalam sebuah script JSON bertipe speculationrules, URL mana yang harus di-prefetch atau di-prerender browser sebelum pengguna mengeklik, sehingga navigasi berikutnya terasa instan. Ia menggantikan resource hint prerender lama dengan sintaks fleksibel berbasis daftar URL eksplisit atau document rule yang mencocokkan tautan di halaman.
Prefetch mengunduh respons dokumen berikutnya sehingga navigasi melewati pengambilan jaringan, sementara prerender melangkah lebih jauh dan merender halaman sepenuhnya di latar belakang sehingga muncul seketika saat diklik. Prerender lebih cepat bagi pengguna tetapi memakan lebih banyak CPU dan memori serta bisa memicu efek samping halaman, jadi pakai lebih hati-hati daripada prefetch.
Eagerness (conservative, moderate, eager, atau immediate) memberi tahu browser seberapa agresif menindaklanjuti sebuah rule. Conservative menunggu sampai pointer atau sentuhan turun, moderate bertindak saat hover, dan eager atau immediate bertindak lebih awal. Ini memungkinkan Anda menyeimbangkan navigasi instan dengan prefetch, prerender, dan bandwidth yang terbuang.
Didukung di browser berbasis Chromium seperti Chrome dan Edge. Sampai 2026 Safari dan Firefox belum mendukungnya, jadi perlakukan sebagai progressive enhancement: browser yang tidak memahami script speculationrules cukup mengabaikannya dan situs Anda tetap berjalan normal.
Prefetch Link Next.js mengambil data rute dan potongan JavaScript untuk tautan di viewport, di dalam framework. Speculation Rules API adalah mekanisme native browser yang bisa mem-prerender seluruh dokumen berikutnya, bukan sekadar mengambil datanya. Keduanya bisa saling melengkapi, tetapi Speculation Rules bekerja untuk navigasi apa pun dan bisa prerender penuh, yang tidak dilakukan prefetch Link.

Foto oleh Tyler Hardie on Unsplash
Ringkasan Utama
Speculation Rules API memungkinkan Anda menambah blok JSON script type speculationrules yang memberi tahu browser Chromium URL mana yang perlu di-prefetch atau di-prerender sebelum diklik. Prefetch mengunduh body respons; prerender merender penuh halaman di tab tersembunyi untuk navigasi hampir instan. Pengaturan eagerness mengontrol seberapa agresif spekulasi berjalan.
Jeda antara klik dan halaman yang tampil adalah tempat pengguna merasakan situs sebagai lambat. Saya bisa memangkas milidetik di sisi server, tetapi kemenangan tunggal terbesar sering kali adalah mengerjakan pekerjaan itu sebelum klik terjadi sama sekali. Speculation Rules API adalah cara native browser untuk melakukan persis itu: Anda mendeklarasikan halaman mana yang kemungkinan dikunjungi pengunjung berikutnya, lalu Chromium mengambil atau bahkan merender penuh halaman tersebut di latar belakang.
API ini menggantikan resource hint lama yang lebih terbatas seperti link rel prefetch dengan tata bahasa JSON yang bisa mencocokkan tautan berdasarkan pola URL, memilih antara prefetch yang murah dan prerender penuh, serta menyetel seberapa agresif browser bertindak. Di tulisan ini saya membahas sintaksnya, trade-off antara prefetch dan prerender, level eagerness, perbandingannya dengan komponen Link Next.js, dan jebakan yang saya temui di produksi.
Anda mengaktifkannya dengan menyisipkan tag script bertipe speculationrules ke dalam halaman. Isinya adalah objek JSON dengan dua kunci yang mungkin, prefetch dan prerender, masing-masing memuat sebuah array aturan. Bentuk paling sederhana adalah list rule: Anda menyebutkan URL persis yang ingin dispekulasikan browser. Deteksi fitur cukup satu baris — HTMLScriptElement.supports dengan argumen speculationrules mengembalikan true di tempat API ini ada.
<script type="speculationrules">
{
"prefetch": [
{
"source": "list",
"urls": ["/pricing", "/docs/getting-started"]
}
],
"prerender": [
{
"source": "list",
"urls": ["/checkout"]
}
]
}
</script>Prefetch hanya mengunduh body respons halaman target dan menyimpannya di cache dalam memori. Ia tidak mengambil subresource, dan tidak mengeksekusi JavaScript halaman. Biayanya rendah, dan hasilnya saat navigasi adalah HTML sudah tersedia — Anda melewati perjalanan jaringan tetapi tetap perlu mem-parse, merender, dan menjalankan skrip setelah klik.
Prerender melangkah jauh lebih dalam: browser memuat halaman ke tab tersembunyi, mengambil setiap subresource, dan menjalankan JavaScript-nya, sehingga aktivasi saat klik nyaris instan. Biayanya pun tinggi — kira-kira setara membuka halaman di iframe tak terlihat. Prerender bersifat same-origin secara default; prerender same-site lintas origin membutuhkan header opt-in eksplisit dari target.
Jadikan prefetch sebagai default yang aman dan tingkatkan sebuah tautan menjadi prerender hanya saat Anda yakin ia akan diklik — tombol checkout, halaman berikutnya pada paginasi, hasil pencarian teratas. Prerender memberi kecepatan paling besar tetapi menghabiskan bandwidth, memori, dan CPU paling banyak, jadi ia harus dipantaskan, bukan ditaburkan di mana-mana.
Menuliskan daftar URL secara manual tidak skalabel untuk situs yang kaya konten. Document rules menyelesaikannya: alih-alih urls, Anda memberikan klausa where yang mencocokkan tautan yang sudah ada di halaman. href_matches menerima URL Pattern, dan selector_matches menerima selektor CSS, lalu Anda menggabungkannya dengan and dan not. Aturan di bawah ini men-prerender setiap tautan same-origin kecuali rute logout dan apa pun yang ditandai sebuah kelas sebagai tidak aman.
<script type="speculationrules">
{
"prerender": [
{
"where": {
"and": [
{ "href_matches": "/*" },
{ "not": { "href_matches": "/logout" } },
{ "not": { "selector_matches": ".no-prerender" } }
]
},
"eagerness": "moderate"
}
]
}
</script>Field eagerness menentukan kapan browser bertindak atas sebuah aturan. Ada empat nilai, dan default-nya berbeda menurut jenis aturan — list rule default ke immediate, document rule default ke conservative:
Chrome membatasi spekulasi untuk melindungi perangkat: pada eagerness immediate atau eager ia mengizinkan hingga 50 prefetch dan 10 prerender, tetapi hanya 2 masing-masing untuk level berbasis interaksi moderate dan conservative. Spekulasi berlebihan memboroskan bandwidth, memori, dan CPU pengguna — dan setiap prerender yang tak pernah diklik adalah pemborosan murni, jadi cocokkan eagerness dengan kemungkinan klik yang nyata.
Jika Anda membangun dengan Next.js, komponen Link sudah melakukan prefetch — tetapi itu mekanisme yang berbeda, bukan Speculation Rules API. Next.js mem-prefetch payload rute itu sendiri, data RSC dan JavaScript yang diperlukan untuk transisi sisi klien, saat sebuah Link masuk viewport di produksi. Speculation Rules adalah fitur browser yang bisa mem-prefetch atau merender penuh navigasi dokumen sungguhan. Keduanya saling melengkapi, bukan saling menggantikan:
| Aspek | Next.js Link prefetch | Speculation Rules API |
|---|---|---|
| Siapa yang menjalankan | Framework Next.js di aplikasi Anda | Browser Chromium itu sendiri |
| Apa yang dimuat | Payload RSC rute dan JS untuk transisi klien | Dokumen penuh: HTML untuk prefetch, atau halaman terender untuk prerender |
| Pemicu | Link masuk viewport, hanya di produksi | Aturan eagerness — immediate, eager, moderate, atau conservative |
| Jenis navigasi | Transisi SPA sisi klien di dalam aplikasi | Navigasi browser sungguhan ke sebuah URL |
| Dukungan browser | Browser apa pun yang menjalankan aplikasi React Anda | Chromium saja — Chrome dan Edge, bukan Firefox atau Safari |
Spekulasi itu ampuh, tetapi beberapa mode kegagalan menggigit di produksi jika Anda tidak hati-hati:
Penjaga analitiknya kecil. Google Analytics dan Google Publisher Tag sudah memperhitungkan prerendering, tetapi untuk apa pun yang buatan sendiri Anda menunda inisialisasi hingga halaman benar-benar ditampilkan:
if (document.prerendering) {
document.addEventListener(
"prerenderingchange",
initAnalytics,
{ once: true }
);
} else {
initAnalytics();
}Dukungan browser adalah catatan jujurnya: Speculation Rules API hanya untuk Chromium. Chrome merilis prerendering via speculation rules di versi 109 dan field eagerness di versi 121, dan Edge mengikuti rilis tersebut. Firefox dan Safari tidak mendukungnya. Itu tidak masalah — ini adalah progressive enhancement, jadi browser yang tak mendukung cukup bernavigasi seperti biasa sementara pengguna Chromium mendapat pengalaman instan. Mulai dengan satu document rule conservative pada satu tautan berminat tinggi, pantau activation rate Anda, lalu perluas dari sana.