Playground ya Python inayofanya kazi kwenye kivinjari iliyo na runtime ya MB 5.5 ilianza kufeli kimyakimya kwa watumiaji wenye miunganisho ya mtandao ya polepole. Chanzo cha tatizo hilo kilikuwa matumizi mabaya ya Network Information API na dashibodi ya kuunganisha makosa iliyotoa maelezo yasiyo sahihi kuhusu tatizo hilo. Hitilafu hiyo ilifichika kwa wiki kadhaa, ikipoteza muda wa watengenezaji na kuacha sehemu ya watumiaji wasiweze kuendesha kodi.

Jinsi tatizo lilivyojitokeza

Mfuatiliaji wa makosa wa playground hiyo ulionyesha ujumbe mmoja uliovutia macho: “undefined is not an object.” Kichwa cha habari kilidokeza kuwa ni kosa dogo la uandishi wa JavaScript, hivyo timu ilitafuta njia ya kodi ambayo haikuwepo. Walipokagua metadata ghafi, waliona kwamba 89% ya matukio hayo yalikuwa ni network timeouts. Dashibodi ilikuwa imechukua kosa la kwanza lililofika na kulitumia kutaja kundi zima la matukio, hivyo kuficha aina halisi ya hitilafu.

Somo la 1 – Vichwa vya habari vya dashibodi vinaweza kudanganya

Dashibodi inayokusanya matukio husaidia tu ikiwa mantiki yake ya ukusanyaji inaakisi chanzo halisi cha kila tukio. Hapa, kuunganisha matukio kwa mahali badala ya kwa chanzo cha kosa kulitoa picha ya uongo ya hitilafu ya upande wa mteja (client-side bug). Funzo: usiwahi kutatua tatizo kulingana na kichwa cha habari cha dashibodi pekee. Chukua sampuli ya matukio ya msingi na uhakikishe nini kinaendelea hasa kabla ya kutenga rasilimali.

Somo la 2 – Thamani za placeholder si vipimo halisi

Ili kuepuka kupakia runtime nzito kwa watumiaji wenye viunganishi dhaifu, kodi ilitumia Network Information API na kusoma sifa ya downlink, ambayo huripoti megabiti kwa sekunde. Wakati wa ziara ya kwanza, Chrome mara nyingi hurudisha thamani ya mpito (placeholder) badala ya kipimo halisi. Mantiki hiyo ilichukulia placeholder hiyo kama muunganisho wa haraka na kuacha hatua ya uboreshaji (optimization), jambo ambalo liliwazuia watumiaji ambao uboreshaji huo ulikuwa unapaswa kuwasaidia.

Chukulia thamani yoyote ya kiwango (default) au sentinel kama "hakuna data." Placeholder inapaswa kuchochea mkakati wa mbadala (fallback strategy), badala ya kutafsiriwa kama kasi halisi ya mtandao.

Somo la 3 – Hali ya mtandao hubadilika, hivyo picha moja ya wakati huo haiaminiki

Baada ya tatizo la downlink, timu ilibadilisha mbinu na kuanza kukagua effectiveType, ambayo hupanga viunganisho kama “4g”, “3g”, n.k. Jaribio la haraka la maabara lilifanikiwa, lakini jaribio lilelile liliporudiwa muda mfupi baadaye lilifeli. Viunganisho vya simu hubadilika-badilika; mtumiaji anaweza kuwa kwenye muunganisho wa haraka wa 4G sekunde moja na kushuka hadi 3G ya polepole sekunde inayofuata. Kukagua muunganisho wakati wa kupakia ukurasa pekee ni kamari.

Njia sahihi ni kujiunga (subscribe) na tukio la change kwenye kitu cha Network Information na kuchukua hatua kulingana na mabadiliko yoyote ya upana wa bandi (bandwidth) badala ya kufanya uamuzi wa mara moja tu.

Mabadiliko ambayo timu ilifanya

  • Upakaji wa hatua mbili – Runtime sasa inaanza na faili dogo la bootstrap. Ikiwa muunganisho utatambuliwa kuwa wa polepole, bootstrap inapakua sehemu nyingine ya runtime katika vipande vidogo, hivyo kupunguza uwezekano wa upakaji kukatika kabisa.
  • Ufuatiliaji wa moja kwa moja – Badala ya kusoma downlink mara moja tu, kodi sasa inasikiliza matukio ya change na kurekebisha mkakati wa upakaji papo hapo.
  • Uteuzi wa chanzo thabiti – Hapo awali, mfumo ulikuwa unabadilisha CDNs katikati ya upakaji wakati endpoint ya haraka zaidi inapojitokeza. Kwenye muunganisho wa polepole, hii ilisababisha upakaji kuanza upya kutoka sifuri, jambo lililozidisha tatizo. Mantiki mpya inafunga chanzo kwa muda wote wa upakaji.
  • Uandishi wa cache uliocheleweshwa – Operesheni nzito za cache ambazo zilikuwa zikifanya kazi kabla ya programu kutumika sasa zinahairishwa hadi baada ya runtime kuanza, hivyo kuacha upana wa bandi kwa ajili ya upakaji muhimu.

Athari pana

Kwa watengenezaji wanaojenga zana zinazofanya kazi kwenye wavuti, mabadiliko ya mtandao ni jambo la msingi la kuzingatia. Hitilafu inayofanyika kimyakimya kwenye muunganisho wa polepole inawakatisha tamaa watumiaji na kupotosha telemetry, jambo linalopelekea timu kufuata njia isiyo sahihi ya kutatua hitilafu. Katika kesi hii, kutotafsiri data kwa usahihi kulisababisha wiki kadhaa za uchunguzi usio na matunda.

Vitu vya kuzingatia baadaye

Funzo: Wakati data inaonekana kuwa safi sana, pengine ni placeholder; wakati kichwa cha habari cha dashibodi kinataja hitilafu moja, chimbua zaidi; na wakati unafanya uamuzi kulingana na usomaji wa mtandao wa mara moja tu, unacheza kamari na lengo linalobadilika-badilika. Kurekebisha mambo haya kunageuza hitilafu za kimyakimya kuwa matukio yanayotabirika na yanayoweza kurekebishwa.