Pengantar
Pengambilan Data NoState adalah mekanisme baru di Chrome yang merupakan alternatif dari proses pra-rendering yang tidak digunakan lagi, yang digunakan untuk mendukung fitur seperti <link rel="prerender">
. Seperti pra-rendering, fitur ini mengambil resource terlebih dahulu; tetapi tidak seperti pra-rendering,
fitur ini tidak mengeksekusi JavaScript atau merender bagian mana pun dari halaman terlebih dahulu. Tujuan Prefetch
NoState adalah menggunakan lebih sedikit memori daripada pra-rendering, sekaligus tetap mengurangi waktu pemuatan halaman.
Pengambilan Data NoState bukanlah API, melainkan mekanisme yang digunakan oleh Chrome untuk menerapkan berbagai API
dan fitur. Resource Hints API, serta
pramuat halaman oleh kolom URL Chrome, diimplementasikan menggunakan Pramuat NoState. Jika Anda menggunakan Chrome 63 atau yang lebih baru, browser Anda sudah
menggunakan Pengambilan Data Tanpa Status untuk fitur seperti <link rel="prerender">
.
Artikel ini menjelaskan cara kerja NoStatePrefetch, motivasi untuk memperkenalkannya, dan petunjuk untuk menggunakan histogram Chrome guna melihat statistik tentang penggunaannya.
Motivasi
Ada dua motivasi utama untuk memperkenalkan Pengambilan Data NoState:
Mengurangi penggunaan memori
Pengambilan Data NoState hanya menggunakan memori ~45 MiB. Mempertahankan pemindai pramuat adalah biaya memori utama untuk Prefetch NoState dan biaya ini tetap relatif konstan di berbagai kasus penggunaan. Meningkatkan ukuran atau volume pengambilan tidak memiliki efek yang signifikan pada jumlah memori yang digunakan oleh Pengambilan Data Tanpa Status.
Sebaliknya, pra-rendering biasanya menggunakan memori sebesar 100 MiB dan konsumsi memori dibatasi hingga 150 MiB. Konsumsi memori yang tinggi ini membuatnya tidak cocok untuk perangkat bawah (yaitu RAM <= 512 MB). Akibatnya, Chrome tidak melakukan pra-rendering di perangkat kelas bawah, tetapi akan melakukan pra-koneksi.
Memfasilitasi dukungan fitur platform web baru
Dengan pra-rendering, tidak boleh ada tindakan yang ditampilkan kepada pengguna (misalnya, memutar musik atau video) atau tindakan stateful (misalnya, memodifikasi sesi atau penyimpanan lokal). Namun, mencegah tindakan ini terjadi saat merender halaman dapat menjadi hal yang sulit dan kompleks. Pra-Pengambilan NoState hanya mengambil resource terlebih dahulu: tidak menjalankan kode atau merender halaman. Hal ini mempermudah pencegahan tindakan stateful dan yang ditampilkan kepada pengguna.
Penerapan
Langkah-langkah berikut menjelaskan cara kerja Pengambilan Data NoState.
NoStatePrefetch dipicu.
Petunjuk resource pra-rendering (yaitu
<link rel="prerender">
) dan beberapa fitur Chrome akan memicu Pramuat NoState asalkan dua kondisi berikut terpenuhi: a) pengguna tidak menggunakan perangkat kelas bawah, dan b) pengguna tidak menggunakan jaringan seluler.Perender baru yang khusus dibuat untuk Pengambilan Data NoState.
Di Chrome, “perender” adalah proses yang bertanggung jawab untuk mengambil dokumen HTML, mengurainya, membuat hierarki rendernya, dan melukis hasilnya ke layar. Setiap tab di Chrome, serta setiap proses Pengambilan Data NoState, memiliki perendernya sendiri untuk memberikan isolasi. Hal ini membantu meminimalkan efek dari masalah yang terjadi (misalnya, tab error) serta mencegah kode berbahaya mengakses tab lain atau bagian lain sistem.
Resource yang dimuat dengan Prefetch NoState diambil. HTMLPreloadScanner kemudian memindai resource ini untuk menemukan subresource yang perlu diambil. Jika resource utama atau subresource-nya memiliki pekerja layanan terdaftar, permintaan ini akan melalui pekerja layanan yang sesuai.
Pengambilan Data Tanpa Status hanya mendukung metode HTTP GET; metode ini tidak akan mengambil sub-resource apa pun yang memerlukan penggunaan metode HTTP lainnya. Selain itu, crawler tidak akan mengambil resource apa pun yang memerlukan tindakan pengguna (misalnya, pop-up autentikasi, sertifikat klien SSL, atau penggantian manual).
Sub-resource yang diambil akan diambil dengan Prioritas Bersih “TIDAK ADA AKTIVITAS”.
Prioritas Net “TIDAK ADA AKTIVITAS” adalah Prioritas Net terendah di Chrome.
Semua resource yang diambil oleh Pengambilan Data NoState di-cache sesuai dengan header cache-nya.
Pengambilan Data NoState akan meng-cache semua resource kecuali resource dengan header Cache-Control
no-store
. Resource akan divalidasi ulang sebelum digunakan jika ada header responsVary
, header Cache-Controlno-cache
, atau jika resource sudah lebih dari 5 menit.Perender dihentikan setelah semua subresource dimuat.
Jika waktu tunggu subresource habis, perender akan dihentikan setelah 30 detik.
Browser tidak melakukan perubahan status apa pun selain memperbarui penyimpanan cookie dan cache DNS lokal. Hal ini penting untuk disebutkan karena ini adalah “NoState” di “NoState Prefetch”.
Pada tahap ini dalam proses pemuatan halaman "normal", browser mungkin akan melakukan hal-hal yang akan mengubah status browser: misalnya, mengeksekusi JavaScript, memutasi
sessionStorage
ataulocalStorage
, memutar musik atau video, menggunakan History API, atau meminta pengguna. Satu-satunya perubahan status yang terjadi di Pengambilan Data Tanpa Status adalah pembaruan cache DNS saat respons tiba dan pembaruan penyimpanan cookie jika respons berisi headerSet-Cookie
.Saat diperlukan, resource akan dimuat ke jendela browser.
Namun, tidak seperti halaman pra-rendering, halaman tidak akan langsung terlihat - halaman masih perlu dirender oleh browser. Browser tidak akan menggunakan kembali perender yang digunakan untuk Pramuat NoState dan sebagai gantinya akan menggunakan perender baru. Tidak merender halaman terlebih dahulu akan mengurangi penggunaan memori NoStatePrefetch, tetapi juga mengurangi kemungkinan dampak yang dapat ditimbulkan pada waktu pemuatan halaman.
Jika halaman memiliki pekerja layanan, pemuatan halaman ini akan melalui pekerja layanan lagi.
Jika Pramuat NoState belum selesai mengambil sub-resource pada saat halaman diperlukan, browser akan melanjutkan proses pemuatan halaman dari tempat Pramuat NoState berhenti. Browser masih perlu mengambil resource, tetapi tidak sebanyak yang diperlukan jika Pramuat NoState belum dimulai.
Dampak pada Analytics untuk Web
Halaman yang dimuat menggunakan Prefetch NoState didaftarkan oleh alat analisis web pada waktu yang sedikit berbeda, bergantung pada apakah alat tersebut mengumpulkan data di sisi klien atau sisi server.
Skrip analisis sisi klien mendaftarkan kunjungan halaman saat halaman ditampilkan kepada pengguna. Skrip ini mengandalkan eksekusi JavaScript dan Pengambilan Data Tanpa Status tidak mengeksekusi JavaScript apa pun.
Alat analisis sisi server mendaftarkan metrik saat permintaan ditangani. Untuk resource yang dimuat melalui
Prefetch NoState, mungkin ada kesenjangan waktu yang signifikan antara saat permintaan ditangani dan saat
respons benar-benar digunakan oleh klien (jika digunakan sama sekali). Mulai Chrome 69, Prefetch NoState
menambahkan header Purpose: Prefetch
ke semua permintaan agar dapat dibedakan dari
penjelajahan normal.
Lihat
NoStatePrefetch dikirimkan pada Desember 2017 di Chrome 63. Saat ini digunakan untuk:
- Mengimplementasikan petunjuk resource
prerender
- Mengambil hasil pertama di hasil Google Penelusuran
- Mengambil halaman yang diprediksi kolom URL Chrome kemungkinan akan dikunjungi berikutnya
Anda dapat menggunakan Chrome Internals untuk melihat cara Anda menggunakan NoStatePrefetch.
Untuk melihat daftar situs yang telah dimuat dengan Pengambilan Data Tanpa Status, buka chrome://net-internals/#prerender.
Untuk melihat statistik tentang penggunaan Pramuat NoState, buka chrome://histograms dan telusuri “NoStatePrefetch”. Ada tiga histogram Pramuat NoState yang berbeda - satu untuk setiap kasus penggunaan Pramuat NoState:
- “NoStatePrefetch” (statistik untuk penggunaan berdasarkan petunjuk resource pra-rendering)
- “gws_NoStatePrefetch” (statistik untuk penggunaan oleh halaman hasil penelusuran Google)
- “omnibox_NoStatePrefetch” (statistik untuk penggunaan oleh kolom URL Chrome)