Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: alberizo en 29 de Agosto de 2007, 12:40:50 PM

Título: Optimizar rendimiento de javascript
Publicado por: alberizo en 29 de Agosto de 2007, 12:40:50 PM
Me he encontrado esta página que está muy interesante para mejorar la velocidad de ejecución de javascript

http://dhtmlkitchen.com/learn/js/perf/

Además aprovecho este post para pedir una sección de programación web, ya se que este foro es más bien de videojuegos, pero muchos de aquí le damos a la web y no estaría mal tener un apartado, ¿votos a favor?
Título: Optimizar rendimiento de javascript
Publicado por: Kr0n en 29 de Agosto de 2007, 01:29:26 PM
Un post mío relacionado, aunque más enfocado a la hora de servir los js en vez de metodología: Minify, sirviendo javascript (http://beer2beer.com/2007/07/23/minify-sirviendo-javascript/)
Título: Re: Optimizar rendimiento de javascript
Publicado por: Tei en 29 de Agosto de 2007, 04:40:39 PM
Mas que ser lento javascript, que es lento. Lo lento es usar javascript[1]. Si siendo lento, metes unos calculos complejos, dentro de un bucle, y eso dura mas de dos segundos sin salir de la funcion. Esos segundos el navegador web parecera colgado. Y es posible que de tiempo a que el usuario pierda la paciencia y envie la señal de matar el navegador.
Otra manera en la que javascript puede ser lento es manipulando el arbol dom haciendo pequeños cambios cada vez, para terminar haciendo uno grande.  Si creamos una tabla grande, y lo hacemos por dom puro, sera lento.
Si lo hacemos con un innerHTML, sera instantaneo. Puede que esto sea porque durante cada modificion dispare eventos en cascada que tengan un procesamiento complejo antes de ser desechados. Ademas, en general, manejar cosas de forma "atomica" es lento en otros ambientes. Por ejemplo si haces un programa en C que lee un fichero byte a byte. Sera odiosamente lento para leer un fichero de 2 MB. Pero si lo modificas y consume un buffer de 8KB, sera instantaneo.   DOM es muy practico, pero es muy propenso a escribir esta clase de codigo lento.
Para evitar esto, hay features avanzadas.
Una busqueda de getElementById, puede partir de un elemento de subarbol, no desde la raiz.  Y tenemos una feature para clonar ramas enteras.
Posiblemente la forma mas XML de hacer grandes modificiaciones (prescindiendo de innerHTML) venga por aqui. Osea, hay mas a saber del tema de lo que hemos aprendido hasta hoy.

Extra:

Javascript puede parecer lento, ademas, cuando la pausa que se produce la genera la carga de datos. Como en el caso de una peticion ajax sincronica. En este caso se soluciona haciendo peticiones asincronicas, que no son bloqueantes.

En cosas como rollover y tal. Javascript puede parecer lento, cuando se hacen cosas que se podrian hacer con CSS.  La manera de hacer efectos en CSS es mas ligera para el navegador. Entre otras cosas porque probablemente javascript implique la creacion de un contexto, que son unos cuantos mallocs y muchas conversiones de tipos, quizas alguna llamada a recolectores de basura y cosas de estas.
r.

[1] Lo que esto quiere decir es que javascript debe usarse de herramienta de apoyo. De pegamento entre otras cosas. De esta manera no puede haber grandes problemas de rendimiento.