2009-08-17 3 views
3

Je viens récemment posé la question folloiwng en ce qui concerne jQuery chaning:Peut-il être désavantageux de stocker des objets jQuery dans une variable?

Is there a preferred way of formatting jQuery chains to make them more readable?

Un certain nombre de personnes ont répondu à la suggestion que peut-être je réduit la quantité de chaîner dans l'instruction, et au lieu des objets stockés en tenant des variables, ce qui a du sens pour moi. Cependant, d'après ce que j'ai compris, les objets d'une chaîne sont déjà stockés sur une pile, de même la mise en cache des résultats dans une variable ne la stocke-t-elle pas effectivement, en utilisant plus de mémoire? Un commentaire sur l'un des messages semblait indiquer qu'il n'y aurait peut-être pas trop d'impact sur les performances (le cas échéant), donc je serais heureux de mettre en cache comme suggéré si ce serait beaucoup plus lisible.

Et aussi, si nous utilisons la mise en cache, cela ne commence-t-il pas à limiter l'utilité de .end() et .andSelf()?

Répondre

8

Les objets sont généralement stockés en tant que références - pointeurs vers des emplacements en mémoire. Deux variables qui contiennent le même objet ne dupliquent pas toutes les données de l'objet - elles contiennent toutes deux des pointeurs vers le même emplacement dans la mémoire où se trouvent les données de l'objet réel. Ainsi, le stockage de l'objet dans une variable n'aura aucune incidence sur les performances; rien de significatif.

+0

Intéressant. Donc, si je lance un nombre à une chaîne - String (nombre), serait-ce aussi une référence? –

+1

Non. String (123) renvoie une chaîne littérale, pas un objet - donc il n'y a pas de référence impliquée. Si vous vouliez un objet String, vous auriez besoin de new String (123) 'pour créer un nouvel objet String avec un contenu de '123'. – Amber

+0

Bonne explication +1 – redsquare

5

Ajout à la réponse de @ Dav, il y a des moments où stocker des objets jquery dans les variables sera une bonne chose. Exemple classique:

$('#something div').each(function() { 
    $(this).css({'background-color':'#afa'}); 
    // do some stuff; 
    $(this).slideDown('fast'); 
} 

mieux:

$('#something div').each(function() { 
    var $this = $(this); 
    $this.css({'background-color':'#afa'}); 
    // do some stuff; 
    $this.slideDown('fast'); 
} 

De cette façon, vous évitez créer objets jquery chaque fois que vous appelez $.

Questions connexes