Loop em uma String versus indexOf
Data de postagem: Oct 01, 2010 7:24:16 PM
Não faça um loop em uma string quando pode ser utilizando um indexOf. A iteração em JavaScript possui um desempenho bem inferior ao indexOf nativo.
Código original com loop: 46 execuções demoraram 905 ms.
Código otimizado com indexOf: 46 execuções demoraram 16 ms.
Original:
function prepareStringToXmlParser(str) {
var resultArray = new Array();
var lastCopyPos = 0;
for (var i = 0; i < str.length; i++) {
if (str.charCodeAt(i) == 13) {
resultArray.push(str.substring(lastCopyPos, i) + String.fromCharCode(10));
if (((i+1) < str.length) && (str.charCodeAt(i+1) == 10)) {
i++;
}
lastCopyPos = i + 1;
}
}
resultArray.push(str.substring(lastCopyPos, i));
return resultArray.join('');
}
Otimizado:
function prepareStringToXmlParser(s) {
var escaped = null;
var startIdx = 0;
var len = s.length;
var idx = s.indexOf("\r");
while (idx != -1) {
escaped += s.substring(startIdx, idx);
startIdx = idx + 1;
if (startIdx === len || s.charCodeAt(startIdx) !== 10) {
escaped += "\n";
}
idx = s.indexOf("\r", idx+1);
}
if (escaped === null) {
return s;
} else {
return escaped + s.substr(startIdx);
}
}