Tinklaraštis

Statinės svetainės lieka veikiančios, kol jos publikuojamos iš naujo

Statinės svetainės pakartotinis publikavimas Mythex platformoje anksčiau pirmiausia ištrindavo gyvus failus, o tik tada įkeldavo naują kompiliavimą. Kol įkėlimas vyko, dalis lankytojų gaudavo 404 puslapį arba HTML puslapį, kurio skriptai trūko. Nepavykęs įkėlimas galėjo palikti svetainę tuščią arba pusiau naują. Dabar naujas kompiliavimas rašomas ant senojo, puslapiai įkeliami paskutiniai, o likučiai pašalinami po kelių minučių. Antras pataisymas padaro, kad pakartotinis publikavimas matomas per kelias sekundes, o ne per minutę – arba, failams, pavyzdžiui logotipui, iki vienos dienos.

Kaip teikiama statinė svetainė

Statinė svetainė – tai tiesiog failai: HTML puslapiai, JavaScript, CSS, paveikslėliai. Kai publikuojate ją Mythex platformoje, mes ją sukompiliuojame, įkeliame rezultatą į objektų saugyklą, aplanke, skirtame jūsų svetainei, ir teikiame per kraštinį tinklą – serverius, esančius arti lankytojų, kurie ima failus iš saugyklos ir kurį laiką saugo jų kopijas. (Jei tai naujiena, mūsų vadovas kas yra CDN paaiškina idėją.)

Net du dalykai buvo netvarkingi: pakartotinio publikavimo metu failų keitimo tvarka ir tai, kaip ilgai senos kopijos saugomos.

1 problema: įkėlimas pirmiausia ištuštino svetainę

Pakartotinis publikavimas ištrindavo visa, kas buvo svetainės aplanke, ir tik tada įkeldavo naują kompiliavimą. Visą įkėlimo laiką – mūsų vietiniame teste 250 failų svetainei tai buvo 12 sekundžių – lankytojas, kurio užklausa dar nebuvo kraštiniame serveryje talpinta, gaudavo 404 arba HTML puslapį, kurio skriptai grąžindavo 404.

Nepavykęs įkėlimas buvo dar blogesnis. Aplankas jau buvo tuščias, o viename iš dviejų įkėlimo kelių naujas index.html galėjo atsirasti anksčiau nei nepavykęs failas. Ataskaita, kad publikavimas nepavyko, galėjo palikti pusiau naują svetainę gyvą.

Sprendimas: rašyti ant senojo, puslapius – paskutinius, likučius – vėliau

  1. Netrinkite pirma. Naujas kompiliavimas įkeliamas ant senojo.
  2. Pirma ištekliai, paskui puslapiai. Puslapis nurodo skriptus ir stilius, kurių jam reikia, todėl puslapiai įkeliami paskutiniai. Kol nauji puslapiai nepasiekia svetainės, lankytojas gauna senąjį puslapį, kuris nurodo senus išteklius – o jie dar yra. Kai nauji puslapiai nusileidžia, nauji ištekliai, į kuriuos jie nurodo, jau yra vietoje.
  3. Likučius pašalinkite vėliau. Prieš įkėlimą užfiksuojame, iš ko svetainė susideda. Po trijų minučių nuo sėkmingo įkėlimo visa tai, ką sąraše esantis naujas kompiliavimas nepakeitė, ištrinama. Trys minutės ilgesnės nei 60 sekundžių, kiek puslapis gali būti talpinamas kraštiniame serveryje ir naršyklėje, todėl lankytojas, dar laikantis senojo puslapio, randa išteklius, kuriuos jis nurodo.
  4. Jei abejojate, nieko netrinkite. Jei prieš įkėlimą sąrašo sudaryti nepavyksta, nieko nevalome. Likę failai nekenkia, o kitas publikavimas juos pašalina. Trinti nežinant, kas buvo, reiškia palikti svetainę tuščią.

Dabar nepavykęs įkėlimas palieka ankstesnę svetainę tokią, kokia ji buvo.

Išbandėme tai nuo galo iki galo lokaliai, naudodami tikrą įkėlimo skriptą, tikrą įkėlimo maršrutą ir tikrą saugyklos teikimą, o lankytojai atvykdavo su šaltu kraštinio serverio talpykla. Su senu kodu 55 iš 91 apsilankymų buvo sugadinti pakartotinio publikavimo metu, o 61 iš 92 – per nepavykusį. Su naujuoju kodu sugadinta 0 iš maždaug 3 500 apsilankymų, apimančių abu įkėlimo kelius, nepavykusį įkėlimą ir publikavimą po jo – ir būtent likę failai buvo pašalinti.

2 problema: pakartotinis publikavimas matomas per lėtai

Net kai įkėlimas vyko sklandžiai, pakeitimai pasirodydavo lėtai. Kraštinis serveris puslapio kopiją laikydavo 60 sekundžių, o visų kitų failų – vieną dieną, ir tai nurodydavo naršyklėms daryti tą patį. Failai su fiksuotu pavadinimu – logo.png, šriftas, bet kas iš public/ aplanko – galėjo rodyti senąją versiją iki vienos dienos po pakartotinio publikavimo.

Sprendimas: failų kopijos pagal kompiliavimą

Kai kraštinis serveris klausia mūsų API, kur gyvena svetainė, atsakyme dabar yra kompiliavimo žymė, kuri pasikeičia kiekvieną kartą, kai publikavimas įsigalioja. Kraštinis serveris savo kopijas saugo po ta žyme. Todėl publikavimas tampa visiškai naujų talpyklos raktų rinkiniu, kai tik baigiasi kraštinio serverio 30 sekundžių paieška. Senos kopijos tiesiog nebeatsiranda, todėl kraštinis serveris gali laikyti kopijas vieną dieną ir niekada neteikti jų po publikavimo, kuris jas pakeitė.

Naršyklės gauna dvi skirtingas taisykles:

  • Sumaišyto pavadinimo kompiliavimo išvestis – failai kaip assets/index-CzLcxDO8.js, kurių pavadinimas pasikeičia, kai pasikeičia turinys – talpinami metus ir pažymimi kaip nekintami. Tokiu pavadinimu jie niekada nepasens.
  • Viskas kita – puslapiai ir failai su fiksuotu pavadinimu, pavyzdžiui logotipas – pažymėta no-cache, t. y. „patikrink prieš naudodamas“. Jei nieko nepasikeitė, atsakymas – mažas 304 Not Modified be turinio, nes dabar gerbiame naršyklės If-None-Match patikrinimą.

Šiuos du tipus atskirti reikia atsargiai: failas, nukopijuotas iš public/assets/, išlaiko savo pavadinimą, o assets/logo.png talpinimas metams prismaigstytų seną logotipą metams. Todėl failas laikomas sumaišytu tik tada, kai jis yra kompiliavimo išvesties aplanke ir jo pavadinime yra segmentas, panašus į maišos reikšmę, o ne įprastas žodis.

Lokaliai naujas puslapis ir logotipas buvo matomi per 6 sekundes po to, kai publikavimas įsigaliojo. Anksčiau tai buvo 60 sekundžių puslapiui ir vieną dieną logotipui.

Du mažesni pataisymai

  • Tušti puslapiai po HEAD užklausų. HEAD užklausa prašo puslapio antraščių be turinio. Mes talpinome tas tuščias atsakymus, todėl kitas to puslapio lankytojas gaudavo tuščią puslapį. HEAD atsakymai dabar nebetalpinami.
  • Tikras puslapis „čia nieko nėra“. Adresas be programėlės anksčiau grąžindavo paprastą tekstą „Ši publikuota programėlė neveikia arba nuoroda nerasta“ su 502 klaidos kodu. Dabar rodomas tinkamas puslapis „Čia nėra programėlės“ su 404 statusu ir nuoroda atgal į Mythex savininkui. Nežinomi pasirinktiniai domenai gauna tą patį puslapį.

Ką iš to išmokome

  • Tvarka yra korektiškumo dalis. Tie patys failai, įkelti kita tvarka, – tai skirtumas tarp sugadintos ir veikiančios svetainės.
  • Trinkite vėliau ir tik tai, ką žinote. Valymas pagal sąrašą, sudarytą prieš įkėlimą, yra saugus; aplanko ištuštinimas ir viltis, kad įkėlimas baigsis, nėra.
  • Talpinkite pagal versiją, o ne pagal laiką. Galiojimo laikai yra spėjimas, kada turinys keičiasi. Raktas, kuris keičiasi kartu su kompiliavimu, yra faktas.

Susiję: jūsų publikuota programėlė lieka veikianti, kol ją publikuojate iš naujo. Daugiau apie publikavimą – dokumentacijoje.

Mythex · Pricing · Kurkite bet ką su dirbtiniu intelektu · Svetainių ir programėlių šablonai · Mythex palyginimas · Programėlių kūrimo su dirbtiniu intelektu žodynėlis · Nemokami programėlių kūrimo su dirbtiniu intelektu įrankiai · 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 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ 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 简体中文 繁體中文(香港) 繁體中文(台灣)