Je fais actuellement un grand projet (en gros, je veux dire, de nombreux processus) où chaque milliseconde que j'économise signifie beaucoup (à long terme), donc je veux m'assurer que je le fais de la bonne façon.

Alors, quelle est la meilleure façon de vous assurer d'avoir un tableau supérieur à 1?

  • a) utilisez indexOf (), puis si le résultat est différent de -1, split ()
  • b) scindé (peu importe si des caractères existent), alors faites des trucs UNIQUEMENT si la longueur du tableau est supérieure à 1
  • c) un autre non mentionné ci-dessus
3
ajax333221 23 oct. 2011 à 02:31

3 réponses

Meilleure réponse

En utilisant jsPerf, il semble qu'omettre .indexOf() est environ 23% plus efficace que y compris plus de 500 000 itérations (11.67 contre 8.95 opérations par seconde):

Sans indexOf() :

var str = "test";
for (var i = 0; i < 500000; i++) {
    var test = str.split('.');
}

Avec .indexOf() :

var str = "test";
for (var i = 0; i < 500000; i++) {
    if (str.indexOf('.')) {
        var test = str.split('.');
    } else {
        var test = str;
    }
}

http://jsperf.com/split-and-split-indexof

MODIFIER

Hmm ... Si la ligne suivante est:

if (str.indexOf('.') > -1)

http://jsperf.com/split-and-split-indexof-with-indexof-check

Ou toute autre comparaison, c'est apparemment un peu plus rapide (d'environ 69%).

La seule raison pour laquelle je peux penser que c'est le cas est que l'exécution de .split() sur chaque variable exécutera deux fonctions sur chaque valeur (trouver, puis séparer), au lieu d'une seule si nécessaire. Remarque, cette dernière partie est juste une supposition.

0
Jared Farrish 22 oct. 2011 à 23:37

(b) est évidemment plus efficace que (a) car split utilise la même logique que indexOf et cette logique n'aura pas besoin d'être répétée s'il y a effectivement plus de 2 éléments. je ne peux pas penser à un moyen plus efficace.

-1
necromancer 22 oct. 2011 à 23:20

Nous pouvons voir que même lorsqu'il y a quelque chose à diviser, les meilleurs résultats proviennent du test indexOf par rapport à une valeur. Néanmoins, l'amélioration est pire que dans les cas où 100% des articles n'ont pas besoin d'être fractionnés. Ainsi, comme vous avez plus d'éléments devant être fractionnés, les tests génèrent moins d'avantages (comme on pourrait s'y attendre). Cela dépend donc vraiment du cas d'utilisation, car le code supplémentaire prend de la mémoire et utilise des ressources.

http://jsperf.com/split-and-split-indexof/2

0
Hogan 22 oct. 2011 à 23:49