2009-02-16 9 views
5

Estoy tratando de optimizar una tabla ordenable que he escrito. El cuello de botella está en la manipulación dom. Actualmente estoy creando nuevas filas de tablas e insertándolas cada vez que clasifico la tabla. Me pregunto si podría acelerar las cosas simplemente reorganizando las filas, sin recrear los nodos. Para que esto haga una diferencia significativa, la reorganización del nodo dom debería ser mucho más ágil que la creación de nodos. ¿Es este el caso? gracias, -Morganjavascript/dom - ¿Qué tan caro es crear vs reorganizar nodos dom?

+0

¿Cuántas filas hay en la tabla que está ordenando? –

+0

cientos, no miles – morgancodes

+0

No voy a publicar esto como una respuesta, ya que se rechazará por no responder a su pregunta, pero ¿ha visto el plugin tablesort para jQuery? - http://tablesorter.com/docs/example-pager.html –

Respuesta

1

no sé si crear o manipular es más rápido, pero sé que va a ser más rápido si manipulas toda la tabla cuando no está en la página y luego la colocas de una vez. A lo largo de esas líneas, probablemente sea más lento reorganizar las filas existentes en su lugar, a menos que primero se elimine toda la tabla del DOM.

This page sugiere que sería más rápido clonar la tabla actual, manipularla como desee, luego reemplazar la tabla en el DOM.

+0

oh. interesante. Gracias. – morgancodes

1

Estoy dibujando esta tabla el doble de rápido ahora, usando innerHTML, construyendo todo el contenido como una cadena, en lugar de insertar nodos uno por uno.

+0

wow, de hecho, esa técnica lo empeora mucho en IE6. – morgancodes

+1

En lugar de string = string + newstring, use una matriz: var a = []; while (loop) {a.push (newstring)} result = a.join (""); // La concatenación de cadenas en IE es terriblemente lenta. Hice una prueba una vez donde Opera terminó en aproximadamente 4 segundos, y IE todavía no había terminado después de 20 minutos. – some

+0

Sí, me encontré con eso también, pero con lo que estoy haciendo, parece que aún es más rápido agregar nodos dom que usar innerHTML en IE6. – morgancodes

0

si puedes, es mejor hacer la manipulación del dom no como una manipulación dom real, sino como algún tipo de método dentro de tu script y luego manipular el dom. Entonces, en lugar de hacer lo que se llama repintar en cada nodo, agrupa lo que habría sido su repintado en cada nodo en su propio método, y luego adjuntar esos nodos a un padre que luego se adjuntará a la dom actual, lo que resulta en solo dos repintados en lugar de cientos. Digo dos b/c que necesita para limpiar lo que está en el dom ya antes de actualizar con sus nuevos datos.

0

que estaba buscando una respuesta a esto y decidí crear un punto de referencia rápida http://jsfiddle.net/wheresrhys/2g6Dn/6/

Utiliza jQuery, por lo que no es un punto de referencia puro, y es probablemente sesgada en otras formas también. Pero el resultado que da es que mover nodos DOM es aproximadamente el doble de rápido que crear y destruir nodos dom cada vez

Cuestiones relacionadas