JavaScript Réutiliser les objets plutôt que de les recréer


Exemple

Exemple A

var i,a,b,len;
a = {x:0,y:0}
function test(){ // return object created each call
    return {x:0,y:0};
}
function test1(a){ // return object supplied 
    a.x=0;
    a.y=0;
    return a;
}   

for(i = 0; i < 100; i ++){ // Loop A
   b = test();
}

for(i = 0; i < 100; i ++){ // Loop B
   b = test1(a);
}

La boucle B est 4 (400%) fois plus rapide que la boucle A

Il est très inefficace de créer un nouvel objet dans le code de performance. La boucle A appelle la fonction test() qui renvoie un nouvel objet à chaque appel. L'objet créé est ignoré à chaque itération, la boucle B appelle test1() qui nécessite que l'objet soit fourni. Il utilise donc le même objet et évite l’allocation d’un nouvel objet, ainsi que des hits GC excessifs. (GC n'étaient pas inclus dans le test de performance)

Exemple b

var i,a,b,len;
a = {x:0,y:0}
function test2(a){
    return {x : a.x * 10,y : a.x * 10};
}   
function test3(a){
    a.x= a.x * 10;
    a.y= a.y * 10;
    return a;
}  
for(i = 0; i < 100; i++){  // Loop A
    b = test2({x : 10, y : 10});
}
for(i = 0; i < 100; i++){ // Loop B
    a.x = 10;
    a.y = 10;
    b = test3(a);                
}

La boucle B est 5 fois plus rapide que la boucle A (500%)