2009-04-03 14 views
5

El rendimiento de JavaScript en Internet Explorer es una mierda. No hay noticias allí. Sin embargo, hay algunos consejos y trucos para acelerarlo. Por ejemplo, existe este threepartseries. Todavía me encuentro incapaz de exprimir el rendimiento decente. Tal vez algunos de ustedes tienen una idea de qué más hacer, ¿era más rápido?Problema de rendimiento de Internet Explorer Javascript

Lo que quiero hacer es crear una tabla de tamaño mediano desde cero en Javascript. Digamos, 300 filas, 10 celdas cada una. Toma alrededor de 5-6 segundos en mi computadora hacer esto. OK, concedido, es una plataforma de 5 años, pero eso es demasiado. Aquí está mi código ficticio:

<html> 
    <body> 
    <script type="text/javascript"> 
     function MakeTable(parent) 
     { 
     var i, j; 
     var table = document.createElement('table'); 
     var insertRow = table.insertRow; 
     for (i = 0; i < 300; i++) 
     { 
      var row = insertRow(-1); 
      for (j = 0; j < 10; j++) 
      { 
      var cell = row.insertCell(-1); 
      cell.innerHTML = i + ' - ' + j; 
      } 
     } 
     parent.appendChild(table); 
     } 
    </script> 
    <div onclick="MakeTable(this);">Click Me!</div> 
    </body> 
</html> 

Agregado: Hmm, al parecer cadena de concatenación (con Array.join) es el único camino a seguir. Bueno, triste, por supuesto. Tenía la esperanza de hacerlo de la forma "correcta" DOM-way. :)

Respuesta

4

Aquí es un enlace interesante que encontré en la búsqueda de una respuesta sobre esto: La página utiliza cinco scripts/métodos diferentes para generar una tabla.
De acuerdo con sus pruebas, el uso de cadenas es mucho más rápido que el uso de elementos DOM/Tabla. http://www.quirksmode.org/dom/innerhtml.htm l

-2

Usted podría tratar de una unidad más de Duff ': El desenrollar un bucle repitiendo el código varias veces:

for (var i = 0; i < count/4; i++) { 
    doSomething(); 
    doSomething(); 
    doSomething(); 
    doSomething(); 
} 

Obviamente esto deja el resto cuando se divide por 4, el dispositivo del Duff original tenía una ingeniosa forma de saltar al medio del ciclo usando una declaración de cambio mezclada con el ciclo. Javascript no es compatible con esto, pero puede procesar manualmente el resto de sus filas. Además, el número 4 es aleatorio, el número en sí mismo puede derivarse mediante pruebas de rendimiento.

Consulte también: http://www.websiteoptimization.com/speed/10/10-3.html

+0

WTF? Estás perdiendo los últimos elementos de la matriz ... –

+0

Es por eso que dije "Obviamente esto deja el resto cuando se divide por 4" .. –

1

Uno de los motivos principales de los problemas de rendimiento de IE son las operaciones DOM. Desea hacer sus operaciones DOM de la manera más eficiente posible. Esto puede incluir, dependiendo de su situación (¡punto de referencia!):

  • Creación sin conexión de su estructura DOM; mantener el elemento de nivel superior fuera del documento (crear, pero no anexar) a continuación, añadiendo al documento cuando está listo, en lugar de añadir todos los elementos en el DOM a medida que crea que
  • escritura innerHTML en lugar de la manipulación DOM
+0

El primer consejo ya está allí. Ver - la tabla se agrega al DOM al final. Ahora estoy explorando innerHTML y de hecho parece ser mucho más rápido. –

+0

Sí, debería haber mencionado eso. Aunque no siempre es más rápido, es por eso que quería mencionar el 'Benchmark'. parte :-) –

Cuestiones relacionadas