உலாவிகளுக்கு (browsers) 5.5 MB Python runtime-ஐ வழங்கும் ஒரு குழுவினர், சமீபத்திய sprint காலப்பகுதியில் பதிவு செய்யப்பட்ட பிழைகளில் 69% ஒரே ஒரு தவறான தலைப்பின் கீழ் வந்தன என்பதைக் கண்டறிந்தனர்; மேலும் அவற்றில் 89% உண்மையில் நெட்வொர்க் timeout-களாக இருந்தன. இந்தத் தவறான அறிக்கை, டெவலப்பர்களைத் தவறான பிழைத்திருத்தப் (debugging) பாதையில் வழிநடத்தியதுடன், கணிசமான எண்ணிக்கையிலான பயனர்களை அமைதியான பதிவிறக்கத் தோல்விகளுடன் (silent download failures) விட்டுச் சென்றது—பெரிய அளவிலான assets-களைக் கொண்ட எந்தவொரு web-app-லும் விரைவில் இத்தகைய சிக்கலைச் சந்திக்க நேரிடும்.
டேஷ்போர்டு தவறாக வழிநடத்தியது
பிழை-கண்காணிப்பு அமைப்பு (error-tracking system), பிழைகள் முதன்முதலில் தோன்றும் குறியீட்டு இடத்தைப் (code location) பொறுத்து நிகழ்வுகளைத் தானாகவே குழுவாக்குகிறது. அதன் விளைவாகக் கிடைத்த தலைப்பு, runtime loader-இல் உள்ள ஒரு சாதாரணப் பிழை போலத் தெரிந்தது, எனவே timeout ஆகாத குறியீட்டுப் பாதைகளைத் (code paths) தேடுவதிலேயே sprint முழுவதும் வீணடிக்கப்பட்டது. குழுவினர் அதன் அடிப்படையிலுள்ள metadata-வை ஆய்வு செய்தபோது, உண்மையான நிலை தெரியவந்தது: பெரும்பாலான தோல்விகள் பிழைகள் அல்ல, மாறாக timeout-ஐத் தூக்கிய முடங்கிய நெட்வொர்க் இணைப்புகள் (stalled network connections) ஆகும்.
முக்கியக் குறிப்பு: ஒரு பிழையின் தலைப்பு என்பது வசதிக்காக மட்டுமே, அது ஒரு நோய் கண்டறிதல் (diagnosis) அல்ல. தலைப்பு உண்மையில் எதைக் குறிக்கிறது என்பதைச் சரிபார்க்க அவ்வப்போது மூலத் தரவுகளை (raw data) ஆழமாக ஆய்வு செய்யுங்கள்.
பிரவுசர் கனெக்ஷன் API ஒரு placeholder-ஐ வழங்கியது
இணைய வேகம் குறைவாக உள்ள பயனர்களை 5.5 MB பதிவிறக்கத்திற்காகத் தாமதப்படுத்தாமல் இருக்க, டெவலப்பர்கள் பிரவுசரின் Network Information API (navigator.connection)-ஐப் பயன்படுத்தினர். அந்த API, ஒவ்வொரு புதிய பயனருக்கும் நிலையான 1.7 Mbps அலைவரிசையை (bandwidth) அறிக்கையிட்டது.
ஒரு புதிய பயனரைப் பற்றிய வரலாற்றுத் தரவுகள் (historical data) இல்லாதபோது, பிரவுசர்கள் ஒரு இயல்புநிலை மதிப்பை (default value) வழங்கும். அந்த இயல்புநிலை மதிப்பு ஒரு குறிப்பு மட்டுமே, அது உறுதியான வேகம் அல்ல. ஒவ்வொரு புதிய அமர்விற்கும் (session) அதே placeholder தோன்றினால், அந்த API இன்னும் அந்தப் பயனர்களுக்குத் துல்லியமாகச் சரிசெய்யப்படவில்லை (calibrated) என்பதைக் குறிக்கிறது.
முக்கியக் குறிப்பு: மாறாத எந்தவொரு நெட்வொர்க் சிக்னலையும் ஒரு மாற்று வழிமுறை (fallback) என்று கருதுங்கள், அதை ஒரு உறுதியான அளவீடாக (definitive metric) எடுத்துக்கொள்ளாதீர்கள்.
ஒருமுறை எடுக்கப்படும் snapshots நம்பகமானவை அல்ல
நம்பகமற்ற அலைவரிசைத் தகவலைத் தவிர்த்த பிறகு, குழுவினர் தங்கள் சோதனைத் தொகுப்பில் (test suite) வேலை செய்யும் என்று தோன்றிய வேறொரு சிக்னலுக்கு மாறினர். ஒருமுறை சோதனை வெற்றிகரமாக முடிந்தது, ஆனால் அதே சோதனையை மூன்று முறை செய்தபோது ஒவ்வொரு முறையும் தோல்விகள் ஏற்பட்டன. நெட்வொர்க் வேகம் தொடர்ந்து மாறிக்கொண்டே இருக்கும். குறியீடு ஒருமுறை மட்டுமே snapshot எடுத்து, ஒரு நிரந்தர முடிவை எடுத்தது, அதன் பிறகு இணைப்பு ஒரு கணம் மாறினாலும் அது தொடர்ந்து செயல்பட்டது.
முக்கியக் குறிப்பு: மாறிக்கொண்டே இருக்கும் ஒரு இலக்கின் (moving target) ஒற்றை அளவீட்டை வைத்து நிரந்தரமான முடிவை எடுக்காதீர்கள். ஒருமுறை மட்டும் சரிபார்க்காமல் (polling), மாற்ற நிகழ்வுகளைக் (change events) கவனிக்கும்படி (subscribe) அமைக்கவும்.
குழுவினர் செயல்படுத்திய நடைமுறைத் தீர்வுகள்
- இணைப்பு மாற்றங்களைக் கவனித்தல் (Subscribe to connection changes).
navigator.connection-ஐ ஒருமுறை மட்டும் வாசிப்பதற்குப் பதிலாக, இப்போது குறியீடுchangeநிகழ்வைக் கவனித்து, பதிவிறக்கத்தின் போது அலைவரிசை குறைந்தாலோ அல்லது அதிகரித்தாலோ அதற்கேற்பச் செயல்படுகிறது. - “முன்னேற்றம் இல்லா” வாட்ச்டாக் (watchdog) சேர்த்தல். ஒரு குறிப்பிட்ட கால இடைவெளிக்குப் பிறகும் எந்த முன்னேற்றமும் இல்லாத கோரிக்கைகளை (request) ஒரு டைமர் (timer) ரத்து செய்கிறது, இதனால் பிரவுசர் மீண்டும் முயற்சிக்கவோ அல்லது மாற்று வழியைத் தேர்ந்தெடுக்கவோ முடிகிறது.
- பதிவிறக்கத்தின் நடுவே CDNs-ஐ மாற்றுவதைத் தவிர்த்தல். மெதுவான இணைப்பில் ஒரு பெரிய கோப்பின் மூலத்தை (source) மாற்றும்போது, பரிமாற்றம் மீண்டும் பூஜ்ஜியத்திலிருந்து தொடங்கும், இதனால் ஏற்கனவே பெறப்பட்ட தரவுகள் வீணாகும். இப்போது பதிவிறக்கம் முழுவதற்கும் ஆரம்பத்தில் தேர்ந்தெடுக்கப்பட்ட CDN-ஐயே பயன்படுத்துகிறது.
- கனமான caching பணிகளைத் தள்ளிவைத்தல். கேஷிற்கு (cache) அதிக அளவிலான தரவுகளை எழுதும் பணிகளை, runtime பதிவிறக்கம் முடிந்த பிறகு செய்யத் தள்ளிவைப்பதன் மூலம், முக்கியமான பாதையை (critical path) சுருக்கமாக வைத்திருக்க முடியும்.
உங்கள் டேஷ்போர்டுகள் மிகவும் துல்லியமான மற்றும் நேர்த்தியான பிம்பத்தைக் காட்டினால், இன்னும் ஆழமாக ஆராயுங்கள். ஒரு நெட்வொர்க் அளவீடு ஒருபோதும் மாறவில்லை என்றால், அதை ஒரு placeholder என்று கருதுங்கள். ஒருமுறை எடுக்கப்பட்ட snapshot ஒரு பல மெகாபைட் பதிவிறக்கத்தின் விதியைத் தீர்மானித்தால், நீங்கள் ஒரு மாயையை (mirage) நம்பிப் பந்தயம் கட்டுகிறீர்கள் என்று அர்த்தம். அத்தகைய பந்தயங்கள் பயனர்களின் நம்பிக்கையைச் சிதைக்கும் அமைதியான தோல்விகளாக வெளிப்படும்—இதைச் செய்த பிறகு எவ்வளவு புத்திசாலித்தனமான குறியீட்டைக் கொண்டு வந்தாலும் முழுமையாகச் சரிசெய்ய முடியாது.
