ASP classico: la migrazione da IIS 5 a IIS 6 causa problemi di memorizzazione nella cache delle immagini?

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

  •  08-07-2019
  •  | 
  •  

Domanda

Scusa in anticipo per la domanda prolissa.

Sono davvero un programmatore di database, ma ho ereditato il supporto di un'applicazione intranet ASP classica che è stata recentemente migrata da IIS 5 a un nuovo server che esegue IIS 6. La base di utenti è circa una dozzina, il tutto utilizzando IE 6.

L'interfaccia utente visualizza le gerarchie di elementi restituiti da un database, utilizzando una combinazione di elenchi HTML non ordinati e javascript per nascondere / espandere i rami mentre l'utente naviga.

Le immagini vengono visualizzate accanto ai membri dell'elenco con CSS (utilizzando l'elenco-stile-immagine), usando un'immagine diversa per ciascun tipo di elemento. Il numero di diversi tipi di elementi (e quindi di immagini) in una gerarchia varia tra 2 e 10. Le gerarchie variano tra 20 e 200 elementi.

Il problema:

Dalla migrazione a IIS 6, diversi utenti hanno riscontrato un problema che sembra essere causato dalla mancata corretta applicazione delle immagini a uno o più elementi nella gerarchia; l'elenco viene visualizzato correttamente, ma mancano una o più immagini e facendo clic su un collegamento si carica una pagina vuota.

L'analisi del traffico di rete tramite Wireshark e i registri IIS mostrano che il problema non è sul lato server: tutto il contenuto è stato correttamente fornito al client.

Il problema sembra essere correlato alla memorizzazione nella cache dei contenuti sul client: sembra interessare più spesso gli utenti che non hanno utilizzato l'applicazione prima sul proprio PC corrente o che non la usano da un po 'di tempo. Inoltre, posso replicare il problema approssimativamente un tentativo su tre avviando una sessione, svuotando la cache del mio browser e quindi aggiornando la pagina. Tuttavia, lo stesso vale per l'applicazione durante l'esecuzione su IIS 5, quindi questo problema potrebbe essersi verificato prima della migrazione a IIS 6 ma si è verificato con minore frequenza. Di tanto in tanto, se lascio la sessione per circa 20 minuti, il browser sembra "trovare" le immagini mancanti e tutto funziona correttamente.

Se si accede all'applicazione tramite un proxy locale (ho usato Fiddler) il problema non si verifica mai, anche se il registro delle connessioni di Fiddler mostra una o più connessioni effettuate al server per recuperare le immagini interrotte. Come prima, il traffico di rete mostra che l'immagine è stata restituita dal server. Tuttavia, l'utilizzo del proxy sembra consentire a IE di trovare altre copie dell'immagine correttamente recuperate dalla cache.

Ho raggiunto il punto in cui sono alla fine della mia limitata conoscenza del debug di problemi ASP / IIS. La rimozione delle immagini in stile elenco dal CSS risolve il problema, ma questa deve essere l'opzione di ultima istanza poiché rende l'applicazione più difficile da usare.

Qualunque suggerimento su come posso procedere sarebbe ricevuto con gratitudine.

Modifica

AnonJr suggerisce che questo deve essere un problema di configurazione del client, poiché tutti gli altri componenti sembrano funzionare correttamente.

Ho scontato un semplice problema di configurazione del client perché questa è l'unica applicazione interessata dal problema descritto Ho testato tutte le opzioni in Strumenti > Opzioni Internet > File temporanei > Impostazioni senza cambiamenti nel comportamento.

Quali altre opzioni di configurazione del client dovrei prendere in considerazione?

Modifica 2 - una soluzione

La risposta accettata mi ha spinto a cercare un problema noto con IE6 che richiede più copie di immagini quando viene generato HTML dallo script sul lato client - http://support.microsoft.com/default.aspx?scid=kb;en-us;319546 .

L'articolo (avendo dichiarato che questo comportamento è "di progettazione") suggerisce una soluzione per pre-memorizzazione nella cache delle immagini richieste caricandole in un DIV invisibile:

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

Questo sembra funzionare per me: non riesco più a replicare il problema svuotando la cache del browser nel mezzo di una sessione e una traccia di Fiddler mostra ogni immagine

È stato utile?

Soluzione

Presenta un bug IE6 in cui il browser effettua più richieste per la stessa risorsa. Ad esempio, se il contenuto richiede la visualizzazione di una piccola icona ripetuta 20 volte in un elenco, invece di recuperare quell'immagine una volta, tenta di recuperarla 20 volte. OK 19 delle risposte sono 304 non modificate ma restano comunque 19 round trip al server.

Ho trovato in passato con questa richiesta eccessiva che alla fine ti ritrovi con troppe richieste non soddisfatte. A quel punto ulteriori richieste al server anche per altre pagine fanno fatica a ottenere una risposta, almeno per un po '.

Non sono sicuro che questo sia ciò che sta accadendo nel tuo caso, un modo per esaminarlo è usare IE7 invece di vedere se hai lo stesso problema, questo bug è stato corretto in IE7.

Modifica : ora che il problema è confermato come il bug a cui mi riferivo, dovresti anche notare il riferimento KB a un "breve ritardo". Il problema di fondo è che, al fine di riutilizzare un'immagine appena recuperata, il browser deve eseguire un lavoro che viene rinviato fino al completamento dell'attuale blocco di javascript. È necessario più di un "breve ritardo", è necessario un approccio asincrono.

Ho usato il display: nessun approccio DIV al pre-recupero delle immagini e questo funziona bene per il lavoro in stile AJAX. Tuttavia, se il codice è in esecuzione durante o prima dell'evento onload di una finestra, si avrà comunque il problema quando si aggiungono immagini in questo codice. È necessario un setTimeout per ottenere l'esecuzione di ulteriore codice dopo il completamento dell'evento onload.

Altri suggerimenti

Potresti voler focalizzare la tua attenzione su come modificare le impostazioni di memorizzazione nella cache sull'estremità del client. Se le immagini vengono inviate dal server, è probabile che non si tratti di un problema IIS. Se l'HTML per le immagini viene inviato al browser, non si tratta di un problema ASP. Questo lascia il cliente.

Il proxy potrebbe mitigare alcuni dei problemi e / o potrebbe essere un fattore nel modo in cui IE6 decide di memorizzare nella cache immagini, ecc.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top