ASP clásico: ¿la migración de IIS 5 a IIS 6 causa problemas de almacenamiento en caché de imágenes?

StackOverflow https://stackoverflow.com/questions/304749

  •  08-07-2019
  •  | 
  •  

Pregunta

Disculpas de antemano por la larga pregunta.

Realmente soy un programador de bases de datos, pero heredé el soporte de una aplicación de intranet ASP clásica que se ha migrado recientemente de IIS 5 a un nuevo servidor que ejecuta IIS 6. La base de usuarios es de aproximadamente una docena, todos usando IE 6.

La interfaz de usuario muestra jerarquías de elementos devueltos desde una base de datos, utilizando una combinación de listas HTML desordenadas y javascript para ocultar / expandir ramas a medida que el usuario navega.

Las imágenes se muestran junto a los miembros de la lista con CSS (usando list-style-image), usando una imagen diferente para cada tipo de elemento. El número de diferentes tipos de elementos (y, por lo tanto, imágenes) en una jerarquía varía entre 2 y 10. Las jerarquías varían entre 20 y 200 elementos.

El problema:

Desde la migración a IIS 6, varios usuarios han experimentado un problema que parece ser causado por imágenes que no se aplican correctamente a uno o más elementos de la jerarquía; la lista se muestra correctamente, pero falta una o más imágenes y al hacer clic en cualquier enlace se carga una página vacía.

El análisis del tráfico de red utilizando Wireshark y los registros de IIS muestran que el problema no está en el lado del servidor: todo el contenido se ha suministrado correctamente al cliente.

El problema parece estar relacionado con el almacenamiento en caché de contenido en el cliente: parece afectar más a menudo a los usuarios que no han usado la aplicación antes en su PC actual, o que no la han usado durante algún tiempo. Además, puedo replicar el problema aproximadamente en un intento de cada tres al iniciar una sesión, borrar el caché de mi navegador y luego actualizar la página. Sin embargo, lo mismo ocurre con la aplicación cuando se ejecuta en IIS 5, por lo que este problema puede haber existido antes de la migración a IIS 6, pero ha ocurrido con menos frecuencia. Ocasionalmente, si salgo de la sesión durante 20 minutos más o menos, el navegador parece "encontrar". las imágenes que faltan, y todo funciona bien.

Si se accede a la aplicación a través de un proxy local (utilicé Fiddler), el problema nunca se produce, aunque el registro de conexión de Fiddler muestra que una o más conexiones realizadas al servidor para recuperar las imágenes se han interrumpido. Como antes, el tráfico de red muestra que el servidor devolvió la imagen. Sin embargo, el uso del proxy parece permitir que IE encuentre otras copias de la imagen recuperadas con éxito de la memoria caché.

He llegado al punto en el que estoy al final de mi conocimiento limitado de depuración de problemas de ASP / IIS. La eliminación de las imágenes de estilo de lista del CSS soluciona el problema, pero esta tiene que ser la opción de último recurso, ya que hace que la aplicación sea más difícil de usar.

Cualquier sugerencia sobre cómo puedo proceder sería bien recibida.

Editar

AnonJr sugiere que esto debe ser un problema de configuración del cliente, ya que todos los demás componentes parecen funcionar correctamente.

Descarté un problema simple de configuración del cliente porque esta es la única aplicación afectada por el problema descrito He probado todas las opciones en Herramientas > Opciones de Internet > Archivos temporales > Configuraciones sin cambios en el comportamiento.

¿Qué otras opciones de configuración de cliente debería considerar?

Editar 2: una solución

La respuesta aceptada me llevó a buscar un problema conocido con IE6 solicitando múltiples copias de imágenes cuando se genera HTML a partir del script del lado del cliente - http://support.microsoft.com/default.aspx?scid=kb;en-us;319546 .

El artículo (después de haber declarado que este comportamiento es "por diseño") sugiere una solución alternativa de almacenar previamente en caché las imágenes requeridas cargándolas en un DIV invisible:

<DIV style='display:none'><IMG SRC='image.gif'></DIV>

Esto parece funcionar para mí: ya no puedo replicar el problema borrando el caché de mi navegador en medio de una sesión, y un rastro de Fiddler muestra cada imagen bei

¿Fue útil?

Solución

Esto huele a un error de IE6 en el que el navegador realiza múltiples solicitudes para el mismo recurso. Por ejemplo, si el contenido requiere la visualización de un pequeño icono repetido 20 veces en una lista, en lugar de solo recuperar esa imagen una vez, intentará recuperarla 20 veces. OK 19 de las respuestas son 304 No modificado pero todavía son 19 viajes de ida y vuelta adicionales al servidor.

En el pasado he encontrado que con esta solicitud excesiva, eventualmente terminas con demasiadas solicitudes sin completar. En ese momento, otras solicitudes al servidor, incluso para otras páginas, luchan por obtener una respuesta, al menos por un tiempo.

No estoy seguro de que esto sea lo que está sucediendo en su caso, una forma de examinar esto es usar IE7 en su lugar para ver si tiene el mismo problema, este error se corrigió en IE7.

Editar : Ahora que se confirma que el problema es el error al que me refería, también debe tener en cuenta la referencia de KB a un "retraso de tiempo corto". El problema subyacente es que para reutilizar una imagen recién obtenida, el navegador debe hacer un trabajo que se anula hasta que se haya completado el fragmento actual de JavaScript. Se necesita más que un "retraso de tiempo corto", se necesita un enfoque asincrónico.

He usado la pantalla: ninguna aproximación DIV para buscar previamente las imágenes y esto funciona bien para el trabajo de estilo AJAX. Sin embargo, si tiene código ejecutándose durante o antes del evento de carga de una ventana, todavía tendrá el problema al agregar imágenes en este código. Se necesita un setTimeout para que se ejecute más código después de que se complete el evento de carga.

Otros consejos

Es posible que desee centrar su atención en ajustar la configuración de almacenamiento en caché en el extremo del cliente. Si el servidor envía las imágenes, es probable que no sea un problema de IIS. Si el HTML de las imágenes se envía al navegador, no es un problema ASP. Eso deja al cliente.

El proxy puede estar mitigando algunos de los problemas, y / o podría ser un factor en cómo IE6 decide almacenar en caché las imágenes, etc.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top