Gesaan dan konteks
Soalan HTTP, get laluan (gateway), dan prestasi ini sesuai untuk peranan backend, platform, dan infrastruktur. Asal mempunyai masa menunggu yang boleh dijangka sebelum HTML akhir siap. Anda mesti memutuskan sama ada untuk menghantar 103 dan mengelakkan pramuat yang salah, kegagalan penghuraian klien lama, dan muat turun pendua.
Perkara yang dinilai oleh penemu bual
- Membezakan semantik petunjuk 103 daripada semantik tindak balas akhir.
- Menggunakan masa berfikir pelayan (server think time), kestabilan sumber, dan capaian cache (cache hits) untuk menilai nilai manfaat.
- Mereka bentuk sandaran yang anggun pada HTTP/2 atau HTTP/3 dan bukannya menjadikan 103 sebagai laluan wajib.
- Memastikan bahawa pramuat tidak menghasilkan permintaan pendua, sumber yang salah, atau lebihan lebar jalur.
Soalan penjelasan
Sahkan sama ada masa menunggu berpunca daripada penjanaan HTML dinamik atau pemindahan rangkaian, sama ada permintaan itu adalah navigasi peringkat teratas, sama ada klien dan proksi mengendalikan 1xx dengan boleh dipercayai, sama ada URL sumber, versi, dan nilai as adalah stabil, dan sama ada sumber boleh dicache. Jika tindak balas akhir boleh dihantar serta-merta, pengepala Link biasa atau elemen link HTML adalah lebih mudah. Jika sumber berubah mengikut pengesahan, pengalihan semula, atau pemperibadian, petunjuk awal yang salah mungkin menelan kos yang lebih tinggi daripada penjimatan yang diperoleh.
Rangka jawapan 30 saat
103 ialah petunjuk sebelum tindak balas akhir, bukan hasil halaman. Semasa menjana HTML, asal boleh menghantar 103 dengan Link: rel=preload atau preconnect supaya klien menyediakan sumber secara selari; respons 200 akhir masih membekalkan pengepala yang berwibawa. Dayakannya hanya apabila masa berfikir pelayan adalah ketara, ramalan adalah stabil, dan HTTP/2 atau HTTP/3 boleh dipercayai. Ukur penggunaan cache, muat turun pendua, LCP, ralat, dan lebar jalur, dengan sandaran tindak balas akhir yang normal untuk klien yang lebih lama.
Perbincangan mendalam langkah demi langkah
- Cari tetingkap pengoptimuman. Ukur masa menunggu antara menerima permintaan dan mendapatkan HTML akhir. Jika asal mengembalikan 200 dengan cepat, 103 tidak mempunyai jurang masa yang berguna; kekalkan pramuat biasa dalam tindak balas akhir.
- Tentukan semantik 103. 103 menyatakan bahawa tindak balas akhir berkemungkinan mengandungi medan-medan ini. Klien boleh membuat persediaan secara spekulatif, tetapi petunjuk tidak boleh menggantikan atau mengubah semantik tindak balas akhir.
- Pilih kandungan petunjuk. Utamakan CSS, skrip, atau asal sambungan yang stabil, kritikal, dan boleh dicache. Versi sumber, jenis media, dan kelayakan rentas asal (cross-origin credentials) mesti sepadan dengan tindak balas akhir; jangan beri petunjuk untuk aset peribadi yang tidak pasti.
- Kekang protokol dan klien. Utamakan HTTP/2 atau HTTP/3 dan sahkan bahawa proksi, penyemak imbas, dan laluan pemerhatian mengendalikan 1xx dengan betul. Lumpuhkan atau turun taraf untuk klien HTTP/1.1 lama yang mungkin menganggap 103 sebagai muktamad.
- Kendalikan tindak balas akhir. Status akhir 200/3xx/4xx menentukan hasil halaman. Jika petunjuk 103 menjadi salah, klien akan mengikut tindak balas akhir; perantara tidak boleh menyimpan petunjuk tersebut dalam cache sebagai objek akhir.
- Ukur nilai dan kos. Bandingkan LCP paparan pertama (first-view LCP), capaian sumber, muat turun pendua, lebar jalur, dan ralat sebelum dan selepas pelaksanaan. Jika pengalihan semula, caching yang dilumpuhkan, atau varian sumber membazirkan pramuat, kecilkan set halaman atau alih keluar 103.
Model jawapan
Saya tidak akan mendayakan 103 di semua tempat hanya kerana ia kedengaran lebih pantas. Saya akan terlebih dahulu mengesahkan masa penjanaan HTML dinamik yang bermakna dan navigasi peringkat teratas. Jika URL CSS dan skrip kritikal, versi, as, dan tingkah laku cache adalah stabil, saya akan menghantar petunjuk melalui HTTP/2 atau HTTP/3:
HTTP/2 103 Early Hints
Link: </style.abc.css>; rel=preload; as=style
Link: </app.abc.js>; rel=preload; as=script
HTTP/2 200 OK
Content-Type: text/html; charset=utf-8
Link: </style.abc.css>; rel=preload; as=styleTindak balas akhir kekal berwibawa; 103 tidak menjanjikan bahawa sesuatu sumber pasti akan digunakan. Bagi klien lama, proksi yang tidak boleh dipercayai, atau halaman di mana pengalihan semula dan pemperibadian mengubah sumber, saya berundur kepada pengepala Link biasa dalam tindak balas akhir. Saya akan menjalankan eksperimen yang mengukur masa menunggu pelayan, LCP, capaian cache, muat turun pendua, lebar jalur, dan 4xx/5xx. Jika petunjuk tidak mengisi jurang masa yang nyata, saya akan mengalih keluar 103.
Kesilapan biasa
- Menganggap 103 sebagai status akhir → klien mungkin menyangka halaman telah berjaya dimuatkan → jelaskan bahawa tindak balas akhir yang menentukan hasilnya.
- Menyalin setiap sumber HTML ke dalam 103 → aset yang diperibadikan atau tidak boleh dicache dimuat turun dua kali → beri petunjuk hanya untuk sumber kritikal yang stabil.
- Mengabaikan keserasian protokol dan proksi → klien lama mungkin menghurai 1xx secara tidak betul → utamakan HTTP/2/3 dan sediakan sandaran.
- Mengukur LCP sahaja → lebar jalur pramuat yang dibazirkan boleh menyembunyikan peningkatan setempat → pantau juga permintaan pendua, cache, dan ralat.
- Meniadakan pengepala akhir yang berwibawa → petunjuk bukan metadata akhir → ulang medan
Linkyang diperlukan dalam tindak balas akhir.
Soalan susulan
Bagaimanakah 103 berbeza daripada HTTP/2 Server Push?
103 membolehkan klien memutuskan sama ada untuk mengambil sumber; Server Push menghantar sumber secara proaktif dan boleh menolak aset yang telah disimpan dalam cache oleh klien. Apabila keadaan cache tidak pasti, 103 menjadikannya lebih mudah untuk mengelakkan pemindahan yang tidak perlu.
Bagaimana jika tindak balas akhir beralih arah ke rentas asal (cross-origin)?
Sambungan atau sumber yang dimulakan lebih awal mungkin dibuang, menjadikan petunjuk tersebut sebagai pembaziran lebar jalur dan kos sambungan tambahan. Dayakannya hanya untuk titik masuk yang stabil dan sertakan kadar pengalihan semula dalam eksperimen.
Bagaimanakah anda mengendalikan versi aset dinamik?
Gunakan URL dengan hash kandungan yang diketahui, atau beri petunjuk hanya untuk versi yang dijamin sepadan dengan tindak balas akhir. Jika versi tidak diketahui, tunggu HTML akhir daripada membuat tekaan.
Mengapa tidak menghantar 103 pada setiap halaman?
Tanpa masa berfikir pelayan, tiada kerja selari yang boleh dimanfaatkan, dan navigasi yang lebih mendalam mungkin telah menyimpan aset kritikal dalam cache. Laksanakan secara berperingkat mengikut halaman masuk, protokol, tingkah laku cache, dan nilai yang diukur.