Blog

Laman Statik Kini Kekal Aktif Semasa Diterbitkan Semula

Menerbitkan semula laman statik di Mythex dahulu memadam fail yang sedang hidup sebelum memuat naik binaan baharu, jadi sepanjang tempoh muat naik, sesetengah pengunjung mendapat halaman 404 atau halaman yang skripnya hilang. Muat naik yang gagal lebih teruk lagi. Laman itu boleh kosong atau separuh baharu. Kini binaan baharu ditulis di atas yang lama, halaman dimuat naik paling akhir, dan fail yang tertinggal dibuang beberapa minit kemudian. Pembetulan kedua menjadikan penerbitan semula kelihatan dalam beberapa saat dan bukannya seminit, atau untuk fail seperti logo, sehingga sehari.

Cara laman statik dihidangkan

Laman statik ialah laman yang hanya terdiri daripada fail: halaman HTML, JavaScript, CSS, imej. Apabila anda menerbitkan satu di Mythex, kami membinanya, memuat naik hasilnya ke storan objek dalam folder untuk laman anda, dan menghidangkannya melalui rangkaian edge, iaitu pelayan yang berdekatan dengan pengunjung anda yang mengambil fail daripada storan dan menyimpan salinannya seketika. (Jika anda baharu dalam hal ini, panduan kami tentang apakah CDN menerangkan idea tersebut.)

Dua perkara tidak betul: susunan penerbitan semula menukar fail, dan tempoh salinan lama disimpan.

Masalah 1: muat naik mengosongkan laman dahulu

Penerbitan semula memadam semua yang ada dalam folder laman, kemudian memuat naik binaan baharu. Selama muat naik itu berlangsung, sebanyak 12 saat untuk laman 250 fail dalam ujian tempatan kami, pengunjung yang permintaannya belum disimpan di edge mendapat 404, atau halaman HTML yang skripnya mendapat 404.

Muat naik yang gagal lebih teruk. Folder sudah kosong, dan pada salah satu daripada dua laluan muat naik, index.html yang baharu mungkin sudah tiba sebelum fail yang gagal itu. Penerbitan yang dilaporkan gagal boleh meninggalkan laman separuh baharu dalam keadaan hidup.

Pembetulan: tulis di atas, halaman terakhir, buang kemudian

  1. Jangan padam dahulu. Binaan baharu dimuat naik di atas yang lama.
  2. Aset sebelum halaman. Satu halaman menamakan skrip dan gaya yang diperlukannya, jadi halaman dimuat naik paling akhir. Sehingga halaman baharu tiba, pengunjung mendapat halaman lama, yang menamakan aset lama, dan aset itu masih ada. Apabila halaman baharu tiba, aset baharu yang dinamakannya sudah berada di tempatnya.
  3. Buang yang tertinggal kemudian. Sebelum muat naik, kami menyenaraikan apa yang membentuk laman itu. Tiga minit selepas muat naik berjaya, apa-apa dalam senarai itu yang tidak ditulis semula oleh binaan baharu akan dipadam. Tiga minit lebih lama daripada 60 saat yang boleh disimpan dalam cache halaman di edge dan pelayar, jadi pengunjung yang masih memegang halaman lama boleh menemui aset yang dinamakannya.
  4. Jika ragu, jangan padam apa-apa. Jika senarai sebelum muat naik gagal, tiada apa yang dipangkas. Fail yang tertinggal tidak membahayakan, dan penerbitan seterusnya akan membersihkannya. Memadam tanpa mengetahui apa yang ada di situlah laman boleh berakhir dalam keadaan kosong.

Muat naik yang gagal kini meninggalkan laman sebelumnya tepat seperti sebelumnya.

Kami menguji ini dari hujung ke hujung secara tempatan, menggunakan skrip muat naik sebenar, laluan muat naik sebenar, dan penghidangan storan sebenar, dengan pengunjung yang tiba dengan cache edge yang sejuk. Dengan kod lama, 55 daripada 91 lawatan rosak semasa penerbitan semula, dan 61 daripada 92 semasa penerbitan yang gagal. Dengan kod baharu, 0 rosak merentasi kira-kira 3,500 lawatan yang meliputi kedua-dua laluan muat naik, muat naik yang gagal, dan penerbitan selepasnya, dan tepat fail yang tertinggal sahaja yang dipangkas.

Masalah 2: penerbitan semula mengambil masa terlalu lama untuk kelihatan

Walaupun muat naik berjalan lancar, perubahan lambat muncul. Edge menyimpan salinan halaman selama 60 saat dan setiap fail lain selama sehari, dan memberitahu pelayar supaya berbuat yang sama. Fail dengan nama tetap seperti logo.png, fon, atau apa-apa dari folder public/ boleh menunjukkan versi lama sehingga sehari selepas penerbitan semula.

Pembetulan: salinan fail di bawah binaan

Apabila edge bertanya kepada API kami di mana sesuatu laman berada, jawapannya kini mengandungi penanda binaan yang berubah setiap kali penerbitan berjaya. Edge menyimpan salinannya di bawah penanda itu. Maka sebuah penerbitan menjadi set kunci cache yang baharu sebaik sahaja carian 30 saat edge tamat tempoh. Salinan lama tidak lagi ditemui, jadi edge boleh menyimpan salinan selama sehari tanpa pernah menghidangkan salinan yang melebihi penerbitan yang menggantikannya.

Pelayar mendapat dua peraturan yang berbeza:

  • Output binaan yang di-hash, iaitu fail seperti assets/index-CzLcxDO8.js yang namanya berubah apabila kandungannya berubah, disimpan dalam cache selama setahun dan ditandakan immutable. Ia tidak akan lapuk di bawah nama itu.
  • Selain itu, iaitu halaman dan fail nama tetap seperti logo, ditandakan no-cache, yang bermaksud "semak sebelum digunakan". Jika tiada yang berubah, jawapannya ialah 304 Not Modified yang kecil tanpa badan, kini setelah kami menghormati semakan If-None-Match pelayar.

Membezakan kedua-duanya memerlukan penelitian: fail yang disalin dari public/assets/ mengekalkan namanya sendiri, dan menyimpan assets/logo.png dalam cache selama setahun akan mengunci logo lama selama setahun. Jadi sesuatu fail hanya dikira sebagai di-hash jika ia berada dalam folder output binaan dan namanya mempunyai segmen yang kelihatan seperti hash, bukan perkataan biasa.

Secara tempatan, halaman dan logo baharu kelihatan 6 saat selepas penerbitan menjadi langsung. Sebelum ini, ia 60 saat untuk halaman dan sehari untuk logo.

Dua pembetulan kecil sepanjang jalan

  • Halaman kosong daripada permintaan HEAD. Permintaan HEAD meminta header halaman tanpa badannya. Kami menyimpan tindak balas kosong itu dalam cache, jadi pengunjung seterusnya ke halaman itu mendapat halaman kosong. Tindak balas HEAD tidak lagi disimpan dalam cache.
  • Halaman sebenar untuk "tiada apa di sini". Alamat tanpa aplikasi dahulu mendapat teks biasa "This published app is offline or the link was not found" dengan kod ralat 502. Kini ia mendapat halaman yang betul, "There's no app here", dengan status 404 dan laluan kembali ke Mythex untuk pemilik. Domain tersuai yang tidak dikenali mendapat halaman yang sama.

Apa yang kami pelajari daripadanya

  • Susunan adalah sebahagian daripada ketepatan. Fail yang sama yang dimuat naik dalam susunan berbeza adalah perbezaan antara laman yang rosak dan laman yang berfungsi.
  • Padam lewat, dan hanya apa yang anda tahu. Memangkas dengan senarai yang diambil sebelum muat naik adalah selamat; mengosongkan folder dan berharap muat naik selesai tidak.
  • Cache mengikut versi, bukan mengikut masa. Masa tamat tempoh ialah tekaan tentang bila kandungan berubah. Kunci yang berubah bersama binaan ialah fakta.

Berkaitan: aplikasi anda yang diterbitkan kini kekal aktif semasa anda menerbitkannya semula. Lebih lanjut tentang penerbitan dalam dokumentasi.

Mythex · Pricing · Bina apa sahaja dengan AI · Templat laman web dan aplikasi · Mythex dibandingkan · Glosari pembinaan aplikasi AI · Alat percuma untuk membina aplikasi dengan AI · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)