2012-12-13 5 views
11

Sont-elles équivalentes en terme de vitesse?jQuery performances de chaînage

$(this).attr("date",date); 
$(this).attr("date_start",date_start); 
$(this).attr("heure_start",heure_start); 

ou

$(this).attr("date",date).attr("date_start",date_start).attr("heure_start",heure_start); 

Même si le second est plus rapide est-il préférable d'écrire séparé pour rendre le code plus lisible?

Répondre

26

Non, les deux ne sont pas équivalents en vitesse.

$(this) génère un nouvel objet jQuery à chaque fois. Et en fonction de ce qui est this, cela peut être une opération complexe.

La seconde forme est donc plus rapide.

Notez que pour readibility vous pouvez l'écrire comme

$(this) 
    .attr("date",date) 
    .attr("date_start",date_start) 
    .attr("heure_start",heure_start); 

Si vous ne pouvez pas enchaîner les opérations parce que vous avez d'autres lignes de code entre les deux, vous pouvez également mettre en cache l'objet. Ceci est d'habitude:

var $this = $(this); 
$this.attr("date", date); 
$this.attr("date_start", date_start); 
$this.attr("heure_start", heure_start); 

Et notez aussi que attr peut prendre une carte comme argument:

$(this).attr({ 
    date: date, 
    date_start: date_start, 
    heure_start: heure_start 
}); 
+0

Et aussi plus facile à lire lorsque formaté correctement IMO –

+3

C'est une explication complète! –

5

Pour des raisons de lisibilité, vous pouvez diviser la ligne à

$(this) 
    .attr("date",date) 
    .attr("date_start",date_start) 
    .attr("heure_start",heure_start); 

Je sais que cela devrait ont été un commentaire mais l'espacement n'aurait eu aucun sens en tant qu'un.