Статикалық сайттар қайта жариялау кезінде жұмыс істей береді
Mythex-те статикалық сайтты қайта жариялау бұрын жанды файлдарды жойып, содан кейін жаңа құрастыруды жүктейтін. Жүктеу уақытында кейбір келушілер 404 бетін немесе скрипттері жоқ бетті көретін. Сәтсіз жүктеу сайтты бос немесе жартылай жаңа күйде қалдыруы мүмкін еді. Енді жаңа құрастыру ескісінің үстіне жазылады, беттер соңынан, ал артық файлдар бірнеше минуттан кейін өшіріледі. Екінші түзету қайта жариялауды бір минутта емес, секундтарда көрсетеді, ал логотип сияқты файлдар үшін бір күнге дейін кетуі мүмкін еді.
Статикалық сайт қалай беріледі
Статикалық сайт — тек файлдардан тұратын сайт: HTML беттері, JavaScript, CSS, суреттер. Mythex-те оны жариялағанда біз оны құрастырып, шығысын сіздің сайтыңызға арналған қалта астында объектілік сақтауға жүктейміз және edge желісі арқылы береміз. Edge — келушілеріңізге жақын серверлер, олар файлдарды сақтаудан алып, біраз уақыт көшірмесін сақтап тұрады. (Бұл идеяға жаңа болсаңыз, CDN деген не нұсқаулығы түсіндіреді.)
Екі нәрсе дұрыс емес болды: қайта жариялау кезінде файлдардың өзгеру реті және ескі көшірмелердің қанша уақыт сақталуы.
1-мәселе: жүктеу сайтты алдымен бос қалдырды
Қайта жариялау сайт қалтасындағы барлығын алдымен жойып, содан кейін жаңа құрастыруды жүктейтін. Жүктеу ұзаққа созылған кезде — біздің жергілікті сынақта 250 файлдық сайтқа 12 секунд — edge-те сұрауы кэштелмеген келуші 404 алды немесе скрипттері 404 қайтаратын HTML бетін алды.
Сәтсіз жүктеу одан да жаман болды. Қалта бос қалған, ал екі жүктеу жолының бірінде жаңа index.html сәтсіз болған файлдан бұрын түсуі мүмкін еді. Сәтсіз деп хабарланған жариялау жанды сайтта жартылай жаңа күйді қалдыруы мүмкін еді.
Түзету: үстіне жазу, беттер соңынан, кейін тазалау
- Алдымен жоймаңыз. Жаңа құрастыру ескісінің үстіне жүктеледі.
- Активтер беттерден бұрын. Бет өзі қажет скрипттер мен стильдерді атайды, сондықтан беттер соңынан жүктеледі. Жаңа беттер келгенше келушіге ескі бет беріледі, ол ескі активтерді атайды, олар әлі бар. Жаңа беттер келгенде, олар атайтын жаңа активтер қазірдің өзінде орнында болады.
- Артық файлдарды кейін өшіріңіз. Жүктемес бұрын біз сайттың неден тұратынын тізімге аламыз. Сәтті жүктеуден үш минут өткен соң, сол тізімдегі және жаңа құрастыру қайта жазбаған кез келген файл өшіріледі. Үш минут edge-те және браузерде бетті кэштеуге болатын 60 секундтан ұзақ, сондықтан ескі бетті ұстап тұрған келуші ол атайтын активтерді таба алады.
- Күмән болса, ештеңе жоймаңыз. Жүктемес бұрын тізімді алу сәтсіз болса, ештеңе тазаланбайды. Артық файлдар зиянсыз, келесі жариялау оларды тазалайды. Не бар екенін білмей жою — сайттың бос қалуының жолы.
Сәтсіз жүктеу енді алдыңғы сайтты дәл бұрынғыдай қалдырады.
Біз мұны жергілікті жерде толық сынадық: нақты жүктеу скриптін, нақты жүктеу маршрутын және сақтау қызметін пайдаланып, edge кэшін суық күйде келушілермен. Ескі кодпен қайта жариялау кезінде 91-нің 55-і, ал сәтсіз жариялау кезінде 92-нің 61-і бұзылған болды. Жаңа кодпен екі жүктеу жолын, сәтсіз жүктеуді және одан кейінгі жариялауды қамтитын шамамен 3500 келуде 0 бұзылған болды, ал тек артық файлдар дәл тазаланды.
2-мәселе: қайта жариялау көрінуі тым ұзақ уақыт алды
Жүктеу сәтті өткен кездің өзінде өзгерістер баяу көрінетін. Edge бетті 60 секунд, басқа барлық файлдарды бір күн сақтайтын, және браузерлерге де дәл осылай айтатын. Атауы тұрақты файлдар — logo.png, қаріп, public/ қалтасынан кез келген нәрсе — қайта жариялағаннан кейін бір күнге дейін ескі нұсқаны көрсетуі мүмкін еді.
Түзету: құрастыру маркері бар файл көшірмелері
Edge біздің API-дан сайттың қайда орналасқанын сұрағанда, жауапта әрбір жарияланым өзгеретін құрастыру маркері енді бар. Edge көшірмелерін осы маркер астында сақтайды. Сондықтан жариялау edge-тің 30 секундтық іздеуі аяқталғанда жаңа кэш кілттерінің бүкіл жиыны болып шығады. Ескі көшірмелер енді ешқашан табылмайды, сондықтан edge көшірмелерді бір күн сақтай алады, және өздерін ауыстырған жариялаудан кейін ескісін ешқашан бермейді.
Браузерлер екі түрлі ереже алады:
- Хэштелген құрастыру шығысы — мазмұны өзгергенде аты да өзгеретін
assets/index-CzLcxDO8.jsсияқты файлдар — бір жылға кэштеледі және immutable деп белгіленеді. Бұл атымен ешқашан ескірмейді. - Қалғанының бәрі — беттер мен логотип сияқты тұрақты атты файлдар —
no-cacheбелгісімен, яғни «пайдаланбас бұрын тексер» дегенді білдіреді. Ешнәрсе өзгермесе, жауап бос денесі жоқ шағын304 Not Modifiedболады, енді біз браузердіңIf-None-Matchтексеруін құрметтейміз.
Бұларды ажырату мұқият жасауды талап етеді: public/assets/ қалтасынан көшірілген файл өз атын сақтайды, ал assets/logo.png файлын бір жылға кэштеу ескі логотипті бір жылға бекітіп қояды. Сондықтан файл тек құрастыру шығыс қалтасында және аты кәдімгі сөз емес, хэшке ұқсайтын бөлікке ие болса ғана хэштелген деп есептеледі.
Жергілікті жерде жаңа бет пен логотип жариялау жанды болғаннан кейін 6 секундта көрінді. Бұрын бет үшін 60 секунд, логотип үшін бір күн болатын.
Басқа екі шағын түзету
- HEAD сұраныстарынан бос беттер.
HEADсұранысы беттің тақырыптарын сұрайды, денесін емес. Біз бос жауаптарды кэштедік, сондықтан келесі келуші бос бет көрді. ЕндіHEADжауаптары кэштелмейді. - «Мұнда ештеңе жоқ» үшін нақты бет. Қолданбасы жоқ адрес бұрын 502 қате кодымен «Бұл жарияланған қолданба өшірулі немесе сілтеме табылмады» деген қарапайым мәтін беретін. Енді ол нақты бетті алады: «Мұнда қолданба жоқ», 404 мәртебесімен және иеге Mythex-ке қайту сілтемесімен. Белгісіз теңшелген домендер де дәл осы бетті алады.
Одан не алдық
- Реті де дұрыстықтың бөлігі. Бірдей файлдар әр түрлі ретпен жүктелсе, сайт бұзылған мен жұмыс істейтін сайттың арасындағы айырма болады.
- Кешіктіріп жойыңыз, тек білетініңізді. Жүктеуге дейін алынған тізіммен тазалау қауіпсіз; қалтаны бос қалдырып, жүктеудің аяқталуына үміт артуға болмайды.
- Уақыт бойынша емес, нұсқа бойынша кэштеңіз. Жарамдылық мерзімі — мазмұн қашан өзгеретінін болжау. Құрастырумен бірге өзгеретін кілт — факт.
Байланысты: жарияланған қолданбаңыз қайта жариялау кезінде қалай жұмыс істейді. Жариялау туралы толық мәлімет құжаттарда.