Ich arbeite mit einem Leistungsproblem in JavaScript. Ich möchte nur fragen: Wie kann ich am schnellsten überprüfen, ob eine Zeichenfolge eine andere Teilzeichenfolge enthält (ich benötige nur den booleschen Wert)? Könnten Sie bitte Ihre Idee und einen Beispiel-Snippet-Code vorschlagen?
javascript
regex
substring
Đinh Hồng Châu
quelle
quelle
regex
Tags)?Antworten:
Sie haben zwei Möglichkeiten:
Regulärer Ausdruck :
indexOf
::Reguläre Ausdrücke scheinen schneller zu sein (zumindest in Chrome 10).Leistungstest - kurzer Heuhaufen
Leistungstest - langer Heuhaufen
Update 2011:
Es kann nicht mit Sicherheit gesagt werden, welche Methode schneller ist. Die Unterschiede zwischen den Browsern sind enorm. Während in Chrome 10
indexOf
schneller zu sein scheint,indexOf
ist Safari 5 deutlich langsamer als jede andere Methode.Du musst es selbst sehen und versuchen. Es hängt von Ihren Bedürfnissen ab. Zum Beispiel ist eine Suche ohne Berücksichtigung der Groß- und Kleinschreibung mit regulären Ausdrücken viel schneller.
Update 2018:
Um zu verhindern, dass Benutzer die Tests selbst ausführen, sind hier die aktuellen Ergebnisse für die meisten gängigen Browser aufgeführt. Die Prozentsätze geben eine Leistungssteigerung gegenüber dem nächstschnellsten Ergebnis an (das zwischen den Browsern variiert):
Chrome: indexOf (~ 98% schneller)
<-- wow
Firefox: zwischengespeichertes RegExp (~ 18% schneller)
IE11: zwischengespeichertes RegExp (~ 10% schneller)
Edge: indexOf (~ 18% schneller)
Safari: zwischengespeichertes RegExp (~ 0,4% schneller)
Beachten Sie, dass zwischengespeichertes RegExp :
var r = new RegExp('simple'); var c = r.test(str);
im Gegensatz zu:/simple/.test(str)
quelle
indexOf
funktioniert nicht. Ich bin mir nicht sicher warum. Die Verwendung von Regex ist jedoch möglich. Dies ist ein Randfall, aber andere könnten auf dasselbe Problem stoßen.Geht das für dich?
Bearbeiten: Dies ist möglicherweise nicht schneller als ein RegExp, wenn der String2 wiederholte Muster enthält. In einigen Browsern ist indexOf möglicherweise viel langsamer als RegExp. Zeige Kommentare.
Bearbeiten 2: RegExp ist möglicherweise schneller als indexOf, wenn die Zeichenfolgen sehr lang sind und / oder wiederholte Muster enthalten. Siehe Kommentare und die Antwort von @ Felix.
quelle
test
.indexOf
ist eine Größenordnung langsamer als jede andere Methode. Man kann also eigentlich nicht sagen, welche Methode schneller ist. Es variiert von Browser zu Browser.Die schnellste
http://jsben.ch/9cwLJ
quelle
Ich habe festgestellt, dass die Verwendung einer einfachen for-Schleife, das Durchlaufen aller Elemente in der Zeichenfolge und das Vergleichen mit
charAt
die Leistung schneller alsindexOf
oder istRegex
. Der Code und der Proof sind bei JSPerf erhältlich .ETA:
indexOf
undcharAt
beide sind auf Chrome Mobile gemäß den auf jsperf.com aufgeführten Browser Scope-Daten ähnlich schlechtquelle
In ES6 wird die
includes()
Methode verwendet, um zu bestimmen, ob eine Zeichenfolge in einer anderen Zeichenfolge gefunden werden kann, zurückgegebentrue
oderfalse
entsprechend.Hier ist jsperf zwischen
Und
Wie das in jsperf gezeigte Ergebnis zeigt, scheinen beide eine gute Leistung zu erbringen.
quelle
str.includes("x|y")
; Suchen Sie im selben Aufruf nach den Literalen "x" oder "y".regex
. Einestr.includes("x") || str.includes('y')
indexOf
ist deutlich schneller alsincludes
(ab 1600% schneller). Es ist unklar, wie sich ein Unterschied von 44 Millionen Iterationen / Sek. Und 777+ Millionen I / Sek. Auf die Leistung in der realen Welt auswirkt. Mobilgeräte profitieren jedoch wahrscheinlich genug,indexOf
um die ideale Wahl zu sein.Um eine einfache Zeichenfolge zu finden, ist die Verwendung der indexOf () -Methode und der Verwendung von Regex ziemlich identisch: http://jsperf.com/substring - wählen Sie also diejenige aus, die einfacher zu schreiben scheint.
quelle
Ich habe eine jsben.ch für Sie erstellt http://jsben.ch/#/aWxtF ... scheint, dass indexOf etwas schneller ist.
quelle
Es ist eine einfache Möglichkeit, die
.match()
Methode zum Zeichenfolgen zu verwenden.Ich wünsche Ihnen einen schönen Tag, Sir!
quelle
match
wann es einetest
Methode gibt ... Schauen Sie sich die Top-Antwort an.