2008-09-05 11 views
8

Estoy tratando de mejorar el rendimiento de una aplicación web. Tengo métricas que puedo usar para optimizar el tiempo necesario para devolver la página HTML principal, pero me preocupan los archivos CSS y JavaScript externos que se incluyen en estas páginas HTML. Estos se sirven de forma estática, con encabezados de HTTP Expires, pero se comparten entre todas las páginas de la aplicación.Javascript y el rendimiento de análisis de CSS

Me preocupa que el navegador tenga que analizar estos archivos CSS y JavaScript para cada página que se muestra y tener todos los CSS y JavaScript compartidos en archivos comunes afectará negativamente el rendimiento. ¿Debería tratar de dividir estos archivos para vincular desde cada página solo el CSS y JavaScript necesarios para esa página, o obtendría poco rendimiento por mis esfuerzos?

¿Hay alguna herramienta que pueda ayudarme a generar métricas para esto?

Respuesta

14

Contexto: Si bien es cierto que los gastos generales HTTP es más significativo que el análisis JS y CSS, ignorando el impacto de analizar el rendimiento del navegador (incluso si tiene menos de un mega de JS) es una buena manera de conseguirse en problemas.

YSlow, Fiddler y Firebug no son las mejores herramientas para controlar la velocidad de análisis. A menos que se hayan actualizado recientemente, no separan la cantidad de tiempo requerida para obtener JS sobre HTTP o cargar desde la memoria caché en comparación con la cantidad de tiempo dedicado al análisis de la carga real de JS.

La velocidad de Parse es un poco difícil de medir, pero hemos seguido esta métrica varias veces en proyectos en los que he trabajado y el impacto en las cargas de página fue significativo incluso con ~ 500k de JS. Obviamente, los navegadores más antiguos son los que más sufren ... con suerte Chrome, TraceMonkey y otros similares ayudan a resolver esta situación.

Sugerencia: Dependiendo del tipo de tráfico que tiene a su sitio, puede ser bien vale la pena su tiempo para dividir su carga útil JS por lo que algunas grandes trozos de JS que nunca serán usados ​​en una de las páginas más populares nunca se envían al cliente. Por supuesto, esto significa que cuando un nuevo cliente acceda a una página donde se necesita este JS, deberá enviarlo por cable.

Sin embargo, puede ser que, por ejemplo, el 80% de sus usuarios nunca necesite el 50% de sus JS debido a sus patrones de tráfico. Si esto es así, definitivamente debes utilizar cargas útiles JS más pequeñas y empaquetadas solo en las páginas donde el JS es necesario. De lo contrario, el 80% de los usuarios sufrirán penalizaciones de análisis de JS innecesarias en por cada carga de página.

línea de base: Es difícil encontrar el equilibrio adecuado de JS almacenamiento en caché y, cargas útiles envasados ​​más pequeños, pero dependiendo de su patrón de tráfico que es definitivamente vale la pena considerar una técnica que no sea rompiendo todas sus JS en cada pageload.

3

Creo que YSlow lo hace, pero tenga en cuenta que a menos que todas las solicitudes se realicen a través de una conexión de bucle invertido, no debe preocuparse. La sobrecarga HTTP de los archivos divididos tendrá un impacto en el rendimiento ahora más que en el análisis, a menos que los archivos CSS/JS excedan varios megabytes.

2

Para agregar a la gran respuesta de kamen, diría que en algunos navegadores, el tiempo de análisis para recursos js más grandes crece de forma no lineal. Es decir, un archivo JS de 1 meg tardará más en analizar que dos archivos de 500k. Por lo tanto, si gran parte del tráfico es de gente que probablemente almacenará en caché su JS (visitas de retorno) y todos sus archivos JS son estables en caché, puede tener sentido dividirlos incluso si termina cargando todos ellos en cada página vista.

+2

Es importante tener en cuenta que IE tiene un límite superior arbitrario de solicitudes que realizará. Si tiene demasiados archivos JS diferentes, después de cierto punto IE ya no cargará sus scripts. Esto se puso de manifiesto en un proyecto de Drupal en el que la página cargaba los scripts si la agregación JS estaba desactivada, pero una vez que volvimos a la agregación JS funcionó bien. (La agregación de JS es una característica de Drupal que extraerá todos los JS de una página en un solo archivo para reducir el número de solicitudes. – Metagrapher

+0

También agregando, levik, su sugerencia de dividir los archivos funciona porque algunos navegadores solicitarán y analizarán ambos archivos casi simultáneamente. Otros navegadores esperarán hasta que se analice el primero para cargar el segundo. He descubierto que generalmente menos solicitudes son mejores, junto con un código más conciso y relevante. – Metagrapher

Cuestiones relacionadas