App Yangu ya Mpira wa Miguu Ilifanya Kazi Vizuri Mpaka Siku ya Mechi Ilipoanza

Kujenga app ya mpira wa miguu kulionekana kuwa rahisi mwanzoni.

Nilipanga kuchukua mechi, kuonyesha timu, kuonyesha matokeo, na kujirekebisha (refresh) kila baada ya sekunde chache. Ilifanya kazi wakati wa majaribio. Nilitumia tab mbili na mechi chache za mfano. Kila kitu kilionekana kuwa sawa.

Kisha siku ya kwanza ya mechi nyingi ilifika.

Mamia ya watumiaji walifungua app kwa wakati mmoja. Maombi (requests) yalijirundika. Baadhi ya matokeo yalionekana kurudi nyuma. App ilichukua data ile ile kando kwa kila mgeni mmoja mmoja.

Nilijifunza kwamba app inayofanya kazi mubashara (live app) si tovuti tu iliyounganishwa na API. Ni mfumo wa usawazishaji wa data (data synchronization system).

Hapa kuna makosa niliyofanya na jinsi nilivyoyarekebisha:

  • Epuka polling inayofanyika upande wa mteja (client-side) pekee Toleo langu la kwanza lilikuwa na kila kivinjari (browser) likiomba data kila baada ya sekunde tano. Mtumiaji 1 = maombi 12 kwa dakika. Watumiaji 1,000 = maombi 12,000 kwa dakika. Maombi mengi yalikuwa yanaomba data ile ile kabisa.

  • Tumia maombi ya upande wa seva (server-side requests) Nilihamishia API calls kwenye seva. Hii inakupa udhibiti juu ya: • API credentials • Caching • Rate limiting • Error handling • Response formatting

Usitumie funguo (keys) kwenye kodi ya upande wa mteja (client-side code). Ni hatari na gharama kubwa ikiwa mtu ataiba funguo yako.

  • Tengeneza tabaka la uainishaji (mapping layer) Niliacha kupitisha data ghafi ya API moja kwa moja kwenye vipengele (components) vyangu. Ikiwa mtoa huduma alibadilisha jina la uwanja (field name), UI yangu iliharibika. Sasa, ninaainisha data ya mtoa huduma katika mfumo wangu wa ndani kwanza. Hii inafanya UI yangu iwe thabiti.

  • Tumia Server Components kwa kasi Badala ya kuonyesha skrini ya kupakia (loading screen), ninaload mechi za awali kwenye seva. Mtumiaji anaona maudhui mara moja.

  • Tekeleza smart polling App haipaswi kujirekebisha (refresh) ikiwa hakuna mechi zinazoendelea mubashara. Niliongeza ukaguzi wa kusimamisha polling mechi zinapoisha. Hii inaokoa rasilimali nyingi za seva.

  • Rekebisha race conditions Wakati mwingine Request B inarudi kabla ya Request A. Hii inafanya matokeo yaonekane kama yanarudi nyuma. Ninatumia AbortController ili kusitisha maombi ya zamani kabla ya kuanza mapya.

  • Shughulikia makosa kwa ustadi (handle errors gracefully)