Pergunta

Desculpas antecipadamente para a questão prolixo.

Eu estou realmente um programador de banco de dados, mas ter herdado o apoio de uma aplicação intranet clássico-ASP que foi recentemente migrou do IIS 5 para uma nova corrida servidor IIS 6. A base de usuários é de cerca de uma dúzia, todos usando IE 6.

A interface do usuário exibe hierarquias de itens devolvidos a partir de uma base de dados, utilizando uma combinação de listas não ordenadas HTML e javascript para ocultar / expandir ramos como no navega usuário.

As imagens são exibidas ao lado dos membros da lista com CSS (usando list-style-image), usando uma imagem diferente para cada tipo de item. O número de diferentes tipos de item (e, portanto, imagens) em uma hierarquia varia entre 2 e 10. As hierarquias variar entre 20 e 200 itens.

O problema:

Uma vez que a migração para o IIS 6, vários usuários têm experimentado um problema que parece ser causado por imagens deixando de ser devidamente aplicada a um ou mais itens na hierarquia; a lista exibe corretamente, mas uma ou mais imagens está faltando e clicando em qualquer link faz com que uma página vazia com a carga.

Análise de tráfego de rede usando Wireshark e os logs do IIS mostram que o problema não está no lado do servidor - todo o conteúdo foi correctamente fornecida ao cliente.

O problema parece estar relacionado a um cache de conteúdo no cliente: parece afetar mais frequentemente os usuários que não usaram o aplicativo antes em seu PC atual, ou não tê-lo usado por algum tempo. Além disso, eu posso replicar o problema aproximadamente uma tentativa em três iniciando uma sessão, limpando o cache do navegador e, em seguida, atualizar a página. No entanto, o mesmo é verdade para a aplicação quando em execução no IIS 5, de modo que este problema pode ter existido antes da migração para o IIS 6, mas ter acontecido com menos frequência. Ocasionalmente, se eu deixar a sessão por 20 minutos ou mais, o navegador parece "encontrar" as imagens que faltam, e tudo funciona OK.

Se o aplicativo é acessado através de um proxy local (eu usei Fiddler) o problema nunca ocorre, embora o log de conexão Fiddler mostra uma ou mais conexões feitas ao servidor para recuperar as imagens foi abortada. Como antes, mostra o tráfego de rede que a imagem foi devolvido pelo servidor. No entanto, usando o proxy parece permitir IE para encontrar outros exemplares recuperados com sucesso da imagem a partir do cache.

Já cheguei ao ponto onde eu estou no final do meu conhecimento limitado de depuração ASP / IIS questões. Removendo os list-style-imagens das correções de CSS do problema, mas isso tem de ser a opção de último recurso, uma vez que torna a aplicação mais difícil de usar.

Todas as sugestões sobre como posso proceder seriam recebidas com gratidão.

Editar

AnonJr sugere que este deve ser um problema de configuração do cliente, como todos os outros componentes parecem estar funcionando corretamente.

Eu descontado um problema de configuração simples cliente porque este é o único aplicativo afetado pelo problema descrito Eu testei todas as opções em Ferramentas> Opções da Internet> arquivos temporários> Configurações sem mudança de comportamento.

O que outras opções de configuração do cliente que eu deveria estar pensando?

Editar 2 - uma solução

A resposta aceita me levou a procurar um problema conhecido com IE6 solicitando várias cópias de imagens quando HTML é gerado a partir do script do lado do cliente - http://support.microsoft.com/default.aspx?scid=kb;en-us;319546

O artigo (tendo afirmado que este comportamento é "por design") sugere um trabalho em torno da pré-cache as imagens necessárias, carregando-os em uma DIV invisível:

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

Isto parece trabalhar para mim - eu já não pode replicar o problema limpando o cache do navegador no meio de uma sessão, e um violinista mostra traços cada imagem que está sendo solicitado oomente uma vez.

Eu fiz encontrar uma ressalva que eu não estava ciente de antes; o cache do IE é case-sensitive, portanto, uma imagem em cache será usado apenas se o caso do nome do arquivo especificado nas partidas DIV invisíveis que usadas em outras partes da página.

Foi útil?

Solução

Este cheira a um bug IE6, onde o navegador faz várias solicitações para o mesmo recurso. Por exemplo, se as chamadas de conteúdo para a exibição de um pequeno ícone repetido 20 vezes em uma lista, em vez de apenas buscar a imagem uma vez, ele tenta pegá-lo 20 vezes. OK 19 das respostas são 304 não modificado mas que ainda é 19 viagens extras volta para o servidor.

Eu encontrei no passado com esta excessiva solicitando eventualmente, você acaba com muitas solicitações unfullfilled. Nesse ponto mais pedidos para o servidor, mesmo para outras páginas luta para obter uma resposta, pelo menos por um tempo.

Eu não tenho certeza que é isso que está a acontecer no seu caso, uma maneira de analisar isso é usar IE7 vez para ver se você tem o mesmo problema, este bug foi corrigido no IE7.

Editar : Agora que o problema é confirmado para ser o bug eu estava referindo-se você também deve notar a referência KB a um 'pequeno atraso'. O problema subjacente é que, a fim de re-utilizar uma imagem recém-buscada as necessidades do navegador para fazer o trabalho que é defered até que o pedaço atual de javascript foi concluída. Mais do que é necessário um 'atraso de tempo curto', é necessária uma abordagem assíncrona.

Eu usei o display: abordagem DIV nenhum para a pré-busca as imagens e isso funciona bem para o trabalho estilo AJAX. No entanto, se você tiver o código em execução durante ou antes do evento onload de uma janela você ainda terá o problema ao adicionar imagens neste código. A setTimeout é necessária a fim de obter mais código para ser executado após o evento onload é completa.

Outras dicas

Você pode querer concentrar sua atenção em ajustar as configurações de cache no lado do cliente. Se as imagens estão sendo enviados pelo servidor, então não é provável que seja um problema IIS. Se o HTML para as imagens está sendo enviado para o navegador, não é um problema ASP. Isso deixa o cliente.

O proxy pode ser mitigar alguns dos problemas, e / ou pode ser um fator em como IE6 decide imagens de cache, etc.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top