Svi žele aplikacije visokih performansi - pa ćemo u ovom postu naučiti kako postići taj cilj.
Jedna od najlakših i najzanemarivanijih stvari koje možete učiniti kako biste poboljšali izvedbu svojih JavaScript aplikacija je naučiti kako pravilno pisati izjave petlje visokih performansi. Ideja ovog članka je pomoći u tome.
Vidjet ćemo glavne vrste petlje koje se koriste u JavaScript-u i kako ih možemo zapisati na učinkovit način.Započnimo!
Izvedba petlje
Što se tiče izvedbe petlje, rasprava je uvijek oko toga koju petlju koristiti. Koji je najbrži i najučinkovitiji? Istina je da je od četiri vrste petlji koje pruža JavaScript, samo jedna od njih znatno sporija od ostalih for-in
petlji. Izbor vrste petlje trebao bi se temeljiti na vašim zahtjevima, a ne na zabrinutostima glede izvedbe .
Dva su glavna čimbenika koji doprinose izvedbi petlje - rad po iteraciji i broj iteracija .
U odjeljcima u nastavku vidjet ćemo kako, smanjenjem istih, možemo imati pozitivan ukupni utjecaj na izvedbu petlje.
Za Loop
ECMA-262 (specifikacija koja definira osnovnu sintaksu i ponašanje JavaScript-a), treće izdanje, definira četiri vrste petlji. Prva je standardna for
petlja koja svoju sintaksu dijeli s drugim jezicima sličnim C-u:
for (var i = 0; i < 10; i++){ //loop body}
Ovo je vjerojatno najčešće korištena konstrukcija petlje JavaScript. Da bismo razumjeli kako možemo optimizirati njegov rad, moramo ga malo secirati.
Disekcija
for
Petlja se sastoji od četiri dijela: inicijalizaciju, pred- stanje, tjelesnu petlja, i post-izvršiti. Način rada je sljedeći: prvo se izvršava inicijalizacijski kod (var i = 0;). Tada je uvjet predtesta (i <10;). Ako uvjet predtesta procjenjuje to t
rue, tada se izvršava tijelo petlje. Nakon toga se pokreće post-izvršni kôd (i ++).
Optimizacije
Prvi korak u optimizaciji količine posla u petlji je minimiziranje broja članova objekta i pretraživanja stavki niza.
Također možete povećati izvedbu petlji obrnuvši njihov redoslijed. U JavaScriptu, obrtanje petlje rezultira malim poboljšanjem performansi petlji, pod uvjetom da kao rezultat eliminirate dodatne operacije.
Obje gornje izjave vrijede i za druge dvije brže petlje ( while
i do-while
).
// original loop for (var i = 0; i < items.length; i++){ process(items[i]); } // minimizing property lookups for (var i = 0, len = items.length; i < len; i++){ process(items[i]); } // minimizing property lookups and reversing for (var i = items.length; i--; ){ process(items[i]); }
Dok je Petlja
Druga vrsta petlje je while
petlja. Ovo je jednostavna petlja predtesta, koja se sastoji od uvjeta predtesta i tijela petlje.
var i = 0; while(i < 10){ //loop body i++; }
Disekcija
Ako uvjet pretprovjere procijeni na true
, izvršava se tijelo petlje. Ako ne - preskače se. Svaka se while
petlja može zamijeniti for
i obrnuto.
Optimizacije
// original loop var j = 0; while (j < items.length){ process(items[j++]); } // minimizing property lookups var j = 0, count = items.length; while (j < count){ process(items[j++]); } // minimizing property lookups and reversing var j = items.length; while (j--){ process(items[j]); }
Do-While Loop
do-while
je treća vrsta petlje i to je jedina petlja nakon testiranja u JavaScript-u. Sastoji se od tjelesne petlje i stanja nakon testiranja:
var i = 0; do { //loop body } while (i++ < 10);
Disekcija
U ovoj vrsti petlje, tijelo petlje se izvršava uvijek barem jednom. Tada se procjenjuje stanje nakon testa, a ako true
jest, izvršava se još jedan ciklus petlje.
Optimizacije
// original loop var k = 0; do { process(items[k++]); } while (k < items.length); // minimizing property lookups var k = 0, num = items.length; do { process(items[k++]); } while (k < num); // minimizing property lookups and reversing var k = items.length - 1; do { process(items[k]); } while (k--);
Petlja za ulazak
Četvrta i posljednja vrsta petlje naziva se for-in
petlja.Ima vrlo posebnu svrhu - nabraja imenovana svojstva bilo kojeg JavaScript objekta. Evo kako to izgleda:
for (var prop in object){ //loop body }
Disekcija
Sličan je regularnojfor
petlji samo po nazivu. Način na koji djeluje potpuno je drugačiji. A ta razlika čini ga puno sporijim od ostale tri petlje koje imaju jednake karakteristike performansi, tako da nije korisno pokušavati odrediti koja je najbrža.
Svaki put kada se petlja izvrši, varijabla prop
ima ime drugog svojstva, a to je niz , na object.
Izvršit će se dok se ne vrate sva svojstva. To bi bila svojstva samog predmeta, kao i svojstva naslijeđena kroz njegov prototipni lanac.
Bilješke
Nikada ne biste trebali koristiti „ for-in”
za prevlačenje članova niza .
Svaka iteracija kroz ovu petlju uzrokuje traženje svojstva bilo na instanci ili na prototipu, što čini for-in
petlju puno sporijom od ostalih petlji. Za isti broj ponavljanja mogao bi biti sedam puta sporiji od ostalih.
Zaključak
for
,while
Ido-while
petlje svi imaju slične karakteristike ponašanja, pa ni jedan tip petlje je znatno brže ili sporije od ostalih.- Izbjegavajte
for-in
petlju ako ne trebate ponoviti niz nepoznatih svojstava objekta. - Najbolji načini za poboljšanje izvedbe petlje su smanjenje količine posla po iteraciji i smanjenje broja iteracija petlje .
Nadam se da je ovo bilo korisno za vas, kao i za mene!
Hvala na čitanju.
Resursi
“JavaScript visokih performansi” - Nicholas C. Zakas
Pročitajte više mojih članaka na mihail-gaberov.eu.