Professional Documents
Culture Documents
JavaScript
Una aproximación a la realidad del rendimiento de las
aplicaciones web que usan JavaScript.
Marzo - 2008
Blog.zenphp.es | https://forja.rediris.es/projects/csl2-zenphp/
Juan Belón
Un tema que crea mucha confusión es la diferenciación entre dónde se ejecuta JavaScript y donde se
toman los puntos de medida de rendimiento. La dificultad tiene que ver con el hecho de que muchos
aspectos de un navegador son directamente proporcionales a otros, lo que causa que las cuestiones de
eficiencia sean intervenidas constantemente, un esquema que ayuda a comprenderlo es el siguiente:
Modelos Rendimiento
(Objetos) (Navegador)
XMLHttpRequest
Contadores (Timers)
Navegador Renderizado
DOM
CSS
Análisis
Sintáctico
JavaScript – Representa el núcleo del motor JavaScript. Este contiene sólo las
primitivas básicas (funciones, objetos, vectores, expresiones regulares, etc.) para
realizar operaciones. En si mismo no es muy útil, al menos no tanto como un
framework javascript. Las mejoras de rendimiento dependen de la habilidad de
cómo va afectar a todo el resto de objetos del dominio.
Modelos Objeto – En conjunto estos son los objetos introducidos en tiempo de
ejecución en JavaScript para dar al usuario un mayor abanico de posibilidades.
Generalmente están implementados en C++ y son importados en el entorno de
JavaScript (por ejemplo XPCOM es usado frecuentemente por Mozilla). Hay
muchas comprobaciones de seguridad para prevenir a los scripts maliciosos
acceder a estos objetos de forma involuntaria(lo que disminuye el rendimiento).
Las mejoras de velocidad generalmente vienen en la forma de mejoras en lacapa
de conexión o incluso eliminando dicha capa...(reemplazo).
o XMLHttpRequest y contadores (temporizadores o timers) – Se
implementan en C++ y se cargan en tiempo de ejecución en JavaScript. El
rendimiento de estos elementos solo afectan indirectamente al
rendimiento del dibujado en pantalla (renderizado).
o Navegador – Representa objetos como 'window', 'window.location', etc.
Las mejoras aquí también afectan al redimiento del renderizado.
o DOM y CSS – Estas son representaciones de objetos de un sitio, HTML y
CSS. Cuando se crea una aplicación web todo tiene que pasar a través de
estas representaciones, sus mejoras de rendimiento,en el caso del DOM
afectan en cómo de rápido se dibujan los cambios y como se propagan.
Análisis Sintáctico – Este es el proceso de lectura, análisis y conversión del
HTML,CSS,XML, etc. en sus modelos de objeto nativos. Las mejoras de velocidad
pueden afectar los tiempos de carga de una página.
Renderizado – Es la fase final, el dibujado de la página o cualquier subsecuencia
de actualización. Es el cuello de botella final para el rendimiento de las
aplicaciones interactivas.
Lo interesante de todo esto es que se pone mucha atención al rendimiento de una sóla
capa del navegador: JavaScript, sin embargo la situación real es más complicada.Para los
principiantes, mejorar el rendimiento de JavaScript tiene el potencial de mejorar mucho
el rendimiento de un sitio web, pero aún quedan cuellos de botella en el DOM, CSS, y las
capas de renderizado. Si tenemos una representación DOM lenta, entonces nos sirve de
poco tener un JavaScript muy eficiente, ya que tenemos que tener en cuenta que es el
navegador el que tiene que procesar toda la pila del navegador.
Estos son algunos consejos para que realicemos aplicaciones eficientes en equilibrio en
cada capa: