Aceste sfaturi vin si de ajutor persoanelor care detin un website "heavily scripted", pentru a ajunge la ideea ca nu toti utilizatorii website-ului au un sistem puternic.
Primul sfat -> Nu folositi "with"
Imaginati-va ca browserul este ca un animal de companie, si "with" (cu), este ca si cand l-am lovi in ochi. Nui asa ca nu ar fi frumos sa facem asta?
Asa ca nu folositi:
Cod: Selectaţi tot
var obiecte = {pixuri:5, creioane:2, caiete:10};
with (obiecte) {
pixuri = 7;
}
Folositi asta in schimb:
Cod: Selectaţi tot
var obiecte = {pixuri:5, creioane:2, caiete:10};
obiecte.pixuri = 7;
Al doilea sfat -> Pentru a salva putina memorie
In loc de asta:
Cod: Selectaţi tot
obiect = new Object();
obiect.x = "valoare";
obiect.y = "valoare";
obiect.z = 1;
Folositi asta:
Cod: Selectaţi tot
obiect = {
x: "valoare",
y: "valoare",
z: 1
}
Al treilea sfat -> Functiile Math pot fi putin cam lente, iar Math.floor este una dintre cele mai utilizate functii
Normal a-ti face asa:
Cod: Selectaţi tot
var zecimal = 1.2;
var testZecimal = Math.floor(zecimal);
Dar, în loc, acest lucru este mai rapid pe fiecare browser cu excepţia Chrome-ului (este destul sa folosim functia standard deoarece este destul de rapida, nu este necesar sa facem teste deoarece functia standard utilizata cu chrome nu este semnificativ mai lenta decat varianta de ma jos, in schimb viteza este cu mult mai mare in alte browsere).
Cod: Selectaţi tot
var zecimal = 1.2;
var testZecimal = ~~(1 *zecimal);
Al patrulea sfat -> Iteratiile sunt rapide, dar multiple declaratii sunt mai rapide
Iteratie normala:
Cod: Selectaţi tot
var a = 0;
for (var b = 1; b < 1000; b++) {
a++;
}
Declaratiile multiple (da, acestea sunt mult mai rapide dar arata teribil in cod… dar daca perfomanta conteaza mai mult, atunci aceasta ar fi calea):
Cod: Selectaţi tot
a++; a++; a++; a++; a++; a++; ...
Al cincilea sfat -> Numaratoarea descrescatoare este mai rapida decat numaratoarea crescatoare
Iteratie normala:
Cod: Selectaţi tot
for (var a = 0; a < 1000; a++) {
// Ceva
}
Numaratoare descrescatoare:
Cod: Selectaţi tot
var a = 1000;
while (a--) {
// Ceva
}
Pentru o numaratoare si mai rapida folositi do while.
Al saselea sfat -> Forma scurta de parcurgere a elementelor fara a le stii lungimea
In loc de asta:
Cod: Selectaţi tot
var radacinaLista = document.getElementById("tr");
for(var a=0; a>radacinaLista.length; a++){
var radacina = radacinaLista[a];
}
Folositi asta:
Cod: Selectaţi tot
for(var a=0; radacina=document.getElementById("tr")[a]; a++){
// Ceva
}
Nu se citeste lungimea la fiecare iteratie, si este mai rapid din punct de vedere al performantei.
Al saptelea sfat -> Reducerea cautarilor in iteratii
In loc de asta:
Cod: Selectaţi tot
for (var a = 0; a < unObiectSauMatrice.length; a++)
Folositi asta:
Cod: Selectaţi tot
for (var a = 0, b = unObiectSauMatrice.length; a < b; a++)
Aceasta functioneaza mai rapid deoarece in loc sa evalueze lungimea fiecarui obiect sau a unei matrici la fiecare iteratie in parte, ceea ce insemnand ca la fiecare iteratie in parte se va accesa obiectul si va primi raspuns (in acest caz lungimea), asa ca lungimea este accesata o singura data si este salvata in "b", apoi "b" va fi evaluat inaintea lui "a" la fiecare iteratie.
Al optulea sfat -> Reducerea accesului la proprietatile obiectului
In loc de asta:
Cod: Selectaţi tot
var obiecte = {continut: {material: {lemn: 1}}};
obiecte.continut.material.lemn = 1;
if (obiecte.continut.material.lemn > 0) {
alert(obiecte.continut.material.lemn);
}
Folositi asta:
Cod: Selectaţi tot
var obiecte = {continut: {material: {lemn: 1}}};
obiecte.continut.material.lemn = 1;
var temporarLemn = obiecte.continut.material.lemn;
if (temporarLemn > 0) {
alert(temporarLemn);
}
Aceasta functioneaza mai rapid deoarece dupa ce valoarea este setata pentru "obiecte.continut.material.lemn", nu este nevoie de a pastra accesarea continutului obiectului, apoi materialul obiectului va fi doar pentru a accesa valoarea lemnului. In schimb am stocat o variabila locala cu valoarea lemnului astfel va fi evaluata mult mai rapid.
Al noualea sfat -> Setati valoriile variabilelor in interiorul unei declaratii
In loc de asta:
Cod: Selectaţi tot
var a = true;
var b = false;
if (a) {
b = true;
}
Folositi asta:
Cod: Selectaţi tot
var a = true;
var b = false;
if (a && b = true) {}
Puteti de asemenea sa actionati atribuirea variabilei cu un test pe false:
Cod: Selectaţi tot
if (a || b = true) {}
Nu arata prea bine acestea dar in schimbul performantei merita folosita aceasta metoda.
Al zecelea sfat -> Atunci cand scrieti cod, declarati intotdeauna variabilele cu o valoare initiala
In loc de asta:
Cod: Selectaţi tot
n = true;
Folositi asta:
Cod: Selectaţi tot
var n = true;
(Asta daca nu a-ti declarat-o deja mai devreme sau daca nu accesati o variabia globala).
Al unsprezecelea sfat -> Utilizati dispozitivul lui Duff
Nu o sa incep sa explic aici acest articol, exista unul pe wikipedia http://en.wikipedia.org/wiki/Duff’s_device si daca sunteti inca pierduti folositi noul minunat motor de cautare, denumit Google.
Al doisprezecelea sfat -> Invatati JavaScript citind specificatiile lui ECMAScript
A invata sa programam in JavaScript este foarte usor. A invata sa programam in JavaScript este ca o forma de arta, si manualul ar formei de arta este ECMAScript: http://www.ecma-international.org/publi ... ma-262.htm
DE RETINUT!
*In cele mai multe cazuri operatiile pe biti in javascript sunt mai rapide decat functiile Math standard.
*In javascript comparand un numar cu 0, este mult mai rapid decat comparand cu un oricare alt numar.
*Structura if/else, este mai lenta decat structura switch.
*Pentru anumite operatii Math de conversie putem sa generam noi tabelele este cu pana la de 2 ori mai rapid decat standard.
Bibliografie:
http://www.ecma-international.org
http://www.blog.andyhume.net
http://www.isogenicengine.com
http://en.wikipedia.org/wiki/Duff’s_device
Luat din mai multe parti, tradus si modificat.
Va rog sa postati si alte sfaturi cine mai cunoaste.
Multumesc!