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);

}

}