Topik wawancara representatif

Wawancara Frontend: Bagaimana Anda merancang pipeline gambar responsif yang aman bagi privasi dengan Client Hints?

FrontendSulit
Tim Redaksi Offer.ccDipublikasikan Diperbarui

Pertanyaan

Situs konten membutuhkan gambar berdasarkan lebar perangkat dan DPR, tetapi pihak CDN mengkhawatirkan fragmentasi cache dan pihak legal mengkhawatirkan fingerprinting perangkat. Rancang pipeline, fallback, dan pengukurannya.

Prompt dan cakupan

Sebuah situs konten menyajikan gambar ke ponsel, tablet, dan desktop pada berbagai nilai lebar dan DPR. Tim produk menginginkan transfer first-view yang lebih rendah, sementara CDN khawatir bahwa entri cache untuk setiap Width dan DPR akan memfragmentasi cache. Tim legal meminta hanya informasi perangkat yang diperlukan saja yang dikirimkan. Rancang pipeline, jelaskan perilakunya tanpa Client Hints, cegah CLS dan unduhan duplikat, serta tentukan cara Anda mengukur hasilnya.

Ini menguji pemahaman pemilihan sumber daya browser, caching HTTP, performa, aksesibilitas, dan progressive enhancement. Lebar, DPR, dan traffic adalah variabel yang harus diukur; jangan menjanjikan persentase peningkatan yang tetap tanpa data.

Hal yang diuji oleh pewawancara

  • Apakah Anda dapat mendeskripsikan slot rendering nyata dengan srcset dan sizes agar browser dapat memilih kandidat.
  • Apakah Anda dapat menghubungkan Accept-CH, permintaan lanjutan, Vary, dan cache key CDN ke dalam satu alur data.
  • Apakah Anda mengenali risiko privasi, fingerprinting, dan lonjakan cache akibat hints dengan kardinalitas tinggi.
  • Apakah Anda menyediakan fallback yang independen dari JavaScript, reservasi dimensi, alt, dan siklus pengukuran.

Pertanyaan klarifikasi awal

  1. Apakah gambar tersebut berupa konten, dekorasi, atau hero image dengan art direction? Hal tersebut mengubah alt dan penanganan elemen picture.
  2. Berapa lebar slot CSS dan rasio aspek pada setiap breakpoint? sizes harus mendeskripsikan slot, bukan secara membabi buta mendeskripsikan viewport.
  3. Bisakah CDN membuat key berdasarkan nilai lebar, format, dan kualitas yang dinormalisasi? Berapa banyak kandidat lebar yang diizinkan?
  4. Apa target dukungan browser untuk Client Hints, format modern, dan responsive preloading?
  5. Apa saja baseline untuk metrik first-view, cache hit rate, byte gambar, dan error?

Kerangka jawaban 30 detik

Gunakan gambar responsif native terlebih dahulu, lalu tambahkan Client Hints sebagai progressive enhancement server/CDN. Browser menggunakan srcset dan sizes untuk memilih kandidat; jika server memvariasikan respons menggunakan hints, server mengiklankan Accept-CH dan membuat kebijakan cache mencerminkan kolom yang benar-benar memengaruhi respons. Izinkan hanya lebar yang dikelompokkan dalam bucket dan DPR yang dinormalisasi, dengan default yang aman dan jalur tanpa hints. Validasi dengan LCP, CLS, byte gambar, hit rate, dan error, serta periksa apakah hints berentropi tinggi benar-benar diperlukan.

Jawaban langkah demi langkah

1. Tentukan set kandidat yang terbatas dan slot

Hasilkan set lebar terbatas per gambar, seperti 320, 640, 960, dan 1280 (nilai contoh, bukan standar universal), sambil mempertahankan rasio aspek sumber. Nyatakan lebar tampilan yang diharapkan pada setiap breakpoint tata letak di sizes; browser juga mempertimbangkan DPR, jaringan, dan kebijakannya sendiri. Pertahankan src sebagai fallback wajib.

html
<img
  src="/img/card-640.jpg"
  srcset="/img/card-320.jpg 320w, /img/card-640.jpg 640w, /img/card-960.jpg 960w, /img/card-1280.jpg 1280w"
  sizes="(min-width: 66rem) 33vw, (min-width: 44rem) 50vw, 100vw"
  width="640"
  height="400"
  alt="Article cover"
  loading="lazy"
  decoding="async"
>

2. Gunakan picture untuk format dan art direction

Gunakan elemen picture ketika pemilihan format atau pemotongan (crop) seluler yang berbeda diperlukan, dan akhiri dengan fallback elemen img yang memiliki src. Pisahkan pemilihan format dan lebar; preload statis tidak boleh memaksakan sumber daya yang salah.

3. Jaga agar loop Client Hints tetap minimal

Respons dapat menggunakan Accept-CH untuk meminta hints yang benar-benar digunakan server, seperti DPR atau Width. Apakah dan kapan browser mengirimkannya bergantung pada kebijakan browser, izin, dan dukungan. Abaikan hints yang tidak dikenal dan hanya deklarasikan kolom yang benar-benar mengubah respons yang dapat di-cache.

http
Accept-CH: DPR, Width
Vary: Accept, DPR, Width

Vary adalah deklarasi semantik, bukan izin untuk membuat varian tanpa batas. Petakan Width ke bucket terbatas, normalisasi DPR, atau tempatkan hasil yang dinormalisasi dalam cache key CDN; jangan pernah menggabungkan parameter mentah sembarangan ke dalam URL upstream.

4. Tangani privasi, izin, dan keamanan input

Client Hints adalah metadata permintaan, bukan kredensial. Utamakan hints berentropi rendah yang menyelesaikan masalah tertentu, dan hindari meminta data model perangkat untuk profiling. Batasi dan masukkan parameter lebar, kualitas, dan format ke dalam allowlist; transformer gambar juga harus bertahan terhadap SSRF, open redirect, dan beban kerja berlebih.

5. Pertahankan progressive enhancement dan aksesibilitas

Ketika hints tidak ada, ditolak, atau miss di CDN, srcset/sizes dan default server tetap memuat gambar. Tetapkan width dan height, atau kotak rasio aspek yang setara, untuk mengurangi CLS. Gunakan loading="eager" atau fetchpriority="high" secara hemat untuk gambar LCP di atas lipatan (above-the-fold); terapkan lazy-load untuk gambar di bawah lipatan (below-the-fold); sediakan teks alt yang bermakna untuk gambar konten.

6. Bangun rencana pengukuran yang dapat dibatalkan (reversible)

Bagi traffic dan konten yang sebanding menjadi kelompok kontrol dan perlakuan. Catat LCP, INP, CLS, byte transfer gambar, waktu decode, hit rate, tingkat error, lebar tampilan aktual, dan kelas perangkat. Jika hit rate turun atau unduhan duplikat meningkat, kurangi dimensi hints, perlebar bucket, atau rollback Client Hints sebelum menambahkan lebih banyak varian.

Contoh jawaban berkualitas tinggi

Saya akan mengutamakan pemilihan native browser: sediakan srcset yang terbatas, sizes yang akurat, dimensi intrinsik, dan teks alt yang mudah diakses. Gunakan elemen picture hanya jika format atau art direction memerlukannya, dengan fallback elemen img yang andal. Server dapat mengiklankan Accept-CH untuk hints yang benar-benar digunakannya, tetapi permintaan pertama harus tetap berfungsi ketika hints tidak didukung, ditolak, atau belum tersedia.

Jika respons berubah berdasarkan hint, saya akan membatasi key CDN pada bucket lebar yang dinormalisasi, bucket DPR, format, dan kualitas yang ada di allowlist. Vary hanya akan mencantumkan kolom yang memengaruhi representasi. Nilai lebar dan jaringan mentah dapat memiliki kardinalitas tinggi, sehingga keduanya tidak boleh membuat satu objek cache untuk setiap nilai. Saya tidak akan meminta data model perangkat tanpa kebutuhan konkret dan tidak akan pernah memperlakukan hint sebagai autentikasi. Terakhir, saya akan menjalankan pengujian A/B dengan konten yang sama pada LCP/CLS, byte, hit rate, dan error sebelum memperluas peluncuran.

Pola kegagalan umum

  • Selalu menulis sizes="100vw" dan mengabaikan tata letak multi-kolom, sehingga menghasilkan kandidat yang terlalu besar.
  • Menjelaskan Accept-CH tanpa memperhitungkan alur permintaan lanjutan, izin, Vary, dan cache key.
  • Membuat varian CDN untuk setiap nilai lebar mentah, DPR, atau jaringan.
  • Mewajibkan JavaScript klien untuk mengukur terlebih dahulu, merusak first paint dan perilaku fallback.
  • Menggunakan link preload tetap yang berkonflik dengan pemilihan responsif sehingga mengunduh dua kali.
  • Mengabaikan alt, reservasi dimensi, allowlist parameter, atau risiko privasi berentropi tinggi.

Pertanyaan lanjutan dan referensi jawaban

Apakah semakin banyak Vary selalu semakin benar?

Tidak. Header tersebut harus mengidentifikasi kolom permintaan yang mengubah representasi yang dapat di-cache. Kolom dengan kardinalitas tinggi menciptakan varian dan menurunkan hit rate, jadi normalisasikan nilainya atau gunakan kebijakan server yang terbatas.

Mengapa menambahkan Client Hints jika srcset sudah ada?

srcset dan sizes memungkinkan browser memilih menggunakan pengetahuannya tentang slot dan biasanya menjadi pilihan pertama. Client Hints adalah suplemen opsional ketika server atau CDN harus mengubah respons menggunakan metadata perangkat atau jaringan; Client Hints tidak menggantikan fallback.

Apakah permintaan HTML pertama akan berisi Width?

Jangan berasumsi demikian. Negosiasi Accept-CH memengaruhi permintaan berikutnya, dan pengirimannya bergantung pada dukungan serta izin browser. Oleh karena itu, permintaan pertama harus dapat berdiri sendiri.

Bagaimana Anda mengetahui bahwa cache bucket terlalu terperinci (fine-grained)?

Lacak hit rate, jumlah varian, penyimpanan edge, dan volume permintaan per bucket. Gabungkan lebar yang berdekatan lalu bandingkan byte dan LCP; satukan jika peningkatan performa lebih kecil daripada biaya cache.

Kapan hints berentropi tinggi harus dihindari?

Ketika produk hanya membutuhkan lebar kasar, format, atau perilaku penghematan data. Hints model perangkat menambah celah fingerprinting serta dimensi cache dan tidak boleh diaktifkan hanya karena dianggap mungkin membantu.

Bagaimana Anda memverifikasi bahwa responsive preload tidak menduplikasi unduhan?

Ambil jejak jaringan (network trace) pada browser dengan dan tanpa dukungan responsive-preload. Konfirmasikan bahwa preload dan pilihan elemen img akhir mengarah ke URL yang sama; jika tidak, biarkan srcset HTML tetap menjadi satu-satunya jalur yang andal.

Sumber publik

Pertanyaan terkait