Blog

Statične stranice sada ostaju aktivne dok se ponovno objavljuju

Ponovno objavljivanje statične stranice na Mythexu nekad je prvo obrisalo žive datoteke, pa tek onda učitalo novi build. Zbog toga su neki posjetitelji tijekom učitavanja dobivali 404 stranicu ili stranicu čije su skripte nedostajale. Neuspjelo učitavanje moglo je ostaviti stranicu praznom ili napola novom. Sada se novi build zapisuje preko starog, stranice se posljednje, a ostaci se uklanjaju nekoliko minuta kasnije. Druga popravka čini da se ponovno objavljivanje vidi u roku od nekoliko sekundi umjesto minute, ili, za datoteke poput logotipa, do jednog dana.

Kako se statična stranica poslužuje

Statična stranica je ona koja se sastoji samo od datoteka: HTML stranica, JavaScript, CSS i slika. Kad je objavite na Mythexu, izgradimo je, prenesemo rezultat u objektnu pohranu u mapu za vašu stranicu i poslužujemo kroz edge mrežu, odnosno poslužitelje blizu vaših posjetitelja koji datoteke dohvaćaju iz pohrane i zadržavaju njihove kopije neko vrijeme. (Ako ste novi u ovome, naš vodič o tome što je CDN pokriva tu ideju.)

Bilo je pogrešno nešto na dva mjesta: redoslijed u kojem je ponovno objavljivanje mijenjalo datoteke i koliko su stare kopije dugo čuvane.

Problem 1: učitavanje je prvo praznilo stranicu

Ponovno objavljivanje obrisalo bi sve u mapi stranice, pa tek onda učitalo novi build. Dok je učitavanje trajalo, 12 sekundi za stranicu od 250 datoteka u našem lokalnom testu, posjetitelj čiji zahtjev nije već bio u edge cacheu dobio je 404 ili HTML stranicu čije su skripte vraćale 404.

Neuspjelo učitavanje bilo je gore. Mapa je već bila prazna, a na jednom od dva puta učitavanja novi index.html mogao je stići prije datoteke koja je pala. Objava prijavljena kao neuspjela mogla je ostaviti napola novu stranicu živom.

Popravak: pisanje preko, stranice zadnje, čišćenje kasnije

  1. Ne brišite prvo. Novi build učitava se preko starog.
  2. Resursi prije stranica. Stranica navodi skripte i stilove koji su joj potrebni, pa stranice idu gore zadnje. Dok nove stranice ne stignu, posjetitelj dobiva staru stranicu, koja navodi stare resurse, a oni su još tu. Kad stignu, novi resursi na koje se oslanjaju već su na mjestu.
  3. Ostatke uklonite kasnije. Prije učitavanja popisujemo od čega se stranica sastoji. Tri minute nakon uspješnog učitavanja svaka stavka s tog popisa koju novi build nije prepisao se briše. Tri minute duže su od 60 sekundi koliko stranica smije biti keširana na edgeu i u pregledniku, pa posjetitelj koji još drži staru stranicu može pronaći resurse koje ona navodi.
  4. U sumnji, ništa ne brišite. Ako popis prije učitavanja ne uspije, ništa se ne čisti. Višak datoteka je bezopasan, a sljedeća objava ga pokupi. Brisanje bez znanja što je tu bilo je način da stranica ostane prazna.

Neuspjelo učitavanje sada ostavlja prethodnu stranicu točno onakvom kakva je bila.

Testirali smo to od početka do kraja lokalno, koristeći pravu skriptu za učitavanje, pravu rutu učitavanja i uslugu pohrane, uz posjetitelje s hladnim edge cacheom. Sa starim kodom, 55 od 91 posjeta bilo je pokvareno tijekom ponovnog objavljivanja, a 61 od 92 tijekom neuspjelog. S novim kodom, 0 je bilo pokvareno u otprilike 3.500 posjeta koje su obuhvatile oba puta učitavanja, neuspjelo učitavanje i objavu nakon njega, a pobrisane su točno preostale datoteke.

Problem 2: ponovno objavljivanje je dugo trajalo da se pokaže

Čak i kad je učitavanje prošlo dobro, promjene su se sporo pojavljivale. Edge je svoju kopiju stranice držao 60 sekundi, a svake druge datoteke jedan dan, i tako je govorio i preglednicima. Datoteke s fiksnim imenom, poput logo.png, fonta ili svega iz mape public/, mogle su pokazivati staru verziju do jednog dana nakon ponovne objave.

Popravak: kopije datoteka pod verzijom builda

Kad edge od našeg API-ja pita gdje stranica živi, odgovor sada uključuje oznaku builda koja se mijenja pri svakoj objavi. Edge svoje kopije sprema pod tom oznakom. Objava tako postaje potpuno novi skup ključeva u cacheu čim istekne edgeova 30-sekundna provjera. Stare kopije se jednostavno više ne nalaze, pa edge može čuvati kopije jedan dan a da nikad ne posluži kopiju one objave koja ju je zamijenila.

Preglednici dobivaju dva različita pravila:

  • Hashirani izlaz builda, datoteke poput assets/index-CzLcxDO8.js čije se ime mijenja kad se sadržaj promijeni, kešira se godinu dana i označen je kao immutable. Pod tim imenom nikad ne može zastarjeti.
  • Sve ostalo, tj. stranice i datoteke s fiksnim imenom poput logotipa, označeno je s no-cache, što znači „provjeri prije korištenja”. Ako se ništa nije promijenilo, odgovor je mali 304 Not Modified bez tijela, jer sada poštujemo preglednikovu provjeru If-None-Match.

Razlikovanje ta dva zahtijeva pažnju: datoteka kopirana iz public/assets/ zadržava svoje ime, a keširanje assets/logo.png na godinu dana zauvijek bi zadržalo stari logotip. Zato se datoteka smatra hashiranom samo ako je u mapi izlaza builda i ako njezino ime ima segment koji izgleda kao hash, a ne obična riječ.

Lokalno su novi tekst i logotip bili vidljivi 6 sekundi nakon što je objava postala živa. Prije je to bilo 60 sekundi za stranicu i jedan dan za logotip.

Dvije manje popravke usput

  • Prazne stranice zbog HEAD zahtjeva. HEAD zahtjev traži zaglavlja stranice bez tijela. Keširali smo te prazne odgovore, pa je sljedeći posjetitelj te stranice dobio praznu stranicu. HEAD odgovori se više ne keširaju.
  • Prava stranica za „ovdje nema ničega”. Adresa bez aplikacije nekad je dobivala običan tekstualni odgovor „This published app is offline or the link was not found” s kodom 502. Sada dobiva pravu stranicu „There's no app here” sa statusom 404 i poveznicom natrag na Mythex za vlasnika. Nepoznate prilagođene domene dobivaju istu stranicu.

Što smo iz toga izvukli

  • Redoslijed je dio ispravnosti. Iste datoteke učitane drugačijim redoslijedom razlika su između pokvarene i radne stranice.
  • Brišite kasno i samo ono što znate. Čišćenje pomoću popisa uzetog prije učitavanja je sigurno; pražnjenje mape i nada da će učitavanje završiti nije.
  • Keširajte po verziji, a ne po vremenu. Vremena isteka su pogađanje kad se sadržaj mijenja. Ključ koji se mijenja s buildom je činjenica.

Srodno: vaša objavljena aplikacija sada ostaje aktivna dok je ponovno objavljujete. Više o objavi u dokumentaciji.

Mythex · Pricing · Izradite bilo što uz AI · Predlošci za web stranice i aplikacije · Mythex u usporedbi · Rječnik izrade aplikacija uz AI · Besplatni alati za izradu aplikacija uz AI · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी 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 简体中文 繁體中文(香港) 繁體中文(台灣)