Vestluse elushoidmine, kui telefon magab
Mythexi agent võib ühe päringu peale töötada minuteid ja sa võid seda jälgida telefonist — mis lukustub, vahetab rakendusi ja vahetab võrku, kui ta töötab. Kaks viga tegid sellest vea. Ühes muutus vestlus iga „leht on jälle nähtav“ signaali puhul tõendiks, et ühendus on surnud, ja jäi silmuses olekusse „Connecting…“. Teises jäi telefon uue vestluse esimese vastuse ajal magama ja tuli tagasi ainult esimeste tükkidega, kuni käsitsi värskendati. Mõlemad on parandatud.
Kuidas vestlus töötavat käiku jälgib
Agendi töötamise ajal hoiab vestlus meie serveritest avatud voogu: iga samm — mõte, tööriistakutse, tükk vastusest — saabub sündmusena. Kui voog katkeb, ühendub vestlus uuesti ja server esitab viimased sündmused uuesti puhvrist, mis hoiab viimased 120 sekundit. Kui käik lõpeb, küsib vestlus serverilt ka salvestatud ajaloo ja joondab selle, mida ta näitas, salvestatuga. See viimane samm püüab kinni kõik, mida voog vahele jättis.
Et eristada elavat ühendust surnust, kui midagi ei toimu, saadab server iga 15 sekundi järel väikese „ping“-i.
Viga 1: äratamine tappis terve voo
Brauserid teavad lehel öelda, kui see muutub uuesti nähtavaks: pärast vahelehe vahetust, pärast ekraani avamist. Me kasutasime seda märguannet kui vihjet ühendust kontrollida — ja praktikas katkestada voog ning ühenduda uuesti, eeldades, et see suri peidetud olekus.
Telefonides ja sisseehitatud brauserites tulevad need sündmused palju sagedamini kui voogud surevad — iga vahelehe vahetuse, iga avamise korral ja mõnes sisseehitatud brauseris iga paari sekundi järel. Iga sündmus katkestas täiesti terve voo. Vestlus ühendus uuesti, sai replay'd, katkestati uuesti ja jäi lõpuks seisma olekusse „Connecting…“. Siis teatas see, et käik on lõppenud, kuigi agent veel töötas.
Parandus: hinda voogu selle järgi, kas see räägib
Vestlus salvestab nüüd, millal iga projekti voog viimati midagi üldse vastu võttis — nii sündmusi kui 15-sekundilisi ping'e. Märguanne „uuesti nähtav“ katkestab voo ainult siis, kui see on olnud vaikne 25 sekundit: kauem kui pingi intervall pluss aeglane võrgupõrge, nii et elav voog ei kvalifitseeru kunagi. Testid kontrollivad, et ping loetakse elumärgiks ja et voog, mis just pingis, ei ole surnud.
Reegel, mille sellest võtsime: lehe nähtavus ütleb midagi lehe kohta, mitte võrguühenduse kohta. Küsi ühenduselt.
Viga 2: pool vastust pärast telefoni äratamist
Seda saime iOS-i simulaatoris alati reprodutseerida:
- Alusta uut vestlust ja saada päring, mis võtab aega.
- Lase telefonil uni võtta, kui ehitus käib.
- Tule tagasi pärast seda, kui käik on lõppenud ja kahe minuti replay-puhver on aegunud.
Vestlus näitas vastuse esimesi plokke lõpetatuna — ja jäi nii, kuni lehte värskendati.
Miks
Uuel vestlusel ei ole lõime — ehk salvestatud vestlust — enne, kui esimene sõnum selle loob. See juhtub sõnumi saatmise funktsiooni sees, pärast seda, kui saatmine oli juba võtnud joonduse sammu, mis veel arvas, et lõime pole. Seega, uue vestluse esimese käigu lõpus ei näinud joondus lõime ega tagastas lihtsalt midagi küsimata.
Tavaliselt keegi ei märganud, sest voog oli kogu käigu niikuinii edastanud. Aga telefon, mis magas käigu üle ja tuli tagasi pärast seda, kui 120-sekundiline replay-puhver oli aegunud, ei saanud puuduvaid sündmusi voost — ja joondus, mis oleks lünga täitnud, polnud kunagi jooksnud.
Parandus
- Saatmine ütleb joondusele, millisesse lõime käik kuulub, nii et uue vestluse esimene käik joondatakse nagu iga teine. Kui oled vastuse tulekuks avanud mõne muu vestluse, visatakse tulemus ära, selle asemel et seda valesse kohta näidata.
- Ebaõnnestunud joondust proovitakse uuesti. Telefon, mis äratatakse halva ühenduse peal, võib leida, et käik on läbi, ja siis ebaõnnestuda ajaloo toomisel. Seda mäletatakse nüüd ja vestlus küsib uuesti, kui vahelehte taas näidatakse või võrk tagasi tuleb.
- „Worked for“ on aus. Iga vastus näitab, kui kaua agent töötas. Kui vaheleht ei näinud serveri käigu-lõpu sõnumit, täitis see selle varem omaenda kella järgi, mis käis saatmisest kuni telefoni äratamiseni, sealhulgas ajast eemal oldud aja. See number on nüüd märgitud hinnanguna ja asendatakse salvestatud kestusega, kui ajalugu kohale jõuab.
Mida sellest õppisime
- Testi seadmel, mida inimesed tegelikult kasutavad, nii nagu nad seda kasutavad. Mõlemad vead elasid lõhes „voo, mis töötab“ ja „telefoni taskus“ vahel.
- Varuvariant, mis kunagi ei jookse, ei ole varuvariant. Joondus oli olemas just selle juhtumi jaoks, ja see jättis selle vaikselt vahele.
- Proovi ka taastamist uuesti. Hetk, mil telefon ärkab, on sageli see, kui ühendus on kõige halvemas seisus.
- Ära näita oletust faktina. Kestus valest kellast on halvem kui puudumine; märgi see või asenda.
Sama töö koristas ka mõned asjad, mida käigu ajal näed: shelli sammud on märgistatud käsuga, mis teeb tegelikku tööd, mitte cd-ga; vestluses olevad ekraanipildid hoiavad lehe vasakpoolse ülanurga ja mahuvad veergu; ja uus projekt võtab oma genereeritud nime, ilma et lehte peaks värskendama.
Kui ehitad oma rakendust telefonidele, katavad meie juhendid mobiilisõbraliku veebirakenduse ehitamist ja natiivseid rakendusi ja progressiivseid veebirakendusi põhitõdesid. Vestluse enda kohta leiad rohkem vestluse dokumentatsioonist.