window.document.forms.myForm.fieldChaque point dans la référence à l'objet nécessite une recherche pour accéder à sa partie. Si la chaîne est référencée plus d'une fois, on peut l'assigner à une variable qui pointera directement sur l'objet et qui permettra de réduire le nombre de recherches nécessaires.
Voici un petit test qui démontre le gain de performance :
var foo, start, end, executionTime;
/* Test 1 */
start = new Date().getTime();
for(var i=0 ; i<10000 ; i++){
foo = window.document.forms.myForm.field;
}
executionTime = new Date().getTime() - start;
console.log('Test 1 : %i', executionTime);
/* Test 2 */
var refForm = window.document.myForm;
start = new Date().getTime();
for(var i=0 ; i<10000 ; i++){
foo = refForm.field;
}
executionTime = new Date().getTime() - start;
console.log('Test 2 : %i', executionTime);
/* Test 3 */
var refElem = window.document.myForm.field;
start = new Date().getTime();
for(var i=0 ; i<10000 ; i++){
foo = refElem;
}
executionTime = new Date().getTime() - start;
console.log('Test 3 : %i', executionTime);
- Le premier test utilise la notation longue à l'intérieur de la boucle de 10 000 itérations. Sans surprise, c'est le plus lent (44).
- Le deuxième test retient la référence au formulaire et un seul test doit être effectué pour accéder à field. On note que la performance est grandement améliorée (8).
- Le troisième test conserve la référence directe à field donc plus aucune recherche n'est nécessaire. C'est quasi instantané (1).
Ca à l'air intéressant... Mais je me méfie de ce genre d'optimisation. Ca dépend complètement du moteur qui exécute le code JS.
RépondreEffacerEst-ce que ce script a été testé dans d'autre navigateur IE, chrome ?
Tu ne devrais pas t'en méfier. J'ai testé à l'instant avec FF3, IE8 et Chrome 4.
RépondreEffacerRésultats des trois tests:
FF 3.6.3 : 44 - 8 - 1
IE 8 : 157 - 15 - 0
Chrome 4.1 : 35 - 11 - 0
Merci pour les tests !
RépondreEffacerJe note les conseils et je le range dans un coin de ma tête pour le ressortir lors d'écriture de code JS.