Guidelines pour Javascript — Performances

Court-circuiter les blocs au lieu de les imbriquer

Recourir à return, break ou continue pour sauter une partie d’un code, pour épargner des codes imbriqués inutiles.

Pas bien :

function maFonction(items) {
	var result = [];
	if (items.length) {
		for (var i = 0, len items.length; i < len; ++index) {
			// …
		}
	}

	return result;
}

Bien :

function maFonction(items) {
	var result = [];

	if (items.length) {
		return result;
	}

	for (var i = 0, len items.length; i < len; ++index) {
		// …
	}

	return result;
}

Pas bien :

while (items.length > 0) {
	if (item.hasOwnProperty('taggable')) {
		// Long code de traitement
	}
}

Bien :

while (items.length > 0) {
	if (!item.hasOwnProperty('taggable')) {
		continue;
	}

	// Long code de traitement
}

Utiliser la délégation d’événements

Lorsque plusieurs éléments ont le même événement attaché, il est préférable d’utiliser la délégation d’événements. Ça consiste à attacher l’event handler sur le plus proche parent des éléments communs, plutôt qu’à chacun des éléments eux-mêmes.

Pas bien :

$('.navigation a').on('click', function(event) {

});
$('.navigation').on('click', 'a', function(event) {

});

Dans les deux cas avec jQuery, this revenrra bien le lien.

Ne pas concaténer les chaînes

Souvent en Javascript, il faut construire tout un code html en y insérant plusieurs variables. Quand une chaîne devient un peu trop longue, les performances s’écroulent. Il est préréfable alors d’utiliser un push sur un array.

Pas bien :

function maFonction(info) {
	var html = '';

	html += '<div>';
	for (var i = 0; i < info.length; ++i) {
		html += '<a href="' + info.link + '">' + info.content + '</a>';
	}
	html += '</div>';

	return html;
}

Bien :

function maFonction(info) {
	var html = ['<div>'];

	for (var i = 0; i < info.length; ++i) {
		html.push('<a href="' + info.link + '">' + info.content + '</a>');
	}
	html.push('</div>');

	return html.join('');
}