2

クライアントの1つが使用する管理インターフェイスがあり、Webインターフェイスを介してプロセスが開始されると、サーバーはバックエンドサーバーで大量のレコードを処理します。次に、Webページは単純なHTML(AJAXやその他のJSではない)の更新を使用して更新を提供し、次のようになります。

Processing All Records: 
000000 to 000099: ....................................................................................................
000100 to 000199: ....................................................................................................
//... More Records Processed Here ...
009700 to 009799: ....................................................................................................
009800 to 009899: ..............................
Data processing complete: 9830 total records processed

この処理には1時間以上かかる場合があります。私が使用しているブラウザー(IEおよびCrome)では、ページは更新を受信し続け、処理中に更新を表示します。 問題は、私のクライアント(複数のブラウザーとコンピューターを使用)の場合、数分後に画面に更新が表示されなくなり、処理が完了するまで待っても(ブラウザーを一晩開いたままにする)、彼が「データ処理完了」通知を受信することはありません。基本的に、サーバー上で処理が続行され、プロセスが完了したとしても、彼のブラウザーは単にタイムアウトします。

HTML出力(従来のASPを使用...私は知っています、ugg)は、Response.Write(".")各レコードが処理された後、単純な方法で実行されます。標準のHTML<head> </head> <body> </body>タグを除いて、他のフォーマットは適用されず、すべてのResponse.Writesは本文内で実行されます(したがって、ブラウザーは本文タグ以外の終了タグを待機しません)。

コードを書き直して、更新のためにいくつかの凝ったJSおよびAJAX呼び出しを使用したり、電子メールの更新を伴う非同期サービスに移行したりできることに気付きましたが、コードをあまり変更する必要のない最も簡単なソリューションを見つけたいと思います。

だから、私の質問は、私がテストしたすべてのブラウザがデータを受信し続けている間、彼のブラウザ/ネットワークのどの設定が彼のブラウザをタイムアウトさせるのかということです。

それが役立つ場合は、出力される生のHTMLを次に示します。

<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<LINK rel="stylesheet" type="text/css" href="\css\normal.css">
</head>
<body>
Initiating data retreival at: 8/23/2012 11:02:59 AM<br>
<hr>
Processing All Records: 
<br>000000 to 000099:....................................................................................................
<br>000100 to 000199:....................................................................................................
<br>000200 to 000299:....................................................................................................
<!-- More Lines Here -->
<br>009800 to 009899:..............................<hr>
Data import complete: 9830 total records processed<br>
</body>
</html>
4

2 に答える 2

1

これを行うための信頼できる明確な方法はありません。これは、ブラウザ、ネットワーク接続、ルーター、オペレーティングシステムに完全に依存しているためです。幸運を祈る代わりに、状況を制御してください。

最も簡単な方法は、アイテムの小さなバッチの処理を行う1つのスクリプトをリファクタリングし、完了したと報告されるまでAJAXでそのスクリプトをフェッチし続ける(オフセットを維持する)ことです。これは、あなたが知っている限り、将来変更される可能性のある魔​​法のテクニックを見つけることを期待するよりも、より堅牢で明確に定義されています。

于 2012-08-23T17:40:48.963 に答える
0

ブラウザは、キャッシュに関してRAMと共有メモリに依存しています。テーブルベースの制限された幅と高さにコードを試してください

<table style='table-layout:fixed'>

これにより、ブラウザは、新しい行を追加するたびに幅を再計算しようとせずに、テーブルをレンダリングできます。

また、GTKベースのブラウザは、たとえばjuniper-browser、NetFrontなどの目的に役立ちます。

于 2012-08-23T17:40:34.407 に答える