Javascript lento no IE, por que?

1 resposta
F
Galera, estou executando o seguinte código no IE e no Firefox:
function montaTabelaFluxoDeCaixa(){
//Preenchendo a tabela de Fluxo de Caixa
	var div;
	var tabela;
	var pont;
	
	div = document.getElementById('fluxodecaixa');
	tabela = "<table border='0' width='960' cellpadding='0' cellspacing='0' style='border-collapse:"
				 tabela = tabela + " collapse;' >"
	pont = contasFluxoDeCaixa.next();
	while(pont!=null){
		//Valores calculados de cada conta
		var valorContaFCB1=formataValor(achaValorCalculado(pont.value().cdContaContabilMonitor,arrayFormula[1],arrayBalancoConta[1]));
		var valorContaFCB2=formataValor(achaValorCalculado(pont.value().cdContaContabilMonitor,arrayFormula[2],arrayBalancoConta[2]));
		var valorContaFCB3=formataValor(achaValorCalculado(pont.value().cdContaContabilMonitor,arrayFormula[3],arrayBalancoConta[3]));
		var valorContaFCB4=formataValor(achaValorCalculado(pont.value().cdContaContabilMonitor,arrayFormula[4],arrayBalancoConta[4]));
		
		var pcContaFCB1=formataValor(achaValorCalculado(pont.value().cdContaContabilMonitor,arrayFormulaPorcent[0],null));
		var pcContaFCB2=formataValor(achaValorCalculado(pont.value().cdContaContabilMonitor,arrayFormulaPorcent[1],null));
		var pcContaFCB3=formataValor(achaValorCalculado(pont.value().cdContaContabilMonitor,arrayFormulaPorcent[2],null));
		var pcContaFCB4=formataValor(achaValorCalculado(pont.value().cdContaContabilMonitor,arrayFormulaPorcent[3],null));
		
		//escolhe o estilo de acordo com o nivelConta
		if(pont.value().nuNivelConta==1){
			estilo="tdbalancoTitulo";
		}else if(pont.value().nuNivelConta==2){
			estilo="tdbalancoTotal";
		}else if(pont.value().nuNivelConta==3){
			estilo="tdbalancoDestaque";
		}else estilo="tdbalancoEdicao";
		
		//monta a linha sendo editavel, gravavel ou não dependendo do tipo de edição
		var naoGravavel="";
		if(pont.value().tpEdicaoConta==3) naoGravavel="_NG";
		
		if(pont.value().tpEdicaoConta!=2){
			tabela = tabela + "<tr><td width='319' class='" + estilo + "'>" + pont.value().dsConta + "</td>";
			tabela = tabela + "<td width='1' class='space'>&nbsp;</td>";
			tabela = tabela + "<td width='100' class='" + estilo + "'><input style='width:95;' type='text' id='FC_valorConta_b1_" + pont.value().cdContaContabilMonitor + naoGravavel + "' name='FC_valorConta_b1_" + pont.value().cdContaContabilMonitor + naoGravavel + "' value='" + valorContaFCB1 + "' ";
			tabela += " onkeypress='onlyNumber(event);' ";
			tabela += " style='text-align:right'";
			tabela += " maxlength='15'";
			tabela += " onblur='recalcular(this);'";
			tabela += " class='campoValor' /> </td>";
			tabela = tabela + "<td width='60' class='" + estilo + "'><input style='width:55;' type='text' id='FC_porcentagemConta_b1_" + pont.value().cdContaContabilMonitor + naoGravavel + "' name='FC_porcentagemConta_b1_" + pont.value().cdContaContabilMonitor + naoGravavel + "' value='" + pcContaFCB1 + "' readonly></td>";
			tabela = tabela + "<td width='100' class='" + estilo + "'><input style='width:95;' type='text' id='FC_valorConta_b2_" + pont.value().cdContaContabilMonitor + naoGravavel + "' name='FC_valorConta_b2_" + pont.value().cdContaContabilMonitor + naoGravavel + "' value='" + valorContaFCB2 + "' ";
			tabela += " onkeypress='onlyNumber(event);' ";
			tabela += " style='text-align:right'";
			tabela += " maxlength='15'";
			tabela += " onblur='recalcular(this);'";
			tabela += " class='campoValor' /> </td>";
			tabela = tabela + "<td width='60' class='" + estilo + "'><input style='width:55;' type='text' id='FC_porcentagemConta_b2_" + pont.value().cdContaContabilMonitor + naoGravavel + "' name='FC_porcentagemConta_b2_" + pont.value().cdContaContabilMonitor + naoGravavel + "' value='" + pcContaFCB2 + "' readonly></td>";			
			tabela = tabela + "<td width='100' class='" + estilo + "'><input style='width:95;' type='text' id='FC_valorConta_b3_" + pont.value().cdContaContabilMonitor + naoGravavel + "' name='FC_valorConta_b3_" + pont.value().cdContaContabilMonitor + naoGravavel + "' value='" + valorContaFCB3 + "' ";
			tabela += " onkeypress='onlyNumber(event);' ";
			tabela += " style='text-align:right'";
			tabela += " maxlength='15'";
			tabela += " onblur='recalcular(this);'";
			tabela += " class='campoValor' /> </td>";
			tabela = tabela + "<td width='60' class='" + estilo + "'><input style='width:55;' type='text' id='FC_porcentagemConta_b3_" + pont.value().cdContaContabilMonitor + naoGravavel + "' name='FC_porcentagemConta_b3_" + pont.value().cdContaContabilMonitor + naoGravavel + "' value='" + pcContaFCB3 + "' readonly></td>";
			tabela = tabela + "<td width='100' class='" + estilo + "'><input style='width:95;' type='text' id='FC_valorConta_b4_" + pont.value().cdContaContabilMonitor + naoGravavel + "' name='FC_valorConta_b4_" + pont.value().cdContaContabilMonitor + naoGravavel + "' value='" + valorContaFCB4 + "' ";
			tabela += " onkeypress='onlyNumber(event);' ";
			tabela += " style='text-align:right'";
			tabela += " maxlength='15'";
			tabela += " onblur='recalcular(this);'";
			tabela += " class='campoValor' /> </td>";
			tabela = tabela + "<td width='60' class='" + estilo + "'><input style='width:55;' type='text' id='FC_porcentagemConta_b4_" + pont.value().cdContaContabilMonitor + naoGravavel + "' name='FC_porcentagemConta_b4_" + pont.value().cdContaContabilMonitor + "' value='" + pcContaFCB4 + "' readonly></td></tr>";
		}else{
			tabela = tabela + "<tr><td width='319' class='" + estilo + "'>" + pont.value().dsConta + "</td>";
			tabela = tabela + "<td width='1' class='space'>&nbsp;</td>";
			tabela = tabela + "<td width='100' class='" + estilo + "' id='FC_valorConta_b1_" + pont.value().cdContaContabilMonitor + naoGravavel + "_td'><input type='hidden' id='FC_valorConta_b1_" + pont.value().cdContaContabilMonitor + naoGravavel + "' name='FC_valorConta_b1_" + pont.value().cdContaContabilMonitor + naoGravavel + "' value='" + valorContaFCB1 + "'>" + valorContaFCB1 + "</td>";
			tabela = tabela + "<td width='60' class='" + estilo + "'  id='FC_porcentagemConta_b1_" + pont.value().cdContaContabilMonitor + naoGravavel + "_td'><input type='hidden' id='FC_porcentagemConta_b1_" + pont.value().cdContaContabilMonitor + naoGravavel + "' name='FC_porcentagemConta_b1_" + pont.value().cdContaContabilMonitor + naoGravavel + "' value='" + pcContaFCB1 + "'>" + pcContaFCB1 + "</td>";
			tabela = tabela + "<td width='100' class='" + estilo + "' id='FC_valorConta_b2_" + pont.value().cdContaContabilMonitor + naoGravavel + "_td'><input type='hidden' id='FC_valorConta_b2_" + pont.value().cdContaContabilMonitor + naoGravavel + "' name='FC_valorConta_b2_" + pont.value().cdContaContabilMonitor + naoGravavel + "' value='" + valorContaFCB2 + "'>" + valorContaFCB2 + "</td>";
			tabela = tabela + "<td width='60' class='" + estilo + "'  id='FC_porcentagemConta_b2_" + pont.value().cdContaContabilMonitor + naoGravavel + "_td'><input type='hidden' id='FC_porcentagemConta_b2_" + pont.value().cdContaContabilMonitor + naoGravavel + "' name='FC_porcentagemConta_b2_" + pont.value().cdContaContabilMonitor + naoGravavel + "' value='" + pcContaFCB2 + "'>" + pcContaFCB2 + "</td>";
			tabela = tabela + "<td width='100' class='" + estilo + "' id='FC_valorConta_b3_" + pont.value().cdContaContabilMonitor + naoGravavel + "_td'><input type='hidden' id='FC_valorConta_b3_" + pont.value().cdContaContabilMonitor + naoGravavel + "' name='FC_valorConta_b3_" + pont.value().cdContaContabilMonitor + naoGravavel + "' value='" + valorContaFCB3 + "'>" + valorContaFCB3 + "</td>";
			tabela = tabela + "<td width='60' class='" + estilo + "'  id='FC_porcentagemConta_b3_" + pont.value().cdContaContabilMonitor + naoGravavel + "_td'><input type='hidden' id='FC_porcentagemConta_b3_" + pont.value().cdContaContabilMonitor + naoGravavel + "' name='FC_porcentagemConta_b3_" + pont.value().cdContaContabilMonitor + naoGravavel + "' value='" + pcContaFCB3 + "'>" + pcContaFCB3 + "</td>";
			tabela = tabela + "<td width='100' class='" + estilo + "' id='FC_valorConta_b4_" + pont.value().cdContaContabilMonitor + naoGravavel + "_td'><input type='hidden' id='FC_valorConta_b4_" + pont.value().cdContaContabilMonitor + naoGravavel + "' name='FC_valorConta_b4_" + pont.value().cdContaContabilMonitor + naoGravavel + "' value='" + valorContaFCB4 + "'>" + valorContaFCB4 + "</td>";
			tabela = tabela + "<td width='60' class='" + estilo + "'  id='FC_porcentagemConta_b4_" + pont.value().cdContaContabilMonitor + naoGravavel + "_td'><input type='hidden' id='FC_porcentagemConta_b4_" + pont.value().cdContaContabilMonitor + naoGravavel + "' name='FC_porcentagemConta_b4_" + pont.value().cdContaContabilMonitor + naoGravavel + "' value='" + pcContaFCB4 + "'>" + pcContaFCB4 + "</td></tr>";
			
		}
		pont=pont.next();
	}
	tabela = tabela + " </table>"
	div.innerHTML=tabela;
}

No Firefox estou obtendo um tempo de execução deste método de 16 milessegundos

Já no IE o mesmo script demora 29425 milessegundos

hehehe... alguma explicação??

melhor, alguma idéia para otimizar para o IE?

OBS: esse contas fluxo caixa pode ser considerado uma lista ligada, não é elea que causa a lentidão, ctzz.

Grato.

1 Resposta

shoko

Qual versão do IE?

Realmente o IE tem um algoritmo de interpretação de javascript muito mais lento do que o do IE, principalmente para inserir elementos

http://ejohn.org/blog/accuracy-of-javascript-time/

Nesse link voce pode ver a diferenca de execucao de testes e, alguns browsers e SO’S… já da para notar uma diferenca do IE quanto aos outros browsers.

Infelizmente eu nao sei uma forma mais performatica que isso, ou uma forma de criar elementos via javascript que seja, pelo menos usual, no IE.

Espero ter ajudado.

Criado 21 de janeiro de 2009
Ultima resposta 21 de jan. de 2009
Respostas 1
Participantes 2