1

長々とした質問を事前にお詫び申し上げます。

私は実際にはデータベース プログラマーですが、最近 IIS 5 から IIS 6 を実行する新しいサーバーに移行された従来の ASP イントラネット アプリケーションのサポートを継承しています。ユーザー ベースは約 12 人で、全員が IE 6 を使用しています。

UI はデータベースから返されたアイテムの階層を表示し、HTML の順序なしリストと JavaScript の組み合わせを使用して、ユーザーがナビゲートするときにブランチを非表示/展開します。

リスト メンバーの横に CSS (list-style-image を使用) で画像が表示され、項目の種類ごとに異なる画像が使用されます。階層内のさまざまなアイテム タイプ (したがって画像) の数は、2 ~ 10 の間で変化します。階層は、20 ~ 200 アイテムの間で変化します。

問題:

IIS 6 への移行以降、何人かのユーザーが、階層内の 1 つまたは複数のアイテムにイメージが適切に適用されないことが原因と思われる問題を経験しています。リストは正しく表示されますが、1 つ以上の画像が欠落しており、リンクをクリックすると空のページが読み込まれます。

Wireshark を使用したネットワーク トラフィックの分析と IIS ログは、問題がサーバー側にあるのではなく、すべてのコンテンツがクライアントに正しく提供されていることを示しています。

この問題は、クライアントでのコンテンツ キャッシュに関連しているようです。現在の PC でアプリケーションを使用したことがないか、しばらく使用していないユーザーに影響を与えることが多いようです。また、セッションを開始し、ブラウザのキャッシュをクリアしてからページを更新することで、約 3 回に 1 回の試行で問題を再現できます。ただし、IIS 5 で実行している場合も同じことがアプリケーションに当てはまるため、この問題は IIS 6 への移行前に存在していた可能性がありますが、発生頻度は低くなりました。ときどき、20 分ほどセッションを離れると、ブラウザが不足している画像を「見つけた」ように見え、すべて正常に動作します。

アプリケーションがローカル プロキシ (私は Fiddler を使用) を介してアクセスされる場合、問題は発生しませんが、Fiddler 接続ログには、画像を取得するためにサーバーに対して行われた 1 つ以上の接続が中止されたことが示されます。前と同様に、ネットワーク トラフィックは、画像がサーバーから返されたことを示しています。ただし、プロキシを使用すると、IE はキャッシュから正常に取得された他の画像のコピーを見つけることができるようです。

ASP/IIS の問題のデバッグに関する限られた知識の限界に到達しました。CSS から list-style-images を削除すると問題は解決しますが、アプリケーションが使いにくくなるため、これは最後の手段にする必要があります。

私がどのように進めることができるかについての提案は、ありがたく受け取られます。

編集

AnonJr は、他のすべてのコンポーネントが正しく機能しているように見えるため、これはクライアントの構成の問題であるに違いないと示唆しています。

これは説明されている問題の影響を受ける唯一のアプリケーションであるため、単純なクライアント構成の問題を軽視しました。[ツール] > [インターネット オプション] > [一時ファイル] > [設定] ですべてのオプションをテストしましたが、動作に変化はありませんでした。

他にどのようなクライアント構成オプションを検討する必要がありますか?

編集 2 - 解決策

受け入れられた回答により、HTML がクライアント側スクリプトから生成されたときに IE6 が画像の複数のコピーを要求するという既知の問題を検索するようになりました - http://support.microsoft.com/default.aspx?scid=kb;en-us; 319546 .

記事 (この動作は「仕様によるもの」であると述べています) は、必要な画像を目に見えない DIV に読み込むことで、事前にキャッシュする回避策を提案しています。

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

これはうまくいくようです。セッションの途中でブラウザーのキャッシュをクリアしても問題を再現できなくなりました。Fiddler のトレースでは、各画像が 1 回だけ要求されていることが示されます。

以前は気づいていなかった注意点が 1 つあります。IE キャッシュでは大文字と小文字が区別されるため、キャッシュされた画像は、非表示の DIV で指定されたファイル名の大文字と小文字がページの他の場所で使用されているものと一致する場合にのみ使用されます。

4

2 に答える 2

1

これは、ブラウザが同じリソースに対して複数のリクエストを行う IE6 のバグのようです。たとえば、コンテンツがリスト内で 20 回繰り返される小さなアイコンの表示を要求する場合、その画像を 1 回取得するだけでなく、20 回取得しようとします。OK 19 の応答は 304 Not Modified ですが、それでもサーバーへの 19 回の余分な往復です。

私は過去に、この過度の要求で、最終的には満たされていない要求が多すぎることを発見しました。その時点で、少なくともしばらくの間、他のページに対するサーバーへの追加のリクエストでも、応答を得るのに苦労します。

これがあなたのケースで起こっているかどうかはわかりません.これを調べる1つの方法は、代わりにIE7を使用して同じ問題が発生するかどうかを確認することです.このバグはIE7で修正されました.

編集:問題が私が言及していたバグであることが確認されたので、「短い時間の遅延」へのKB参照にも注意する必要があります。根本的な問題は、新しくフェッチされた画像を再利用するために、現在の JavaScript のチャンクが完了するまで延期される作業をブラウザが実行する必要があることです。「短時間の遅延」以上のものが必要であり、非同期のアプローチが必要です。

私は display:none DIV アプローチを使用して画像をプリフェッチしましたが、これは AJAX スタイルの作業に適しています。ただし、ウィンドウの onload イベント中またはその前にコードを実行している場合、このコードに画像を追加するときにまだ問題があります。onload イベントの完了後にさらにコードを実行するには、setTimeout が必要です。

于 2008-11-25T22:11:05.733 に答える
0

クライアント側でのキャッシュ設定の微調整に注意を向けることができます。画像がサーバーによって送信されている場合、IIS の問題である可能性は低いです。画像の HTML がブラウザに送信されている場合、ASP の問題ではありません。それはクライアントを離れます。

プロキシは問題の一部を軽減している可能性があり、IE6 が画像をキャッシュする方法を決定する方法などの要因になっている可能性があります。

于 2008-11-21T22:20:36.277 に答える