స్టాటిక్ సైట్లు మళ్లీ ప్రచురిస్తున్నప్పుడు కూడా అందుబాటులో ఉంటాయి
Mythex లో స్టాటిక్ సైట్ను మళ్లీ ప్రచురించడం గతంలో లైవ్ ఫైళ్లను ముందుగా తొలగించి, తర్వాత కొత్త బిల్డ్ అప్లోడ్ చేసేది, కాబట్టి అప్లోడ్ జరిగినంత సేపు కొంతమంది విజిటర్లకు 404 పేజీ లేదా స్క్రిప్ట్లు లేని పేజీ కనిపించేది. విఫలమైన అప్లోడ్ సైట్ను ఖాళీగా లేదా సగం కొత్తగా వదిలేయగలదు. ఇప్పుడు కొత్త బిల్డ్ పాతదాని మీద రాయబడుతుంది, పేజీలు చివరన, మిగిలినవి కొన్ని నిమిషాల తర్వాత తొలగించబడతాయి. రెండవ పరిష్కారం ప్రచురణ మార్పులు ఒక నిమిషం బదులు సెకన్లలో కనిపించేలా చేస్తుంది — లేదా లోగో వంటి ఫైళ్లకు ఒక రోజు వరకు పట్టకుండా.
స్టాటిక్ సైట్ ఎలా అందించబడుతుంది
స్టాటిక్ సైట్ అంటే కేవలం ఫైళ్లు: HTML పేజీలు, JavaScript, CSS, చిత్రాలు. Mythex లో ఒకదాన్ని ప్రచురించినప్పుడు, మేము దాన్ని బిల్డ్ చేసి, అవుట్పుట్ను మీ సైట్ కోసం ఫోల్డర్ కింద object storage లోకి అప్లోడ్ చేస్తాము, మరియు edge network ద్వారా అందిస్తాము — విజిటర్లకు దగ్గరగా ఉన్న సర్వర్లు, అవి storage నుంచి ఫైళ్లు తెచ్చి కొంతకాలం కాపీలు ఉంచుకుంటాయి. (ఇది మీకు కొత్తైతే, CDN అంటే ఏమిటి గైడ్ ఆలోచనను వివరిస్తుంది.)
రెండు విషయాలు తప్పుగా ఉండేవి: మళ్లీ ప్రచురించేటప్పుడు ఫైళ్లు మారే క్రమం, మరియు పాత కాపీలు ఎంతకాలం ఉంచబడతాయి.
సమస్య 1: అప్లోడ్ ముందుగా సైట్ను ఖాళీ చేసేది
మళ్లీ ప్రచురించినప్పుడు సైట్ ఫోల్డర్లోని అన్నీ తొలగించి, తర్వాత కొత్త బిల్డ్ అప్లోడ్ చేసేది. అప్లోడ్ పట్టిన సమయమంతా — మా లోకల్ టెస్ట్లో 250 ఫైళ్ల సైట్కు 12 సెకన్లు — edge వద్ద ఇంకా కాష్ కాని అభ్యర్థన చేసిన విజిటర్కు 404, లేదా స్క్రిప్ట్లు 404 ఇచ్చే HTML పేజీ వచ్చేది.
విఫలమైన అప్లోడ్ ఇంకా ఘోరంగా ఉండేది. ఫోల్డర్ ఇప్పటికే ఖాళీగా ఉండేది, మరియు రెండు అప్లోడ్ మార్గాల్లో ఒకదానిలో, విఫలమైన ఫైల్ కంటే ముందే కొత్త index.html పడిపోవచ్చు. విఫలమైనట్టు నివేదించిన ప్రచురణ సగం కొత్త సైట్ను లైవ్లో వదిలేయగలదు.
పరిష్కారం: పైన రాయండి, పేజీలు చివర, తర్వాత శుభ్రం చేయండి
- ముందుగా తొలగించవద్దు. కొత్త బిల్డ్ పాతదాని మీద అప్లోడ్ అవుతుంది.
- అసెట్స్ ముందు, పేజీలు తర్వాత. పేజీ తనకు అవసరమైన స్క్రిప్ట్లు మరియు స్టైల్స్ను పేరుతో చెబుతుంది, కాబట్టి పేజీలు చివరగా వెళ్తాయి. కొత్త పేజీలు చేరే వరకు విజిటర్లకు పాత పేజీ వస్తుంది, అది పాత అసెట్స్ పేరు చెబుతుంది, అవి ఇంకా ఉంటాయి. కొత్త పేజీలు చేరిన తర్వాత, అవి పేరు చెప్పే కొత్త అసెట్స్ ఇప్పటికే ఉంటాయి.
- లీఫ్ఓవర్స్ను తర్వాత తొలగించండి. అప్లోడ్ ముందు, సైట్ దేనితో తయారైందో జాబితా చేస్తాము. విజయవంతమైన అప్లోడ్ తర్వాత మూడు నిమిషాలకు, ఆ జాబితాలో ఉండి కొత్త బిల్డ్ తిరిగి రాయని వాటిని తొలగిస్తాము. మూడు నిమిషాలు పేజీ edge వద్ద మరియు బ్రౌజర్లో 60 సెకన్లు కాష్ అయ్యే సమయం కంటే ఎక్కువ, కాబట్టి పాత పేజీని పట్టుకున్న విజిటర్ దానికి అవసరమైన అసెట్స్ కనుగొనగలరు.
- సందేహం ఉంటే, ఏమీ తొలగించవద్దు. అప్లోడ్ ముందు జాబితా విఫలమైతే, ఏదీ ప్రూన్ చేయబడదు. లీఫ్ఓవర్ ఫైళ్లు హానిచేయనివి, తదుపరి ప్రచురణ వాటిని శుభ్రం చేస్తుంది. ఏముందో తెలియకుండా తొలగించడమే సైట్ ఖాళీ అవ్వడానికి దారితీస్తుంది.
ఇప్పుడు విఫలమైన అప్లోడ్ మునుపటి సైట్ను సరిగ్గా అలాగే వదిలేస్తుంది.
మేము దీన్ని చివరి వరకు లోకల్గా పరీక్షించాము: నిజమైన అప్లోడ్ స్క్రిప్ట్, నిజమైన అప్లోడ్ రూట్ మరియు storage సేవ, చల్లని edge కాష్తో వచ్చే విజిటర్లతో. పాత కోడ్తో, మళ్లీ ప్రచురించినప్పుడు 91 లో 55 విజిట్స్ విరిగాయి, విఫలమైన ప్రచురణలో 92 లో 61. కొత్త కోడ్తో, రెండు అప్లోడ్ మార్గాలు, విఫలమైన అప్లోడ్, దాని తర్వాతి ప్రచురణ వంటి సుమారు 3,500 విజిట్స్లో 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జవాబులు కాష్ చేయబడవు. - “ఏమీ లేదు” అనే నిజమైన పేజీ. యాప్ లేని చిరునామాకు గతంలో “This published app is offline or the link was not found” అనే సాదా టెక్స్ట్ మరియు 502 ఎర్రర్ కోడ్ వచ్చేది. ఇప్పుడు సరైన పేజీ వస్తుంది, “There's no app here”, 404 స్టేటస్తో, యజమాని కోసం Mythex కు తిరిగి వెళ్లే మార్గంతో. తెలియని కస్టమ్ డొమైన్లకు కూడా అదే పేజీ వస్తుంది.
మేము ఏమి నేర్చుకున్నాము
- క్రమం కూడా సరైనతనంలో భాగం. అదే ఫైళ్లను వేరే క్రమంలో అప్లోడ్ చేస్తే, అది విరిగిన సైట్కు మరియు పనిచేసే సైట్కు మధ్య తేడా.
- ఆలస్యంగా తొలగించండి, మరియు మీకు తెలిసినవి మాత్రమే. అప్లోడ్ ముందు తీసుకున్న జాబితాతో ప్రూన్ చేయడం సురక్షితం; ఫోల్డర్ ఖాళీ చేసి అప్లోడ్ పూర్తవుతుందని ఆశించడం కాదు.
- సమయం ఆధారంగా కాదు, వెర్షన్ ఆధారంగా కాష్ చేయండి. గడువు సమయాలు కంటెంట్ ఎప్పుడు మారుతుందో ఊహ. బిల్డ్తో మారే కీ ఒక వాస్తవం.
సంబంధిత: మీ ప్రచురించిన యాప్ ఇప్పుడు మళ్లీ ప్రచురిస్తున్నప్పుడు కూడా అందుబాటులో ఉంటుంది. ప్రచురణపై మరింత డాక్స్ లో ఉంది.