Статик сайтууд дахин нийтлэгдэх явцад ажилласаар байдаг
Mythex дээр статик сайтыг дахин нийтлэхэд өмнө нь амьд файлуудыг устгаад дараа нь шинэ build байршуулдаг байсан, тиймээс байршуулалтын хугацаанд зарим зочид 404 хуудас эсвэл скриптгүй хуудас хүлээн авдаг байсан. Амжилтгүй байршуулалт сайтыг хоосон эсвэл хагас шинэ болгож орхидог байв. Одоо шинэ build хуучин дээр нь бичигддэг, хуудсууд хамгийн сүүлд, үлдэгдлийг хэдэн минутын дараа устгадаг. Хоёр дахь засвар нь дахин нийтлэлтийг минутын оронд секундэд харагдуулдаг — эсвэл лого шиг файлуудын хувьд нэг хоног хүртэл.
Статик сайт хэрхэн үйлчилдэг вэ
Статик сайт бол зөвхөн файлууд: HTML хуудсууд, JavaScript, CSS, зургууд. Mythex дээр нийтлэхэд бид үүнийг build хийж, гаралтыг сайтын фолдертой объект хадгалалтад байршуулж, edge сүлжээгээр үйлчилдэг — зочдод ойр серверүүд, файлыг хадгалалтаас авч хэсэг хугацаанд хуулбарыг хадгалдаг. (Хэрэв шинэ бол CDN гэж юу вэ гарын авлага санааг тайлбарлана.)
Хоёр зүйл буруу байсан: дахин нийтлэлт файлуудыг өөрчлөх дараалал, мөн хуучин хуулбарыг хэр удаан хадгалдаг байсан.
Асуудал 1: байршуулалт сайтыг эхлээд хоослодог байсан
Дахин нийтлэлт сайтын фолдерын бүх зүйлийг устгаж, дараа нь шинэ build байршуулдаг байсан. Байршуулалт үргэлжлэх хугацаанд — бидний локал туршилтад 250 файлтай сайтад 12 секунд — edge дээр кэшлэгдээгүй хүсэлт авсан зочид 404, эсвэл скрипт нь 404 буцаадаг HTML хуудас хүлээн авдаг байв.
Амжилтгүй байршуулалт илүү муу байсан. Фолдер аль хэдийн хоосон байсан, мөн хоёр байршуулалтын замын нэг дээр шинэ index.html алдаатай файлаас өмнө орж магадгүй байв. Амжилтгүй гэж мэдэгдсэн нийтлэлт хагас шинэ сайтыг амьд үлдээж болно.
Засвар: дээр бичнэ, хуудсууд хамгийн сүүлд, дараа цэвэрлэнэ
- Эхлээд бүү устга. Шинэ build хуучин дээр байршуулагдана.
- Хуудсаас өмнө хөрөнгүүд. Хуудас нь хэрэгтэй скрипт, стилийг нэрлэдэг тул хуудсууд хамгийн сүүлд ордог. Шинэ хуудсууд орох хүртэл зочид хуучин хуудсыг авна, хуучин хөрөнгийг нэрлэдэг, тэдгээр нь байсаар байна. Тэд орсны дараа тэдний нэрлэсэн шинэ хөрөнгө аль хэдийн байранд байна.
- Үлдэгдлийг хожим устга. Байршуулахаас өмнө бид сайт юунаас бүтсэнийг жагсаана. Амжилттай байршуулснаас гурван минутын дараа жагсаалтын шинэ build дахин бичээгүй зүйлсийг устгана. Гурван минут нь edge болон хөтөчид хуудсыг кэшлэж болох 60 секундээс урт, тиймээс хуучин хуудсыг барьсан зочин түүний нэрлэсэн хөрөнгийг олох боломжтой.
- Эргэлзвэл юу ч бүү устга. Байршуулахаас өмнө жагсаалт амжилтгүй бол юу ч цэвэрлэхгүй. Үлдэгдэл файлууд хор хөнөөлгүй, дараагийн нийтлэлт цэвэрлэнэ. Юу байсныг мэдэлгүй устгах нь сайтыг хоослох арга.
Амжилтгүй байршуулалт одоо өмнөх сайтыг яг өмнөх шигээ үлдээдэг.
Бид үүнийг эхнээс нь дамжуулан локал дээр туршсан: бодит байршуулалтын скрипт, бодит байршуулалтын маршрут, хадгалалтын үйлчилгээ, edge кэш хүйтэн байх үед ирсэн зочид. Хуучин кодоор 91-ээс 55 айлчлал дахин нийтлэлтийн үед эвдэрсэн, 92-оос 61 амжилтгүй нийтлэлтийн үед. Шинэ кодоор 0 эвдэрсэн, хоёр байршуулалтын замыг, амжилтгүй байршуулалтыг болон түүний дараах нийтлэлтийг хамарсан ойролцоогоор 3500 айлчлалд, мөн яг үлдэгдэл файлууд л цэвэрлэгдсэн.
Асуудал 2: дахин нийтлэлт харагдахад удаан байсан
Байршуулалт сайн явсан үед ч өөрчлөлтүүд харагдахад удаан байв. Edge хуудсыг 60 секунд, бусад бүх файлыг нэг хоног хадгалдаг байсан, мөн хөтөчид ижил дүрмийг хэлдэг байсан. logo.png, фонт, public/ фолдероос ирсэн бүх зүйл шиг тогтмол нэртэй файлууд дахин нийтлэлтийн дараа нэг хоног хуучин хувилбараа харуулж болно.
Засвар: build дор файлын хуулбарууд
Edge API-гаас сайт хаана байгааг асуухад хариултад одоо нийтлэлт дуусах бүрт өөрчлөгддөг build тэмдэг орно. Edge хуулбаруудаа энэ тэмдгийн дор хадгалдаг. Тиймээс нийтлэлт edge-ийн 30 секундын lookup дуусахтай зэрэг шинэ кэшийн түлхүүрүүдийн багц болдог. Хуучин хуулбарууд дахин олдохгүй, тиймээс edge хуулбарыг нэг хоног хадгалж болно, мөн тэдгээрийг орлуулсан нийтлэлтээс хойш хэзээ ч үйлчлэхгүй.
Хөтчүүд хоёр өөр дүрэмтэй болсон:
- Hash-тай build гаралт —
assets/index-CzLcxDO8.jsгэх мэт, агуулга өөрчлөгдөхөд нэр нь өөрчлөгддөг файлууд — нэг жил кэшлэгдэж, immutable гэж тэмдэглэгдсэн. Тэр нэрээр хэзээ ч хуучирдаггүй. - Бусад бүх зүйл — хуудсууд болон лого шиг тогтмол нэртэй файлууд —
no-cacheгэж тэмдэглэгдсэн, энэ нь «ашиглахаас өмнө шалга» гэсэн утгатай. Юу ч өөрчлөгдөөгүй бол хоосон body-гүй жижиг304 Not Modifiedхариу ирнэ, учир нь бид одоо хөтчийнIf-None-Matchшалгалтыг хүндэтгэдэг.
Хоёрыг ялгахад анхаарал хэрэгтэй: public/assets/-аас хуулсан файл өөрийн нэрээ хадгалдаг, мөн assets/logo.png-ийг нэг жил кэшлэвэл хуучин логоо нэг жил хадгалах байсан. Тиймээс файл зөвхөн build гаралтын фолдерт байж, нэр нь ердийн үг биш, hash шиг сегменттэй бол hash-тай гэж тооцогдоно.
Локал дээр шинэ хуудас болон лого нийтлэлт амьдрахаас 6 секундын дараа харагдсан. Өмнө нь хуудас 60 секунд, лого нэг хоног байсан.
Бага зэргийн хоёр засвар
- HEAD хүсэлтээс хоосон хуудас.
HEADхүсэлт нь хуудасны header-ийг body-гүйгээр асуудаг. Бид эдгээр хоосон хариултуудыг кэшлэж байсан, тиймээс дараагийн зочин тэр хуудсыг хоосон авдаг байсан.HEADхариултуудыг одоо кэшлэхгүй. - «Энд юу ч байхгүй» гэсэн жинхэнэ хуудас. Аппгүй хаяг нь 502 алдааны кодтой «Энэ нийтлэгдсэн апп офлайн байна эсвэл холбоос олдсонгүй» гэсэн энгийн текст авдаг байв. Одоо эзэнд Mythex руу буцах холбоостой, 404 статустай «Энд апп байхгүй» гэсэн жинхэнэ хуудас гардаг. Үл мэдэгдэх custom домэйнууд мөн адил хуудас авдаг.
Бидний авсан дүгнэлт
- Дараалал бол зөв байдлын нэг хэсэг. Ижил файлуудыг өөр дарааллаар байршуулах нь эвдэрсэн ба ажиллаж буй сайтын ялгаа.
- Хожим устга, зөвхөн мэддэг зүйлээ. Байршуулахаас өмнөх жагсаалтаар цэвэрлэх аюулгүй; фолдерыг хоослоод байршуулалт дуусна гэж найдах аюулгүй биш.
- Цагаар бус хувилбараар кэшлэ. Хугацааны дуусах нь агуулга хэзээ өөрчлөгдөхийг таах явдал. Build-тэй хамт өөрчлөгддөг түлхүүр бол баттай факт.
Холбоотой: таны нийтлэгдсэн апп дахин нийтлэх явцдаа ажилласаар байна. Нийтлэлтийн талаар дэлгэрэнгүй баримтад.