Topik temu duga representatif

Temu duga frontend: mereka bentuk import fail besar diutamakan luar talian dengan OPFS

FrontendSukar
Pasukan Editorial Offer.ccDiterbitkan Dikemas kini

Soalan

Reka bentuk klien pelayar yang mengimport CSV 2 GB sementara pengguna boleh meninggalkan halaman, memuat semula, atau terputus sambungan seketika. Terangkan pembahagian cebisan (chunking), ketahanan OPFS, sempadan worker, penyelarasan pelayan, tingkah laku sandaran (fallback), dan keselamatan.

Gesaan dan skop

Andaikan CSV 2 GB, belanjawan memori thread utama 20 MB, dan kemas kini kemajuan dalam masa 100 ms selepas setiap cebisan diperakui (acknowledged). Pengguna boleh memuat semula atau berada di luar talian selama 30 minit. Klien mesti menyambung semula tanpa membaca semula keseluruhan fail, memastikan antara muka kekal responsif, dan tidak sekali-kali mendakwa bahawa cebisan telah dimuat naik sebelum pelayan memperakuinya. OPFS adalah peribadi kepada asal (origin) halaman; ia berbeza daripada pemegang folder yang boleh dilihat oleh pengguna.

Perkara yang diuji oleh penemu duga

  • Memilih primitif storan berdasarkan saiz fail, ketahanan, kebenaran, dan sokongan pelayar.
  • Memindahkan penghuraian dan I/O bait keluar daripada thread utama tanpa menyebabkan keadaan UI tidak koheren.
  • Menentukan protokol boleh sambung semula dengan identiti cebisan, checksum, percubaan semula, dan penyelarasan pelayan.
  • Mengendalikan tekanan kuota, pengusiran (eviction), pembatalan, privasi, dan pelayar yang tidak disokong.

Soalan penjelasan untuk ditanya

Tanya sama ada fail asal mesti kekal tersedia selepas muat semula, sama ada pelayan menerima cebisan yang tidak mengikut urutan, sama ada baris boleh dihuraikan secara berperingkat, dan pelayar mana yang berada dalam skop. Jika pelayan boleh menstrim terus daripada fail yang dipilih pengguna, ketahanan setempat mungkin tidak diperlukan; jika pemulihan muat semula adalah wajib, OPFS atau storan tahan lama yang lain menjadi sebahagian daripada reka bentuk.

Jawapan 30 saat

Saya akan menyimpan manifes kecil dalam OPFS dengan upload_id, cap jari sumber, saiz cebisan, julat yang diperakui, dan keadaan checksum. Worker khusus membaca keratan terhad, menulis cebisan tahan lama sebelum menandakannya sebagai belum selesai, dan memuat naik dengan kunci cebisan idempoten. Pelayan melaporkan julat yang diterima, jadi percubaan semula melakukan penyelarasan dan bukannya meneka. Thread utama menerima mesej kemajuan yang dihadkan (throttled) dan kekal bertanggungjawab untuk pembatalan serta status yang boleh diakses. Pengesanan ciri, pengendalian kuota storan, dan sandaran fail yang dipilih pengguna melindungi klien yang tidak disokong atau diusir.

Panduan mendalam langkah demi langkah

1. Memilih storan dan sempadan

Simpan manifes dan metadata kecil dalam storan pelayar yang tahan lama, dan letakkan cebisan sementara yang besar dalam OPFS. OPFS adalah peribadi mengikut asal dan tidak memerlukan gesaan kebenaran untuk akses; pemegang fail yang boleh dilihat pengguna mengikut model kebenaran yang berbeza dan memerlukan gerak isyarat yang jelas. Gunakan worker untuk pemegang akses segerak atau kerja menyekat lain supaya thread utama tidak pernah menunggu I/O cakera.

2. Jadikan sambung semula sebagai protokol, bukan bar kemajuan

Hasilkan uploadid dan nombor cebisan deterministik. Setiap permintaan membawa uploadid, indeks cebisan, julat bait, panjang, dan checksum. Pelayan menyimpan julat yang diterima dan mengembalikannya pada status. Percubaan semula dengan identiti cebisan yang sama adalah idempoten; ketidakpadanan checksum akan ditolak. Semasa muat semula, worker membaca manifes, meminta julat yang diterima daripada pelayan, dan hanya memuat naik set yang hilang.

3. Pastikan UI responsif dan boleh dipulihkan

Baca keratan bersaiz tetap, pindahkan hanya satu penimbal terhad pada satu masa, dan hadkan (throttle) peristiwa kemajuan supaya pemaparan tidak bersaing dengan penghuraian. Simpan manifes sebelum memulakan percubaan rangkaian dan selepas setiap perakuan pelayan. Pembatalan menandakan muat naik secara setempat, membatalkan permintaan aktif, dan menjadualkan pembersihan; ia tidak boleh memadamkan satu-satunya metadata pemulihan sebelum pelayan mengesahkan penamatan.

4. Mengendalikan kuota, keserasian, dan keselamatan

Semak storan yang tersedia sebelum menyalin fail dan paparkan keadaan "storan penuh" yang boleh dipulihkan. Jika OPFS tidak tersedia atau diusir, gunakan sandaran fail yang dipilih pengguna dan mulakan semula dari julat yang diketahui pelayan; jangan sekali-kali menjanjikan penyambungan semula luar talian dalam mod tersebut. Anggap nama fail dan baris yang dihuraikan sebagai tidak dipercayai, perlukan kebenaran muat naik yang disahkan, dan elakkan mendedahkan laluan tempatan peribadi. Uji muat semula, tempoh luar talian, cebisan pendua, kegagalan checksum, kerosakan tab, penolakan kuota, dan permulaan semula worker.

Contoh jawapan yang mantap

Saya akan menjelaskan sasaran pelayar, sama ada baris boleh distrim, dan sama ada pemulihan muat semula diperlukan. Klien menyimpan manifes dan cebisan sementara terhad dalam OPFS, manakala worker membaca dan memuat naiknya menggunakan identiti cebisan deterministik. Pelayan adalah berwibawa untuk julat yang diterima; percubaan semula menyelaraskan terhadap keadaan tersebut dan mengesahkan checksum. Thread utama hanya memaparkan kemajuan yang dihadkan dan mengawal pembatalan. Jika storan tidak tersedia, UI beralih kepada aliran fail yang dipilih dengan penyambungan semula bahagian pelayan tetapi jelas kehilangan ketahanan luar talian. Kuota, pengusiran, semantik asal peribadi, dan pembersihan adalah keadaan yang boleh diperhatikan, bukan pengecualian tersembunyi.

Kesilapan lazim

  • Membaca keseluruhan fail ke dalam memori → input 2 GB membekukan atau merosakkan tab → hiris cebisan terhad dalam worker.
  • Menganggap peratusan kemajuan sebagai kebenaran mutlak → perakuan yang hilang mewujudkan lompang atau pendua → selaras julat yang diterima dengan pelayan.
  • Menganggap OPFS ialah folder yang boleh dilihat oleh pengguna → pengguna tidak boleh memeriksa atau memberikan akses yang sama → terangkan storan peribadi mengikut asal dan gunakan pemegang fail apabila eksport diperlukan.
  • Menyimpan hanya selepas kejayaan muat naik → kerosakan menyebabkan kehilangan titik percubaan semula seterusnya → simpan manifes sebelum percubaan dan selepas perakuan.
  • Mengabaikan kuota dan pengusiran → pemulihan luar talian gagal tanpa tindakan pengguna → semak kapasiti dan sediakan sandaran yang jelas.
  • Mempercayai nama atau medan CSV → data tempatan boleh menyuntik kandungan atau membocorkan laluan → sahkan input dan jangan sekali-kali mendedahkan butiran laluan tempatan.

Soalan susulan dan respons

Tab ranap selepas pelayan menerima cebisan tetapi sebelum kemas kini manifes. Apa yang perlu dilakukan sekarang?

Semasa mula semula, minta julat yang diterima daripada pelayan dan anggap respons tersebut sebagai berwibawa. Entri manifes tempatan yang hilang boleh dimuat naik semula dengan identiti cebisan yang sama; pelayan mesti mengembalikan hasil sedia ada dan bukannya menyimpan pendua.

Pelayar melaporkan bahawa storan OPFS telah diusir (evicted). Adakah anda menggagalkan import tersebut?

Simpan rekod muat naik dan terangkan bahawa penyambungan semula luar talian tidak lagi tersedia. Minta pengguna memilih semula fail sumber, kemudian teruskan daripada julat yang diterima pelayan jika cap jari sumber sepadan; jika tidak, mulakan muat naik baharu.

Mengapa tidak menggunakan pemegang direktori yang boleh dilihat pengguna untuk setiap import?

Ia menambah aliran kebenaran dan gerak isyarat serta menggabungkan produk ke folder yang boleh diubah oleh pengguna secara luaran. Gunakannya apabila mengedit atau mengeksport fail asal diperlukan; gunakan OPFS untuk cebisan sementara peribadi.

Bagaimanakah anda mengelakkan worker daripada membanjiri rangkaian?

Hadkan cebisan dalam penerbangan (in-flight), jeda pembacaan apabila pelayan atau pelayar melaporkan tekanan belakang (backpressure), dan utamakan percubaan semula berbanding kerja baharu. Dedahkan kedalaman baris gilir dan usia percubaan semula supaya UI boleh menerangkan kemajuan yang perlahan.

Sumber awam

Soalan berkaitan