Blogi

Staatilised saidid jäävad üles ka uuesti avaldamise ajal

Mythexis staatilise saidi uuesti avaldamine kustutas varem enne uue ehituse üleslaadimist elavad failid, nii et üleslaadimise kestel said mõned külastajad 404-lehe või lehe, kus skriptid puudusid. Ebaõnnestunud üleslaadimine võis jätta saidi tühjaks või pooleldi uueks. Nüüd kirjutatakse uus ehitus vana peale, lehed viimasena, ja ülejäänud failid eemaldatakse mõne minuti pärast. Teine parandus teeb uuesti avaldamise nähtavaks sekunditega minuti asemel — või failide puhul nagu logo kuni ühe päeva jooksul.

Kuidas staatilist saiti teenindatakse

Staatiline sait on fail-põhine: HTML-lehed, JavaScript, CSS, pildid. Kui avaldad selle Mythexis, ehitame selle, laadime tulemuse objektisalvestusse sinu saidi kausta alla ja teenindame seda servavõrgu kaudu — serverid külastajatele lähedal, mis toovad failid salvestusest ja hoiavad neist mõnda aega koopiaid. (Kui see on sulle uus, selgitab juhend mis on CDN ideed.)

Kaks asja olid valesti: järjekord, milles uuesti avaldamine failid muutis, ja see, kui kaua vanu koopiaid hoiti.

Probleem 1: üleslaadimine tühjendas saidi kõigepealt

Uuesti avaldamine kustutas kõik saidi kaustas ja laadis siis uue ehituse üles. Nii kaua, kui üleslaadimine kestis — meie kohalikus testis 12 sekundit 250-failise saidi puhul —, sai külastaja, kelle päring polnud servas juba vahemällu salvestatud, 404 või HTML-lehe, mille skriptid andsid 404.

Ebaõnnestunud üleslaadimine oli hullem. Kaust oli juba tühi ja ühel kahest üleslaadimisteest võis uus index.html ilmuda enne ebaõnnestunud faili. Avaldamine, mis teatati ebaõnnestununa, võis jätta elavaks poolenisti uue saidi.

Parandus: kirjuta üle, lehed viimasena, kärbi hiljem

  1. Ära kustuta esimesena. Uus ehitus laaditakse vana peale.
  2. Varad enne lehti. Leht nimetab skriptid ja stiilid, mida vajab, seega lähevad lehed viimasena üles. Kuni uued lehed kohale jõuavad, saavad külastajad vana lehe, mis nimetab vanu varasid, ja need on ikka olemas. Kui uued lehed on kohal, on neis nimetatud uued varad juba paigas.
  3. Eemalda ülejäänud hiljem. Enne üleslaadimist loetleme, millest sait koosneb. Kolm minutit pärast edukat üleslaadimist kustutatakse loendis kõik, mida uus ehitus ei kirjutanud üle. Kolm minutit on pikem kui 60 sekundit, mille jooksul lehte võidakse servas ja brauseris vahemällu hoida, nii et vana lehte omav külastaja leiab selle nimetatud varad.
  4. Kahtluse korral ära kustuta midagi. Kui loendi koostamine enne üleslaadimist ebaõnnestub, ei kärpita midagi. Ülejäänud failid on kahjutud ja järgmine avaldamine koristab need. Kustutamine ilma teadmata, mis seal oli, on see, kuidas sait tühjaks jääb.

Ebaõnnestunud üleslaadimine jätab nüüd eelmise saidi täpselt samaks.

Testisime seda kohapeal algusest lõpuni, kasutades päris üleslaadimisskripti, päris üleslaadimismarsruuti ja salvestuse teenindust, ning külastajaid külma servavahemäluga. Vana koodiga olid 55 91-st külastusest katki uuesti avaldamise ajal ja 61 92-st ebaõnnestunud avaldamise ajal. Uue koodiga oli 0 katki umbes 3500 külastuse hulgas, mis katsid mõlemat üleslaadimisteed, ebaõnnestunud üleslaadimist ja sellele järgnevat avaldamist — ja kärbitud said täpselt need ülejäänud failid.

Probleem 2: uuesti avaldamine ilmus liiga aeglaselt

Isegi kui üleslaadimine läks hästi, ilmusid muudatused aeglaselt. Serv hoidis lehe koopiat 60 sekundit ja kõigi teiste failide koopiat ühe päeva ning käskis samamoodi toimida ka brauseritel. Püsinimega failid — logo.png, font, mis tahes fail kaustast public/ — võisid näidata vana versiooni kuni ühe päeva pärast uuesti avaldamist.

Parandus: failikoopiad ehituse all

Kui serv küsib meie API-lt, kus sait asub, sisaldab vastus nüüd ehitusmarkerit, mis muutub iga kord, kui avaldamine jõuab kohale. Serv paneb oma koopiad selle markeri alla. Avaldamine muutub seega täiesti uueks vahemälu võtmete komplektiks niipea, kui serva 30-sekundiline otsing aegub. Vanu koopiaid enam ei leita, nii et serv võib koopiaid hoida päeva, ilma et keegi neid kunagi selle avaldamise järel teeniks, mis need asendas.

Brauserid saavad kaks erinevat reeglit:

  • Räsitud ehitusväljund — failid nagu assets/index-CzLcxDO8.js, mille nimi muutub siis, kui sisu muutub — salvestatakse vahemällu aastaks ja märgitakse muutumatuks. Selle nime all ei saa see kunagi vananeda.
  • Kõik muu — lehed ja püsinimega failid nagu logo — märgitakse no-cache-ga, mis tähendab „kontrolli enne kasutamist“. Kui midagi ei muutunud, on vastuseks väike 304 Not Modified ilma sisuta, nüüd kui austame brauseri If-None-Match kontrolli.

Nende kahe eristamine nõuab hoolt: fail, mis kopeeritakse kaustast public/assets/, säilitab oma nime ja faili assets/logo.png salvestamine aastaks vahemällu kinnitaks vana logo aastaks. Seega loetakse fail räsituks ainult siis, kui ta on ehitusväljundi kaustas ja tema nimes on lõik, mis näeb välja nagu räsi, mitte tavaline sõna.

Kohapeal oli uus leht ja logo nähtav 6 sekundit pärast avaldamise elavaks minekut. Varem oli see 60 sekundit lehe ja ühe päev logo puhul.

Kaks väiksemat parandust teel

  • Tühjad lehed HEAD-päringutest. HEAD-päring küsib lehe päiseid ilma sisuta. Me salvestasime need tühjad vastused vahemällu, nii et järgmine külastaja selle lehe juures sai tühja lehe. HEAD-vastuseid enam ei salvestata vahemällu.
  • Päris leht tühjale aadressile. Aadress ilma rakenduseta andis varem tavalise tekstiteate „This published app is offline or the link was not found“ veakoodiga 502. Nüüd saab ta korraliku lehe „There's no app here“ 404 staatusega ja tee tagasi Mythexisse omanikule. Tundmatud kohandatud domeenid saavad sama lehe.

Mida sellest õppisime

  • Järjekord on osa korrektsusest. Samad failid, üleslaaditud erinevas järjekorras, teevad vahet katkise ja töötava saidi vahel.
  • Kustuta hiljem ja ainult seda, mida tead. Kärpimine loendiga, mis võeti enne üleslaadimist, on ohutu; kausta tühjendamine ja lootmine, et üleslaadimine lõpeb, ei ole.
  • Vahemälu versiooni, mitte aja järgi. Aegumisajad on oletus selle kohta, millal sisu muutub. Võti, mis muutub koos ehitusega, on fakt.

Seotud: sinu avaldatud rakendus jääb üles ka siis, kui seda uuesti avaldad. Rohkem avaldamisest leiad dokumentatsioonist.

Mythex · Pricing · Ehita kõike AI-ga · Veebilehtede ja rakenduste mallid · Mythex võrdluses · Tehisintellektiga rakenduste ehitamise sõnastik · Tasuta tööriistad tehisintellektiga rakenduste ehitamiseks · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių 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 简体中文 繁體中文(香港) 繁體中文(台灣)