Pulse.io Nevoia de viteză

Asigurați-vă că aplicația dvs. este întotdeauna rapidă

În lumea actuală hiperconectată, oamenii doresc rezultate rapide. În calitate de dezvoltatori de dispozitive mobile, suntem mai conștienți de acest lucru decât majoritatea. Utilizatorii noștri nu se așează în fața unui birou. Sunt pe drum, rulează aplicațiile în timp ce încearcă să meargă, să vorbească și să conducă, așa că așteaptă experiențe rapide. Intrați, ieșiți.

Studiile multiple de la Akamai, Google și altele au corelat viteza site-ului cu retenția utilizatorului. Și până în prezent, dovezile sugerează că oamenii sunt cel puțin la fel de exigenți atunci când utilizează aplicații native. Într-un sondaj efectuat de Apigee asupra utilizatorilor de dispozitive mobile, plângerea de top privind aplicațiile mobile este înghețată, iar peste 44% dintre utilizatorii chestionați au declarat că vor șterge imediat o aplicație cu performanțe lente.

Întrebați Facebook despre importanța aplicațiilor mobile rapide. Atunci când stocul lor de jos în adolescenții înalți, Mark Zuckerberg a spus că bazându-și aplicația pe HTML5 a fost cea mai mare greșeală pe care au făcut-o ca o companie. De ce? Pentru că era lentă. În termen de trei săptămâni de la lansarea aplicației noi, mai rapidă a aplicației Facebook, ratingul aplicației a urcat de la 1,5 stele la 4. Aplicațiile letale produc dureri semnificative pentru întreprinderi. A pierdut utilizatorii. Lost de dolari.

Ce ar putea da greșit?

Când sa vorbit mai întâi cu dezvoltatorii despre monitorizarea performanței aplicației în producție, răspunsul cel mai comun a fost "Aplicația mea este deja rapidă".

Problema este, ca lumea de fragmente mobile, este greu să dai o experiență rapidă în mod constant. Cum funcționează aplicația dvs. în China pe un telefon vechi și o rețea lentă? Sunt dispus să pariez că nu ai nicio idee. Cu siguranță nu este același lucru pe care îl efectuează pe noul dvs. iPhone conectat la biroul Wi-Fi.

Performanța este complet dependentă de contextul în care rulează aplicația. Iată o listă rapidă, dar cu siguranță nu completă:

Slow Retele

Suntem obișnuiți să gândim problemele legate de internet în ceea ce privește limitările de lățime de bandă, dar în rețelele celulare, latența este adesea factorul dominant. Pe o rețea 3G, poate dura aproximativ 2,5 secunde pentru a trece de la inactiv la conectat înainte ca un singur octet să fie transmis. Și Sprint spune că latența medie pe rețeaua 3G este de 400ms. Nu contează cât de repede serverul dvs. procesează o cerere în cazul în care răspunsul devine lent la telefon.

CPU limitat

Ca geeks, deseori ne dezvoltăm folosind cea mai recentă și cea mai mare, dar cea mai mare parte a lumii, inclusiv piețele masive pe care ați vrea să le pătrundeți, renunțați la viteză pentru a obține accesibilitatea. Testele noastre arată că codul legat de CPU pe un iPod 4G durează de aproximativ patru ori mai mult decât pe un iPhone 5S. Pe Android, discrepanța este și mai semnificativă.

RAM limitat

Dacă aplicația dvs. utilizează prea multă memorie, este ucisă de sistemul de operare. Pentru utilizator, aceasta arată la fel ca o excepție a indicatorului nul. Chiar dacă codul dvs. este curat, fără o scurgere de memorie, memoria dvs. de mare valoare a memoriei poate duce la accidente pe telefoanele mai puțin puternice, dar populare, pe piețe importante.

Baterii mici

Bateriile sunt unul dintre primele lucruri care se reduc atunci când producătorii încearcă să economisească spațiu și bani. Dar acest lucru nu va face utilizatorii să înțeleagă mai mult când aplicația își scurge toată puterea.

Construit pentru mobil

Să spunem pentru o clipă că sunteți convins că aveți nevoie de o aplicație rapidă și că ar trebui să fie rapid peste tot, nu doar pentru dvs. atunci când rulați aplicația dvs. prin intermediul profilului CPU al instrumentelor Apple. Ce este un dezvoltator de făcut? În prezent, aveți două opțiuni de bază:

Opțiunea 1Monitorizați serverele dvs.

Un API rapid înseamnă o aplicație rapidă. Dreapta? Aceasta este o mentalitate a dezvoltatorilor web, iar dacă sunteți un dezvoltator de dispozitive mobile, este greșit.

Web-ul este o arhitectură de client subțire. Dedicarea aplicațiilor web grele JavaScript, majoritatea codului interesant din spatele site-urilor web rulează pe server. Clientul-browser-ul este în realitate un motor de redare fără stat. Când performanța scade, este de obicei o problemă de scalare în infrastructura backend.

Aplicațiile mobile, pe de altă parte, sunt clienți groși. Ele au baze de coduri mari, multi-filetate. Ei mențin statul. Și trebuie să se ocupe de o mare varietate de telefoane, sisteme de operare și rețele. Echipa dvs. de servere poate continua să șocheze experiența utilizatorului, dar există un set complet de probleme care nu se vor afișa în alertele de pe server.

Opțiunea 2: QA Iadul din aplicația dvs.

Amenda. Ai înțeles. Trebuie să vă asigurați că vă testați aplicațiile într-o mulțime de lumea reala scenarii. Deci, veți construi un laborator de QA fantezist cu 100 de telefoane diferite. Apoi le veți închide într-o cușcă faraday pentru a putea simula condițiile de rețea nefavorabile și pentru a angaja o armată de oameni de QA pentru a rula fiecare lansare nouă prin orice acțiune posibilă în aplicația dvs..

Recunosc, dacă îți poți permite, nu eo idee proastă. Dar combinațiile devin repede copleșitoare. Imaginați-vă că vă interesează cele mai bune 100 de telefoane, 10 viteze de rețea, 20 de piețe externe diferite cu latențe diferite și 5 versiuni diferite de sisteme de operare. Acum imaginați-vă că aveți 50 de acțiuni distincte în aplicația dvs. Dacă ignorați interdependența dintre acțiuni și diferite date de utilizator, aveți 1 milion de combinații de testat. aoleu!

Aceasta este o problemă clasică de asigurare a calității. Asigurarea calității înseamnă a face tot ce este mai bun pentru a testa cele mai frecvente cazuri de utilizare. Dar niciodată nu a fost menită să fie un înlocuitor pentru monitorizare. Este pur și simplu imposibil să rămâi în fruntea tuturor cazurilor de eșec.

Un nou tip de instrument

Avem nevoie de un nou set de instrumente, construit de la bază pentru a măsura în mod specific problemele de performanță ale aplicațiilor mobile. Ce metrici ar trebui să capteze aceste instrumente noi?

Ecranul îngheață

Nimic nu deranjează mai mult un utilizator decât un ecran înghețat. Prin capturarea de fiecare dată când aplicația dvs. depășește un prag de timp pentru a face un cadru, puteți obține o idee despre cât de des văd o înghețare vizibilă.

Spinner Time

Dacă urmați bunele practici UI / UX, oricând trebuie să faceți o lucrare care va dura mai mult de câteva milisecunde, ar trebui să o faceți în fundal și să arunci un spinner. Dar chiar dacă sunteți pe partea superioară a filetului dvs., utilizatorii au răbdare limitată.

După o secundă, utilizatorii au un comutator de context mental și, după 10 secunde, utilizatorii își abandonează activitatea. Dacă capturați de fiecare dată când afișați un spinner, aveți un indicator generic bun pentru cât timp așteaptă utilizatorul tipic în aplicația dvs..

Folosirea memoriei

Memorie bug-uri sunt unul dintre cele mai grele lucruri pentru a urmări în jos, mai ales după Fara memorie criminal pe iOS nu duce la o urmă de stivă. Este prea scump pentru a urmări fiecare alocare, dar înregistrarea memoriei rezidente pe iOS sau VM Heap utilizare pe Android sunt bune,.

Latența rețelei, timpul de descărcare și lățimea de bandă

Latența și lățimea de bandă sunt foarte variabile pe rețelele celulare și joacă un rol-cheie în experiența utilizatorului. Pentru fiecare solicitare API, puteți înregistra cât timp este nevoie pentru a obține răspunsul inițial (latență), cât timp este nevoie pentru a obține răspunsul complet (timpul de descărcare) și octeții descărcați (octeți / timpul de descărcare este egal cu lățimea de bandă).

Baterie

Unul dintre puținele motive pentru care dezinstalez aplicațiile sunt folosirea înaltă a bateriilor. Există baterii evidente, cum ar fi utilizarea GPS-ului dispozitivului, dar există și alte căi neașteptate, cum ar fi activarea antenei fără fir prea des. Atât iOS-urile, cât și API-urile API pentru monitorizarea nivelurilor de încărcare a bateriei.

Context

În mobil, contextul este totul. Atunci când se întâmplă ceva în neregulă, trebuie să știți minim o versiune de aplicație, o locație, o rețea de operatori, o versiune a sistemului de operare și un dispozitiv.

Introducerea SDK-ului Pulse.io

homegrown

Dacă sunteți ambițios, este posibil să aveți unele instrumente de performanță la domiciliu în aplicația dvs. Probabil că aveți câteva cronometre de bază pentru acțiunile cheie din aplicația dvs., apoi trimiteți-le la domiciliu prin intermediul unui jurnal sau al unui pachet specializat de JSON.

Dacă da, puneți-vă pe spate. Ai făcut mult mai mult decât majoritatea. Dar există multe neajunsuri în această abordare. Ce se întâmplă dacă aveți probleme de performanță în locații neașteptate în aplicația dvs.? Dacă aveți o problemă, de unde știți ce a cauzat această problemă? A fost o metodă lungă de apel, o solicitare API lentă sau prea multe date despre fir?

Analiza datelor

Și odată ce obțineți datele de performanță brute, cum o analizați și o vizualizați? Dacă scrieți un script unic, cât de des îl executați? Și, Doamne ferește, ce se întâmplă dacă instrumentele de performanță cauzează probleme de performanță?

Pulse.io SDK

La Pulse.io, am fost foarte greu la locul de muncă pentru anul trecut construind un set SDK plin de monitorizare a bunătății. Captează toate valorile afișate mai sus menținând o amprentă foarte ușoară. Noi consumăm mai puțin de 3% din CPU, lotul trimite datele noastre pentru a evita pornirea radioului și limitează utilizarea memoriei prin eliminarea informațiilor cu prioritate scăzută.

Cea mai bună parte despre Pulse.io este că captează toate aceste lucruri în mod automat. Este un lucru pentru a vă instrumenta manual aplicația cu soluția dezvoltată la domiciliu. Este un alt lucru în întregime să convingeți fiecare inginer din echipa dvs. să facă acest lucru și să aplice aceeași metodologie de instrumentație în mod constant în timp.

Cu Pulse.io, trebuie doar să scrii SDK și să găsești automat toate interacțiunile utilizatorilor din aplicația și înregistrările tale atunci când aceste interacțiuni cauzează un comportament necorespunzător, cum ar fi înghețarea ecranului sau sarcini asincrone lungi.

Noțiuni de bază privind monitorizarea performanței

Instalarea programului Pulse.io vă va duce mai puțin timp decât citirea acestui articol. În prezent, suntem în beta privat, dar dacă ne împușcați un e-mail la beta [at] pulse [dot] io și menționați că ați citit despre noi pe Tuts +, vă vom stabili un cont.

Odată ce ați descărcat SDK-ul, instalarea este foarte simplă. Puneți SDK-ul în aplicație, adăugați câteva dependențe și apelați [Monitorul PulseSDK: @ "YOUR_APP_KEY"] în aplicațiile dvs. main.m. Ați terminat.

Concluzie

Sper că te-am convins de trei lucruri:

  1. Aplicațiile lente pierd utilizatorii și, prin urmare, dolari.
  2. Aplicațiile rapide în dezvoltare pot fi aplicații lente în producție.
  3. Instrumentele existente nu fac o treabă bună de monitorizare a performanțelor aplicațiilor din lumea reală.

Vă încurajez să investiga performanța reală a aplicației proprii. Dați Pulse.io o încercare. Nu este mult de pierdut și o mulțime de performanțe de câștigat.

Cod