Kaip optimizuoti „JavaScript“ programas naudojant „Loops“

Visi nori didelio našumo programų - todėl šiame įraše sužinosime, kaip pasiekti šį tikslą.

Vienas iš paprasčiausių ir labiausiai apleistų dalykų, kuriuos galite padaryti, kad padidintumėte „JavaScript“ programų našumą, yra išmokti rašyti tinkamai našius ciklo teiginius. Šio straipsnio idėja yra padėti tam.

Pamatysime pagrindinius „JavaScript“ naudojamų kilpų tipus ir kaip juos parašyti atlikimo būdu.

Pradėkime!

Ciklo atlikimas

Kalbant apie ciklo atlikimą, visada diskutuojama apie tai, kurią kilpą naudoti. Kuris greičiausias ir efektyviausias? Tiesa ta, kad iš keturių „JavaScript“ teikiamų kilpų tipų tik vienas iš jų yra žymiai lėtesnis už kitus - for-inkilpa. Ciklo tipo pasirinkimas turėtų būti pagrįstas jūsų reikalavimais, o ne su našumu .

Prie ciklo našumo prisideda du pagrindiniai veiksniai - atliktas darbas per iteraciją ir pakartojimų skaičius .

Toliau pateiktuose skyriuose pamatysime, kaip juos sumažinę galime turėti teigiamą bendrą poveikį kilpos veikimui.

Dėl kilpos

ECMA-262 (specifikacija, apibrėžianti pagrindinę „JavaScript“ sintaksę ir elgseną), trečiasis leidimas, apibrėžia keturis kilpų tipus. Pirmoji yra standartinė forkilpa, kuri sintaksę dalijasi su kitomis į C panašiomis kalbomis:

for (var i = 0; i < 10; i++){ //loop body}

Tai turbūt dažniausiai naudojamas „JavaScript“ kilpų sukūrimas. Kad suprastume, kaip galime optimizuoti jo darbą, turime jį šiek tiek išsklaidyti.

Išsiskyrimas

forKilpa susideda iš keturių dalių: pirminių, Pretest būklės, kilpa kūno, ir post-vykdyti. Tai veikia taip: pirmiausia vykdomas inicializavimo kodas (var i = 0;). Tada išankstinė sąlyga (i <10;). Jei išankstinio testavimo sąlyga įvertina to true, tada vykdomas kilpos kūnas. Po to paleidžiamas po vykdymo kodas (i ++).

Optimizavimas

Pirmasis žingsnis optimizuojant darbo cikle skaičių yra sumažinti objektų narių skaičių ir masyvo elementų paiešką.

Taip pat galite padidinti kilpų našumą, pakeisdami jų tvarką. Jei naudojate „JavaScript“, pakeisdami kilpą, šiek tiek pagerinsite kilpų našumą, jei pašalinsite papildomas operacijas.

Abu aukščiau pateikti teiginiai galioja ir kitoms dviem greitesnėms linijoms ( whileir 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]); }

Nors kilpa

Antrasis kilpos tipas yra whilekilpa. Tai paprasta išankstinio nustatymo kilpa, susidedanti iš išankstinio nustatymo sąlygos ir kilpos kūno.

var i = 0; while(i < 10){ //loop body i++; }

Išsiskyrimas

Jei išankstinio testavimo sąlyga įvertinama true, vykdomas ciklo korpusas. Jei ne - tai praleista. Kiekvieną whilekilpą galima pakeisti forir atvirkščiai.

Optimizavimas

// 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“ kilpa

do-whileyra trečiasis ciklo tipas ir tai yra vienintelė „JavaScript“ ciklas po bandymo. Jį sudaro kūno kilpa ir būklė po bandymo:

var i = 0; do { //loop body } while (i++ < 10);

Išsiskyrimas

Šio tipo kilpose kilpos korpusas vykdomas visada bent kartą. Tada yra įvertinta po bandymo atlikimo sąlyga ir, jei taip, vykdomas truekitas ciklo ciklas.

Optimizavimas

// 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--);

„For-In Loop“

Ketvirtasis ir paskutinis kilpos tipas yra vadinamas for-inkilpa.Jis turi labai ypatingą tikslą - išvardija bet kurio „JavaScript“ objekto įvardytas savybes. Štai kaip tai atrodo:

for (var prop in object){ //loop body }

Išsiskyrimas

Jis panašus į įprastąfor kilpą tik savo pavadinimu. Tai veikia visiškai kitaip. Šis skirtumas daro jį daug lėtesnį nei kitos trys kilpos, kurių veikimo charakteristikos yra lygiavertės, todėl nenaudinga bandyti nustatyti greičiausią.

Kiekvieną kartą, kai vykdoma kilpa, kintamasis propturi kitos ypatybės , kuri yra eilutė , pavadinimą. object.Ji bus vykdoma, kol visos savybės bus grąžintos. Tai būtų paties objekto savybės, taip pat paveldimos per jo prototipų grandinę.

Pastabos

Niekada neturėtumėte naudoti „ for-in”kartoti masyvo narių .

Kiekviena iteracija per šią kilpą sukelia ypatybių paiešką egzemplioriuje arba prototipe, todėl for-inlinija tampa daug lėtesnė nei kitos kilpos. Atlikus tą patį pakartojimų skaičių, jis gali būti septynis kartus lėtesnis nei likusieji.

Išvada

  • Visos for, whileir do-whilekilpos turi panašias veikimo charakteristikas, todėl nė vienas kilpos tipas nėra žymiai greitesnis ar lėtesnis už kitus.
  • Venkite for-inciklo, nebent jums reikia kartoti daugybę nežinomų objekto ypatybių.
  • Geriausi būdai pagerinti ciklo našumą yra sumažinti atlikto darbo kiekį per iteraciją ir ciklo pakartojimų skaičių .

Tikiuosi, kad tai buvo naudinga jums, kaip ir man!

Ačiū, kad skaitėte.

Ištekliai

„High Performance JavaScript“ - Nicholas C. Zakas

Skaitykite daugiau mano straipsnių mihail-gaberov.eu.