Показать сообщение отдельно
  #10 (permalink)  
Старый 26.01.2010, 16:41
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от da_ff
действительно полагаете что так будет быстрее? если вы проверяли то скажите сразу, чтобы не мучиться.
оптимизированный для многократного применения вариант tenshi, быстрее вашей ф-ции уже после 50-и <
Если же вашу ф-цию переписать нормально, то она становится быстрее на любых тестах(по-крайней мере до 1000-и &lt
НО! если добавить в массив symbols еще сотню пар хотя бы, то на тысяче < ваша ф-ция даже оптимизированная сдает позиции
как итог, ваша ф-ция более быстрая при меньшей универсальности
НО!
включение посторонних(не &xxx; ) символов сильно тормозит вашу ф-цию, а tenshi-вариант абсолюбтно не замедляется
(function(){
var t= document.createElement('textarea');
func1=function(text){
t.innerHTML=text;
return t.value
}
})();
function func2 (str, toText) {
  var
    symbols = [
      ['&',     '&'],
      ['&lt;',      '<'],
      ['&gt;',      '>'],
      ['&and;',     '^'],
      ['&sim;',     '~'],
	  ['&nbsp;',' '],
['&iexcl;','¡'],
['&cent;','¢'],
['&pound;','£'],
['&curren;','¤'],
['&yen;','¥'],
['&brvbar;','¦'],
['&sect;','§'],
['&uml;','¨'],
['&copy;','©'],
['&ordf;','ª'],
['&laquo;','«'],
['&not;','¬'],
['&shy;',''],
['&reg;','®'],
['&macr;','¯'],
['&deg;','°'],
['&plusmn;','±'],
['&sup2;','²'],
['&sup3;','³'],
['&acute;','´'],
['&micro;','µ'],
['&para;','¶'],
['&middot;','·'],
['&cedil;','¸'],
['&sup1;','¹'],
['&ordm;','º'],
['&raquo;','»'],
['&frac14;','¼'],
['&frac12;','½'],
['&frac34;','¾'],
['&iquest;','¿'],
['&Agrave;','À'],
['&Aacute;','Á'],
['&Acirc;','Â'],
['&Atilde;','Ã'],
['&Auml;','Ä'],
['&Aring;','Å'],
['&AElig;','Æ'],
['&Ccedil;','Ç'],
['&Egrave;','È'],
['&Eacute;','É'],
['&Ecirc;','Ê'],
['&Euml;','Ë'],
['&Igrave;','Ì'],
['&Iacute;','Í'],
['&Icirc;','Î'],
['&Iuml;','Ï'],
['&ETH;','Ð'],
['&Ntilde;','Ñ'],
['&Ograve;','Ò'],
['&Oacute;','Ó'],
['&Ocirc;','Ô'],
['&Otilde;','Õ'],
['&Ouml;','Ö'],
['&times;','×'],
['&Oslash;','Ø'],
['&Ugrave;','Ù'],
['&Uacute;','Ú'],
['&Ucirc;','Û'],
['&Uuml;','Ü'],
['&Yacute;','Ý'],
['&THORN;','Þ'],
['&szlig;','ß'],
['&agrave;','à'],
['&aacute;','á'],
['&acirc;','â'],
['&atilde;','ã'],
['&auml;','ä'],
['&aring;','å'],
['&aelig;','æ'],
['&ccedil;','ç'],
['&egrave;','è'],
['&eacute;','é'],
['&ecirc;','ê'],
['&euml;','ë'],
['&igrave;','ì'],
['&iacute;','í'],
['&icirc;','î'],
['&iuml;','ï'],
['&eth;','ð'],
['&ntilde;','ñ'],
['&ograve;','ò'],
['&oacute;','ó'],
['&ocirc;','ô'],
['&otilde;','õ'],
['&ouml;','ö'],
['&divide;','÷'],
['&oslash;','ø'],
['&ugrave;','ù'],
['&uacute;','ú'],
['&ucirc;','û'],
['&uuml;','ü'],
['&yacute;','ý'],
['&thorn;','þ'],
['&yuml;','ÿ']
    ],
    pos = -1;

  if (typeof toText == 'undefined' || toText) {
    for (var i = 0, n = symbols.length; i < n; i++) {
		str=str.replace(new RegExp(symbols[i][0],'g'),symbols[i][1]);
    }
  } else {
    for (var i = 0, n = symbols.length; i < n; i++) {
	str=str.replace(new RegExp(symbols[i][1],'g'),symbols[i][0]);
    }
  }
  return str;
}

</script>
<script type="text/javascript">
var text='&lt;'
var start = new Date();
for (var i = 0; i < 10000; i++)
	{
	func1(text);
	}
var end = new Date();
var result = end.getTime() - start.getTime();
console.log(result + 'ms');
var start = new Date();
for (var i = 0; i < 10000; i++)
	{
	func2(text);
	}
var end = new Date();
var result = end.getTime() - start.getTime();
console.log(result + 'ms');

var text='&lt;||&lt;|&lt;|&lt;|&lt;|'+'&lt;|&lt;|&lt;|&lt;|&lt;|'+
'&lt;|&lt;|&lt;|&lt;|&lt;|'+'&lt;|&lt;|&lt;|&lt;|&lt;|'+
'&lt;|&lt;|&lt;|&lt;|&lt;|'+'&lt;|&lt;|&lt;|&lt;|&lt;|'+
'&lt;|&lt;|&lt;|&lt;|&lt;|'+'&lt;|&lt;|&lt;|&lt;|&lt;|'+
'&lt;|&lt;|&lt;|&lt;|&lt;|'+'&lt;|&lt;|&lt;|&lt;|&lt;|'
;
text+=text;
text=(text+text+text+text+text);
text+=text;
var start = new Date();
for (var i = 0; i < 100; i++)
	{
	func1(text);
	}
var end = new Date();
var result = end.getTime() - start.getTime();
console.log(result + 'ms');
var start = new Date();
for (var i = 0; i < 100; i++)
	{
	func2(text);
	}
var end = new Date();
var result = end.getTime() - start.getTime();
console.log(result + 'ms');

var text='&lt;||&lt;||&lt;||&lt;||&lt;||'+'&lt;||&lt;||&lt;||&lt;||&lt;||'+
'&lt;||&lt;||&lt;||&lt;||&lt;||'+'&lt;||&lt;||&lt;||&lt;||&lt;||'+
'&lt;||&lt;||&lt;||&lt;||&lt;||'+'&lt;||&lt;||&lt;||&lt;||&lt;||'+
'&lt;||&lt;||&lt;||&lt;||&lt;||'+'&lt;||&lt;||&lt;||&lt;||&lt;||'+
'&lt;||&lt;||&lt;||&lt;||&lt;||'+'&lt;||&lt;||&lt;||&lt;||&lt;||'
;
text+=text;
text=(text+text+text+text+text);
text+=text;
var start = new Date();
for (var i = 0; i < 100; i++)
	{
	func1(text);
	}
var end = new Date();
var result = end.getTime() - start.getTime();
console.log(result + 'ms');
var start = new Date();
for (var i = 0; i < 100; i++)
	{
	func2(text);
	}
var end = new Date();
var result = end.getTime() - start.getTime();
console.log(result + 'ms');

потестируйте сами
Ответить с цитированием