webForumDet fria alternativet

indexOf vs. match

JavaScript

10 svar · 374 visningar · startad av Web-Tor

Medlem sedan nov. 200013 890 inlägg
Frågan#1

Är det någon prestandaskillnad mellan funktionerna indexOf och match?

Medlem sedan aug. 20039 340 inlägg
#2

Antagligen är match lite slöare eftersom den kan använda reguljära uttryck.

Medlem sedan nov. 200013 890 inlägg
#3

Jo, ungefär så tänkte jag också. indexOf är ju lite simplare.
Jag har ett tungt script som jag gärna hade snabbat upp lite så det hade varit bra att veta vilket som är snabbast.

Medlem sedan aug. 20039 340 inlägg
#4

Lite benchmarking visar att indexOf är snabbare i alla browsers. Resultatet och testet finns här: http://member.webforum.nu/6067/versus.html

Medlem sedan nov. 200013 890 inlägg
#5

1000 tack! :f
Hur fick du fram det här?

Medlem sedan aug. 20039 340 inlägg
#6

Hur menar du?
Koden skrev jag själv. Värdena fyllde jag i vartefter koden kördes.

Medlem sedan nov. 200013 890 inlägg
#7

Värdena fyllde jag i vartefter koden kördes.

Vilken kod var det som kördes?

Medlem sedan sep. 20021 655 inlägg
#8

nitro2k01 skrev:

Lite benchmarking visar att indexOf är snabbare i alla browsers. Resultatet och testet finns här: http://member.webforum.nu/6067/versus.html

Snyggt test, och intressant hur mycket snabbare det gick med IE jämfört med FireFox.

Medlem sedan aug. 20039 340 inlägg
#9

Koden är en for-loop som upprepar två operationer av var typ tiotusen gånger, och tiden det tar för detta räknas ut och skrivs ut längst ner på sidan med document.write. Dessa värden har jag fyllt i statiskt i tabellen som referens.

Medlem sedan sep. 20021 655 inlägg
#10

En iakttagelse:
Om du bara vill se om en sträng innehåller en annan sträng är det ingen mening med att använda match-metoden.
Om man istället använder regexp-metoden test, som returnerar true om strängen matchar mönstret och false annars, får man ingen negativ prestandaskillnad i förhållande till indexOf. I Firefox går det t o m snabbare med test än indexOf.

Byt ut den sista for-loopen i nitros kod till

for (i=0; i<10000; i++){
	dest = matchstr1.test(sourcestr);
	dest = matchstr2.test(sourcestr);
}

för att se skillnaden.

Medlem sedan nov. 200013 890 inlägg
#11

Jag har nu bytt ut match till indexOf på de ställen där det går och scriptet blev betydligt snabbare.
Tack än en gång. :)

263 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
118 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)