Je suis en train de travailler avec un problème de performance sur le Javascript. Donc, je veux juste vous demander: quel est le moyen le plus rapide de vérifier si une chaîne contient une autre sous-chaîne (j'ai juste besoin de la valeur de type boolean)? Pourriez-vous s'il vous plaît suggérer votre idée et de l'échantillon extrait de code?! Merci beaucoup!
Réponses
Trop de publicités?Vous avez deux possibilités:
-
(new RegExp('word')).test(str) // or /word/.test(str)
-
str.indexOf('word') !== -1
Les expressions régulières semblent être plus rapide (au moins en Chrome 10).
Test de Performance - courte botte de foin
Test de Performance au long de la botte de foin
Mise à jour:
On ne peut pas dire avec certitude quelle méthode est la plus rapide. Les différences entre les navigateurs est énorme. Alors que dans google Chrome, 10 indexOf
semble être plus rapide, Safari 5, indexOf
est nettement plus lent que toute autre méthode.
Vous devez voir et l'essayer pour votre auto. Cela dépend de vos besoins. Par exemple, un de la casse de la recherche est plus rapide avec des expressions régulières.
Cela fonctionne pour vous?
string1.indexOf(string2) >= 0
Edit: Cela ne peut pas être plus rapide qu'une RegExp si la chaîne2 contient de motifs répétés. Sur certains navigateurs, indexOf peut être beaucoup plus lent que la RegExp. Voir les commentaires.
Edit 2: RegExp peut être plus rapide que indexOf lorsque les chaînes sont très longues et/ou contiennent des motifs répétés. Voir les commentaires et @Felix réponse.
J'ai trouvé que l'utilisation d'une simple boucle for, itérer sur tous les éléments de la chaîne et en la comparant à l'aide de charAt
effectue plus rapidement qu' indexOf
ou Regex
. Le code et la preuve est disponible à JSPerf.
ETA: indexOf
et charAt
effectuer de la même façon terrible sur Chrome Mobile selon les navigateurs Portée de données figurant sur jsperf.com
Pour trouver une simple chaîne de caractères, à l'aide de la méthode indexOf() et en utilisant les regex est à peu près la même: http://jsperf.com/substring - afin de choisir celui qui semble le plus facile à écrire.