Foros del Web » Programando para Internet » ASP Clásico »

Sobre velocidad y lentitud de carga de una página : duda

Estas en el tema de Sobre velocidad y lentitud de carga de una página : duda en el foro de ASP Clásico en Foros del Web. Buenas tardes: Quisiera saber, y por eso les consulto y solicito opinión, si, reduciendo el tamaño de los archivos CSS y JS se podría lograr ...
  #1 (permalink)  
Antiguo 11/09/2011, 16:16
Avatar de freesoftwarrior  
Fecha de Ingreso: marzo-2006
Mensajes: 362
Antigüedad: 18 años, 1 mes
Puntos: 10
Sobre velocidad y lentitud de carga de una página : duda

Buenas tardes:
Quisiera saber, y por eso les consulto y solicito opinión, si, reduciendo el tamaño de los archivos CSS y JS se podría lograr una mejora significativa en el tiempo de carga de una página asp.

Salvo contadas excepciones, las consultas a las base de datos las hago mediante GetRows(). Y al margen de lo complicada de las consultas o de la gran cantidad de data a cargar (poco probable pero factible), mi duda esta más bien centrada en los archivos JS y CSS.

Utilizo un único archivo css para todo el estilo del proyecto que estoy desarrollando. Ahora, que estoy en un break, estaba pensando segmentar este archivo CSS en varios archivos, donde sólo habría 1 que sería "genérico", con estilos que son utilizadas por todas las páginas aunque sea 1 de ellas (hasta el momento he identificado 12 estilos que todas las páginas usan y hay páginas que usan 2 de estos estilos como páginas que usan los 12 estilos identificados), y otro archivo "específico" para la página en cuestión.

Igual consideración es para los archivos JS, pues de momento utilizo uno en que están todas las funciones, pero es claro que no todas las páginas utilizan todas las funciones, y pienso segmentarlo igual que como menciono en el caso previo de las CSS.

¿Esto podría representar algún tipo de mejora en la velocidad de carga de la página?, digo, ¿la podría volver un poco más rápida al momento de cargar?. Por cierto, no hay entorno gráfico, apenas unos 6 iconos de 18x18 pixeles entre GIF y PNG, el resto son colores backgrounds de tablas, páginas, div, etc.

Gracias por sus comentarios y sugerencias.

Un saludo desde Lima, Perú
  #2 (permalink)  
Antiguo 11/09/2011, 19:55
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 3 meses
Puntos: 98
Respuesta: Sobre velocidad y lentitud de carga de una página : duda

Cita:
Iniciado por freesoftwarrior Ver Mensaje
Buenas tardes:
Quisiera saber, y por eso les consulto y solicito opinión, si, reduciendo el tamaño de los archivos CSS y JS se podría lograr una mejora significativa en el tiempo de carga de una página asp.
Sí, la reducción de los archivos es importante, por eso una buena práctica es la compresión de los mismos en ambientes de producción, ahora lo de ser significativo es relativo, aunque yo soy de la idea de que cada byte, cuenta


Cita:
Iniciado por freesoftwarrior Ver Mensaje
Buenas tardes:
Salvo contadas excepciones, las consultas a las base de datos las hago mediante GetRows(). Y al margen de lo complicada de las consultas o de la gran cantidad de data a cargar (poco probable pero factible), mi duda esta más bien centrada en los archivos JS y CSS.

Utilizo un único archivo css para todo el estilo del proyecto que estoy desarrollando. Ahora, que estoy en un break, estaba pensando segmentar este archivo CSS en varios archivos, donde sólo habría 1 que sería "genérico", con estilos que son utilizadas por todas las páginas aunque sea 1 de ellas (hasta el momento he identificado 12 estilos que todas las páginas usan y hay páginas que usan 2 de estos estilos como páginas que usan los 12 estilos identificados), y otro archivo "específico" para la página en cuestión.

Igual consideración es para los archivos JS, pues de momento utilizo uno en que están todas las funciones, pero es claro que no todas las páginas utilizan todas las funciones, y pienso segmentarlo igual que como menciono en el caso previo de las CSS.
No, no lo hagas, no segmentes estos archivos, recuerda que el peso de ellos es importante pero más importante es el número de requests que haces desde tu sitio web, y cada css y js representan un nuevo request, la mejor práctica es hacerlo como lo estás haciendo y tener un archivo único para css y js.

Cita:
Iniciado por freesoftwarrior Ver Mensaje
Buenas tardes:

¿Esto podría representar algún tipo de mejora en la velocidad de carga de la página?, digo, ¿la podría volver un poco más rápida al momento de cargar?. Por cierto, no hay entorno gráfico, apenas unos 6 iconos de 18x18 pixeles entre GIF y PNG, el resto son colores backgrounds de tablas, páginas, div, etc.

Gracias por sus comentarios y sugerencias.

Un saludo desde Lima, Perú
Como lo estás planteando no me parece que la mejora en cuestión de carga pueda venir segmentando los archivos css y js, te iba a recomendar a su vez utilizar css-sprites pero ya que dices que la cantidad de las imágenes es poca pues realmente no creo que te ayude de mucho.

Estás son las cuantas cosas que me vienen a la mente que puedes revisar y ver si implementas, y nos cuentas que sirvió y que no. Están en el orden que me vienen a la cabeza no en importancia ni mucho menos

1. Reducir el número de requests -es mejor un archivo css largo que 10 cortos-
2. Utilizar llamadas a css al principio de la página
3. Si es posible utiliza llamadas a javascript al final de la página
4. Utilizar css sprites
5. Inverstigar sobre compresión de requests en el servidor, particularmente gzip
6. Utilizar llamadas en paralelo para contenidos estáticos (css, javascript, imagenes) pero no los distribuyas en mas de 3 o 4 dominios
7. Los archivos js y css deberían estar minificados en tu ambiente de producción
8. Minimizar el número de accesos a DOM mediante javascript
9. En la medida de lo posible evita las llamadas 301 y 302 (redirects)
10. Utiliza técnicas de cache en el servidor

Deben haber bastantes cosas mas que considerar pero eso es lo que de repente me viene a la cabeza, a ver si alguien puede aportar algo más.


Saludos
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #3 (permalink)  
Antiguo 11/09/2011, 20:37
Avatar de freesoftwarrior  
Fecha de Ingreso: marzo-2006
Mensajes: 362
Antigüedad: 18 años, 1 mes
Puntos: 10
Respuesta: Sobre velocidad y lentitud de carga de una página : duda

Cita:
Iniciado por u_goldman Ver Mensaje
aunque yo soy de la idea de que cada byte, cuenta
Somos del mismo pensar: un byte es un byte jejejeje



Cita:
Iniciado por u_goldman Ver Mensaje
No, no lo hagas, no segmentes estos archivos, recuerda que el peso de ellos es importante pero más importante es el número de requests que haces desde tu sitio web, y cada css y js representan un nuevo request, la mejor práctica es hacerlo como lo estás haciendo y tener un archivo único para css y js.
En realidad ahora tengo un gran archivo CSS y otro JS con todas las funciones. Eventualmente hay una o 3 páginas que cargan hasta 4 archivos JS: uno para Ajax, 2 para una función de calendario y su configuración y otro más para las funciones Ajax (aunque este último podría fusionarlo con el primero). Este sería un ejemplo:


Cita:
<script language="JavaScript" src="../setup/funciones.js?<%= varControl %>" type="text/javascript"></script>
<script language="JavaScript" src="../setup/ajax/ajaxscript.js?<%= varControl %>" type="text/javascript"></script>
<script language="JavaScript" src="../setup/ajax/getHint.js?<%= varControl %>" type="text/javascript"></script>
<script language="JavaScript" src="../setup/cal2.js?<%= varControl %>" type="text/javascript"></script>
<script language="JavaScript" src="../setup/cal_conf2.js?<%= varControl %>" type="text/javascript"></script>
El 1ro. es el gran archivo de funciones.
El 2do. crea las instancias de Ajax (creación de objetos y demás). Esta es la que puedo fusionar con otro archivo JS.
El 3ro. ejecuta las rutinas para un efecto Ajax de esos que según vas escribiendo algo aparecen "sugerencias". Este es el que podría unirlo con el 2do.
El 4to. es el JS que controla las operaciones y apariencia de un calendario.
El 5to. es el archivo de configuración del anterior. No creo que pueda fusionarlo pero voy a hacer la prueba.

Si te he comprendido bien, mejor sería si todos estos archivo estuvieran en uno solo, ¿verdad?.
Pero, y ahí mi duda, pocas páginas utilizan todos estos archivos mencionados: ¿por que hacer que todas las páginas carguen un archivo tan grande?.


Cita:
Iniciado por u_goldman Ver Mensaje
1. Reducir el número de requests -es mejor un archivo css largo que 10 cortos-
2. Utilizar llamadas a css al principio de la página
3. Si es posible utiliza llamadas a javascript al final de la página
4. Utilizar css sprites
5. Inverstigar sobre compresión de requests en el servidor, particularmente gzip
6. Utilizar llamadas en paralelo para contenidos estáticos (css, javascript, imagenes) pero no los distribuyas en mas de 3 o 4 dominios
7. Los archivos js y css deberían estar minificados en tu ambiente de producción
8. Minimizar el número de accesos a DOM mediante javascript
9. En la medida de lo posible evita las llamadas 301 y 302 (redirects)
10. Utiliza técnicas de cache en el servidor

Hay varias cosas que no comprendo en realidad.
Yo tenía entendido que las llamadas a CSS y JS sería mejor hacerlo antes del </head>. Por lo general no habría ningún problema en trasladar todos las llamadas y scripts fijos al final de cada página.

¿Que son CSS sprites?

La comprensión request GZIP si mal no tengo entendido es más para PHP que para ASP. El proyecto que estoy realizando es en ASP clásico. ¿Acaso hay forma de poder utilizar GZIP y así poder invocar archivos comprimidos del servidor?¿Esto podría ser aplicable para JS, CSS también, o también para otro tipo de archivos?

¿A que te refieres con no distribuirlos en más de 3 o 4 dominios?. El proyecto sería publicado en un único dominio con varios sub-dominios (va a ser una especie de servicio y cada sub-dominio apuntaría a una carpeta propia, esto para evitar el formato www.dominio.com/nombredecuenta y ofrecer nombredecuenta.dominio.com que creeo es un poco más "estético")

¿A que te refieres con "minificados en un ambiente de producción?. ¿Que son los accesos DOM mediante javascript?

Todas las páginas ASP llevan esta secuencia de comandos:

Cita:
<%
Response.Expires=0
Response.ExpiresAbsolute = Now() - 1
Response.addHeader "pragma", "no-cache"
Response.addHeader "cache-control","private"
Response.CacheControl = "no-cache"
Response.CacheControl = "Private"
Response.Buffer=True
'***** esta función sirve para convertir en español el formato de fecha en un servidor en inglés
Session.lcid=7178
%>

Además genero un número aleatorio que incluyo como "parámetro" en todos los archivos JS y CSS (mediante un ? como indico en el ejemplo de request que publiqué líneas arriba). Esta es un truco que aprendí de Ajax para asegurarme de una llamada "limpia" y evitar que se use el caché. ¿A esto te refieres con la de técnicas caché?

Mil gracias por tu respuesta. Me dieron mucho que pensar.

Estaré al tanto de tus comentarios y el de los demás
  #4 (permalink)  
Antiguo 12/09/2011, 01:12
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 3 meses
Puntos: 98
Respuesta: Sobre velocidad y lentitud de carga de una página : duda

Cita:
Iniciado por freesoftwarrior Ver Mensaje
En realidad ahora tengo un gran archivo CSS y otro JS con todas las funciones. Eventualmente hay una o 3 páginas que cargan hasta 4 archivos JS: uno para Ajax, 2 para una función de calendario y su configuración y otro más para las funciones Ajax (aunque este último podría fusionarlo con el primero). Este sería un ejemplo:

El 1ro. es el gran archivo de funciones.
El 2do. crea las instancias de Ajax (creación de objetos y demás). Esta es la que puedo fusionar con otro archivo JS.
El 3ro. ejecuta las rutinas para un efecto Ajax de esos que según vas escribiendo algo aparecen "sugerencias". Este es el que podría unirlo con el 2do.
El 4to. es el JS que controla las operaciones y apariencia de un calendario.
El 5to. es el archivo de configuración del anterior. No creo que pueda fusionarlo pero voy a hacer la prueba.

Si te he comprendido bien, mejor sería si todos estos archivo estuvieran en uno solo, ¿verdad?.
Pero, y ahí mi duda, pocas páginas utilizan todos estos archivos mencionados: ¿por que hacer que todas las páginas carguen un archivo tan grande?.
Si, fusiona tantos como puedas o en su defecto como lo apuntas es tener solamente lo que necesites por página pero me parece que será un poco complicado de mantener, el punto aquí es limitar los request que hacen estos archivos externos.

Cita:
Iniciado por freesoftwarrior Ver Mensaje
Hay varias cosas que no comprendo en realidad.
Yo tenía entendido que las llamadas a CSS y JS sería mejor hacerlo antes del </head>. Por lo general no habría ningún problema en trasladar todos las llamadas y scripts fijos al final de cada página.
JavaScript bloquea temporalmente la descarga en paralelo, es decir que tus archivos, particularmente descarga de imágenes no se ejecutarán hasta que se haya interpretado el JavaScript, en cambio si colocas tu JavaScript al final de la página y utilizas técnicas de descarga desde diferentes dominios todos estos se ejecutarán en paralelo (simultaneamente) y dejarás el JavaScript (bloqueo de descargas) al final.

Cita:
Iniciado por freesoftwarrior Ver Mensaje
¿Que son CSS sprites?
En síntesis se trata de una vez más minimizar las requests (mmmhh peticiones, je) y trabajar mejor con una imagen grande posicionada con css, pues esta imagen será descargada una vez y estará en cache, aquí hay mas información.

Cita:
Iniciado por freesoftwarrior Ver Mensaje
La comprensión request GZIP si mal no tengo entendido es más para PHP que para ASP. El proyecto que estoy realizando es en ASP clásico. ¿Acaso hay forma de poder utilizar GZIP y así poder invocar archivos comprimidos del servidor?¿Esto podría ser aplicable para JS, CSS también, o también para otro tipo de archivos?
Por acá hay más información, es para IIS6 pero puedes investigar para otras versiones si es que no usas ISS6

Cita:
Iniciado por freesoftwarrior Ver Mensaje
¿A que te refieres con no distribuirlos en más de 3 o 4 dominios?. El proyecto sería publicado en un único dominio con varios sub-dominios (va a ser una especie de servicio y cada sub-dominio apuntaría a una carpeta propia, esto para evitar el formato www.dominio.com/nombredecuenta y ofrecer nombredecuenta.dominio.com que creeo es un poco más "estético")
Me refiero a eso, utilizar otros dominios para la descarga de tus contenidos estáticos, pues esto ayuda a la descarga en paralelo, que es el principio de CDN aunque si implementar CDN es demasiado, basta con distribuír tus imágenes, css, js, flash, y demás contenidos estáticos en otros dominios.

Cita:
Iniciado por freesoftwarrior Ver Mensaje
¿A que te refieres con "minificados en un ambiente de producción?. ¿Que son los accesos DOM mediante javascript?
Je je, es que no encontré la traducción de "minified" pero básicamente necesitas comprimir tus archivos estáticos y menciono que esto tiene que ser hecho en producción porque no querrás tener que lidiar con archivos comprimidos en desarrollo

Por lo de los accesos a DOM es cualquier cosa que hagas en JavaScript para manipular tu HTML, estas operaciones son particularmente lentas y es muy sencillo dejarse llevar por la belleza de esta técnica, pero hay que tomar en cuenta que tienen un precio muy alto en el rendimiento de tu aplicación.

Cita:
Iniciado por freesoftwarrior Ver Mensaje
Todas las páginas ASP llevan esta secuencia de comandos:
Me refiero precisamente a lo opuesto, necesitarías ver que es lo que puedes maneter en cache y por cuanto tiempo, de lo contrario todo se está ejecutando por cada petición al servidor.

Cita:
Iniciado por freesoftwarrior Ver Mensaje
Además genero un número aleatorio que incluyo como "parámetro" en todos los archivos JS y CSS (mediante un ? como indico en el ejemplo de request que publiqué líneas arriba). Esta es un truco que aprendí de Ajax para asegurarme de una llamada "limpia" y evitar que se use el caché. ¿A esto te refieres con la de técnicas caché?
Entiendo el punto de no implementar cache en llamadas asíncronas (aunque también es debatible) pero coincido en que es lo más cómodo para los contenidos estáticos como tus css y javascript, la verdad no veo mucha utilidad de asegurarte que la petición sea siempre nueva, finalmente no creo que esos archivos cambien con cada petición.


Cita:
Iniciado por freesoftwarrior Ver Mensaje
Mil gracias por tu respuesta. Me dieron mucho que pensar.

Estaré al tanto de tus comentarios y el de los demás
Por nada, espero que te sirva


Saludos
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway

Última edición por u_goldman; 12/09/2011 a las 01:18
  #5 (permalink)  
Antiguo 12/09/2011, 07:49
Avatar de freesoftwarrior  
Fecha de Ingreso: marzo-2006
Mensajes: 362
Antigüedad: 18 años, 1 mes
Puntos: 10
Respuesta: Sobre velocidad y lentitud de carga de una página : duda

Me ha servido y mucho....
El crear varios archivos CSS y JS para cada página, es decir, "personalizarlos", si podría ser un problema en cuanto al mantenimiento se refiere, pero en teoría, sería muy poco mantenimiento el que se hiciera. En todo caso voy a hacer pruebas colocando el JS al final y viendo que rinde mejor: un JS completo o uno personalizado y más ligero.

Sólo para salir de una duda. Si llegara a utilizar compresión de archivos, ¿esto significaría que podría poner, por ejemplo, un JS comprimido en formato ZIP, con password, y aún así utilizarlo en mis páginas pero que si alguien llegara a descargárselo no podría abrirlo ya que no conocería el password?
  #6 (permalink)  
Antiguo 12/09/2011, 11:03
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 3 meses
Puntos: 98
Respuesta: Sobre velocidad y lentitud de carga de una página : duda

No, la compresión a la que me refería es quitarle los saltos de línea a tu archivo para reducir su peso.

Saludos
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #7 (permalink)  
Antiguo 12/09/2011, 11:31
Avatar de freesoftwarrior  
Fecha de Ingreso: marzo-2006
Mensajes: 362
Antigüedad: 18 años, 1 mes
Puntos: 10
Respuesta: Sobre velocidad y lentitud de carga de una página : duda

Al final creo que voy a optar por crear archivos CSS y JS personalizados para cada página, pues estoy viendo que, primero, hay algunas páginas que usan apenas 3 funciones y 5 estilos de las más de 100 funciones y 100 estilos creados.

Luego esta el hecho de que, una vez operativo el proyecto, el mantenimiento en cuanto se refiere a crear nuevas funciones y estilos, o modificarlos, no será en realidad un gran problema, pues para entonces tendría bien segmentado tanto las funciones como los estilos por páginas e inclusive por módulos.

En este momento me caería bien esa opción porque apenas si estoy bosquejando el entorno de la aplicación, y no se ha empezado la programación en serio.

Y la diferencia es mucho más que significativa, pues el actual archivo de funciones JS pesa 70kb y estimo que el más "grande" una vez realizada la depuración pesaría como 50kb, pero sería´un único archivo, y no como, en el ejemplo que puse, cargar 5 y hasta 6 archivos JS.

Muchas gracias por tus comentarios y sugerencias.....
  #8 (permalink)  
Antiguo 12/09/2011, 12:41
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 3 meses
Puntos: 98
Respuesta: Sobre velocidad y lentitud de carga de una página : duda

Si, lo importante es experimentarlo uno mismo, y ver que es lo que te funciona y que no.

Por nada
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway

Etiquetas: asp, carga, lentitud, página, velocidad
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:27.