Näita sildipilve

Optimeeritud tsüklid

Optimized loops

Kirjutas ,

Suurem osa veebiarendajatest kirjutavad oma blogides turunduse võtetest. Kindlasti on oma lehe reklaamimine olulise tähtsusega. Prixal tegeleb ka veebiarendusega, kuid täna ma ei hakka kirjutama SEO kriteeriumitest jms. Püüan vaid väikese näite põhjal näidata, kui oluline on turunduse kõrval optimeeritud tarkvara. Kuna suuremal osal tarkvaraarendajatel on käsutuses keskmiselt võimsamad arvutid, siis ei pruugi arendaja avastada, et tema kood vajab optimeerimist.

Tänapäeval kasutatakse veebis väga palju Javascripti. See on hea, kuna võimaldab luua rakendusi, mis on nii atraktiivsed kui ka kasutajasõbralikud. Kui aga programm on kirjutatud ainult võimsamaid arvuteid silmas pidades, mõjutab see negatiivselt kasutaja kogemust, mille ta sinu kodulehekülge külastades saab.

Kas sa oled vaadanud üle oma Javascripti tsüklid ja mõelnud, kas siit-sealt saaks midagi optimeerida?

Tegin väikese katse. Valmistasin kaks tsüklit: üks väline, teine sisene. Sisemise tsükli käigus kontrollitakse Y väärtust. Kui see on 500, siis see kirjutatakse ekraanile.

var str = document.getElementById('test');
  for( var x = 0; x < 1000; x++ ) {
    for( var y = 0; y < 2500; y++ ) {
      if( y == 500 ) {
        str.innerHTML = '500';
      }
    }
  }

Kui mõõta selle koodijupi töötamise aega Firebugiga, tuleb tulemuseks 300 ms. Selline tulemus siis Mozilla Firefoxis 3.6.13. Kui selliseid koodijuppe on skriptis palju, muudab see rakenduse väga aeglaseks. Kuidas seda optimeerida?

Üldjuhul me kasutame tsükleid erinevate andmeformaatide sõelumiseks. Tavaliselt soovime nende seest leida meile huvipakkuvat väärtust. Kui me oleme selle leidnud, miks me ei lõpeta tsükli tööd?

var str = document.getElementById('test');
  algus:
  for( var x = 0; x < 1000; x++ ) {
    for( var y = 0; y < 2500; y++ ) {
      if( y == 500 ) {
        str.innerHTML = '500';
        break algus;
      }
    }
  }

Optimeeritud koodi täitmine võttis aega 1 ms! Aega kulus 300 korda vähem! Skriptile lisati juurde vaid kaks asja: välisele tsüklile anti nimi “algus” ja sisemises tsüklisse lisati break. Kui sisemises tsüklis Y väärtus sai 500, kirjutati ekraanile arv “500” ja samas lõpetati tsükli “algus” töö.

Tarkvarad kasvavad ajas. Kui alguses ei tekita sellised koodijupid probleeme, siis rakenduse kasvades teevad nad seda kindlasti. Seega on igati mõistlik juba koodi kirjutamise hetkel mõelda, kas on vaja lasta tsüklil lõpuni töötada. Teise asjana tuleks mõelda, kas tsüklis olevat koodijuppi tuleb igas tsüklis alati käivitada. Mõnikord me soovime käivitada koodi alles siis, kui meil on olemas väärtus, mida me vajame.

Loe täpsemalt Break ja Continue tingimuste kohta w3schools lehelt.