[ Miroslav Ćurčić @ 07.07.2008. 16:19 ] @
Postoji li neki benchmark za javascript?

Imam konkretno pitanje ali me zanima i za ubuduće.
Primer:
Code:

  for(var i=0; i<rows.length; i++) {
      var TDs= rows[i].getElementsByTagName("TD"); // nađi sve ćelije
      ...
  }

Dakle ovde u svakom prolazu re-definišem promenljivu TDs.
Pitam se dali će posle završetka petlje ostati u memoriji svih 20-ak promenljivih, koliko ima prolaza, ili će re-definisanje ukloniti iz memorije stari sadržaj.

Ovo je generalno pitanje, treba li izbegavati redefinisanje u petlji i stavljati neki "var TDs=0;" pre petlje ?

I naravno, ima li neki način izmeriti zauzeće memorije iz JSa ?
[ jazzieDev @ 12.07.2008. 18:12 ] @
Za benchmarkovanje javascripta najbolje je da koristis profiler iz firebug-a. Prikazace ti koliko je koja funkcija puta bila pozvana, kao i koliko joj je trebalo vremena za izvrsavanje.

Tvoj kod ce posle petlje u TDs smestiti samo poslednji red, tj decu poslednjeg rows elementa, jer u petlji u istu promenjivu stavljas celije iz svakog reda. Znaci, nece ostati 20 promenjivih, vec ce se vrednost jedne menjati u svakoj iteraciji. Ako zelis sve celije imati u jednoj promenjivoj, to bi mogao biti dvodimenzionalni niz (zgodno zbog zadrzavanja odnosa red - celija):

Code:
var TDs = new Array();

for for(var i=0; i<rows.length; i++) {
      TDs.push(rows[i].getElementsByTagName("TD")); // nađi sve ćelije
}
// cell_4_6 = TDs[3][5]; //sheshta celija u chetwrtom redu
// cells_4 = TDs3[3]; // sve celije iz chetwrtog reda


Ako ti se u samoj petlji izvrsava sve sto treba da radis sa tim celijama, a one ti nisu potrebne posle, onda mozes i ovako kako si uradio, red po red (html tabele).

Sto se zauzeca JS memorije tice, mislim da ne moze direktno da se izmeri (nisam siguran, ispravite ako gresim). Ako te brine neki leak, onda mozes probati neki od alata za detekciju leakova (sieve, Firefox Leak Monitor, drip itd.).