Spędziłem trochę czasu szukając najlepszego sposobu na uniknięcie ciągu html i znalazłem kilka dyskusji na ten temat: discussion 1discussion 2. Prowadzi mnie to do funkcji replaceAll. Potem zrobiłem testy wydajności i próbowałem znaleźć rozwiązanie osiągające podobną prędkość bez powodzenia :(Co to jest zastępczy sekret wydajności? [Escape HTML]
Oto mój ostateczny test case set. Znalazłem go w sieci i rozwijam z moimi próbami (4 przypadki na dole) i nadal nie mogę osiągnąć replaceAll()
. wydajność
Jaki jest sekret czarownica sprawia replaceAll()
rozwiązanie tak szybkich
wita
fragmenty kodu?!
String.prototype.replaceAll = function(str1, str2, ignore)
{
return this.replace(new RegExp(str1.replace(/([\/\,\!\\\^\$\{\}\[\]\(\)\.\*\+\?\|\<\>\-\&])/g,"\\$&"),(ignore?"gi":"g")),(typeof(str2)=="string")?str2.replace(/\$/g,"$$$$"):str2);
};
kredyty dla qwerty
najszybszy przypadku do tej pory:
html.replaceAll('&', '&').replaceAll('"', '"').replaceAll("'", ''').replaceAll('<', '<').replaceAll('>', '>');
Wiele zbudowany w metodach są realizowane w natywnym kodzie i wstępnych zoptymalizowanych (regexes jest jednym), naśladując ich w JavaScript w szybszy sposób jest po prostu trudny do zrobienia. –
z pewnością, ale dlaczego "zastąp nowy przypadek RegExp" jest tak wolny. Używa również RegExp. – Saram
nadal zamieniać bez regex wydaje się być szybsze http://jsperf.com/replaceallvssplitjoin –