JavaScript Être cohérent dans l'utilisation des nombres


Exemple

Si le moteur est capable de prédire correctement que vous utilisez un petit type spécifique pour vos valeurs, il sera en mesure d'optimiser le code exécuté.

Dans cet exemple, nous utiliserons cette fonction triviale en sommant les éléments d'un tableau et en générant le temps nécessaire:

// summing properties
var sum = (function(arr){
        var start = process.hrtime();
        var sum = 0;
        for (var i=0; i<arr.length; i++) {
                sum += arr[i];
        }
        var diffSum = process.hrtime(start);
        console.log(`Summing took ${diffSum[0] * 1e9 + diffSum[1]} nanoseconds`);
        return sum;
})(arr);

Faisons un tableau et additionnons les éléments:

var     N = 12345,
        arr = [];
for (var i=0; i<N; i++) arr[i] = Math.random();

Résultat:

Summing took 384416 nanoseconds

Maintenant, faisons la même chose mais avec seulement des entiers:

var     N = 12345,
        arr = [];
for (var i=0; i<N; i++) arr[i] = Math.round(1000*Math.random());

Résultat:

Summing took 180520 nanoseconds

La somme des nombres entiers a pris la moitié du temps ici.

Les moteurs n'utilisent pas les mêmes types que ceux que vous avez en JavaScript. Comme vous le savez probablement, tous les nombres dans JavaScript sont des nombres à virgule flottante à double précision IEEE754, il n'y a pas de représentation spécifique disponible pour les entiers. Mais les moteurs, quand ils peuvent prédire que vous utilisez uniquement des entiers, peuvent utiliser une représentation plus compacte et plus rapide, par exemple des entiers courts.

Ce type d’optimisation est particulièrement important pour les applications de calcul ou à forte intensité de données.