- PR -

ASP.NET Webアプリ開発 ページ表示の遅さについて

1
投稿者投稿内容
じぃ
常連さん
会議室デビュー日: 2005/09/12
投稿数: 23
投稿日時: 2006-02-23 15:53
あるWebページより、ボタンが押された時に、C#のサーバコードよりRegisterClientScriptBlockを使い、クライアントコードを発行し、
window.openを行っています。
その際、window.openにて指示されたページが一時期真っ白な
状態となり、表示が遅いような状態が何度か連続して
起こってしまいます。
(最悪、真っ白な状態のまま、表示されない場合もあります。)

調べても、どのように解消したらよいのか、分からない状態です。
(調べたのは、SmartNavが関連しているかもしれないという内容です。)

表示しようとしているページには、プログレスバーのような画像と、
ラベルが2つと、ボタンが一つ存在する状態です。

.Net FrameWork 1.1
Windows advanced server 2000

OnTimeでページを表示するにはどのように対処したらよいか、
解決方法をご存じの方、もしくは、参考となるページを
ご存じの方は教えて下さい。

※補足※
window.openで表示しようとしているページは、処理を行っている
ことを知らせる為のページで、そのページが表示されている
間は、サーバーコードが処理を行っている状態です。
(終了後は、再度window.openで表示されたページに終了しました
との通知を行うような流れになっています。)

また、SmartNavをtrueやfalseの設定は全くしていないので、
SmartNavについては、関係ないのではないかとも考えています。




[ メッセージ編集済み 編集者: じぃ 編集日時 2006-02-23 16:21 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-02-23 22:23
 クライアントからのリクエスト、サーバで実行するコード、クライアント上でのページオブジェクト、という3つのオブジェクトの生存期間を意識して、やっている処理のロジックを記述してください。

 おそらく、図を描いた方がいいと思います。

ご説明されている範囲で、私が想像した処理:
コード:
クライアント
  あるページ表示
    ↓
  クリック→→→→→→→サーバ
              ↓
            script 組み立て
              ↓
    ↓←←←←←←←←レスポンス
  スクリプト実行
    ↓
  window.open→→→→→→↓
             処理中
              ↓
   この間        ↓
   真っ白        ↓
              ↓
 “終了しました”←←←←処理終了


このようになっている場合、“真っ白”なのは当たり前なのは、おわかりいただけるでしょうか?
 サーバの「処理中」の部分でスレッドを分岐し、リクエストを受け取ったスレッドはすぐさまレスポンスを返してやる必要があります。
 その後、ポップアップしたページは定期的にサーバへお伺いをたて、そのリクエストを受け取ったスレッドは、実行中のスレッドから実行状況を聞き出し、クライアントへ返してやります。
 このため、サーバ(実行中のスレッド)からアクションを起こしてクライアントに「終了しました」と表示することは出来ません。

ご参考→ASP.NET 1.1 長い処理中に「お待ちください」画面を表示する

〆 written by Jitta@わんくま同盟 on 2006/02/23
□ Microsoft MVP for Visual Developer ASP/ASP.NET October, 2005 - September, 2006
じぃ
常連さん
会議室デビュー日: 2005/09/12
投稿数: 23
投稿日時: 2006-02-24 10:20
Jittaさん、投稿ありがとうございます。
また、返信が遅くなり申し訳ありません。

Jittaさんに投稿して頂いた内容を一度検討し、サンプル等を作成し、試してみたいと思いますので、その後再度投稿させて頂きます。

また、私の説明が悪かったのですが、処理の流れとしては、以下のようになっています。

コード:
-------------------------------------------------------------------------------

クライアント       サーバー(ページAのサーバコード)

  あるページ(A)表示
    ↓
  クリック→→→→→→→→↓
(Javascriptのonclick) ↓
    ↓         ↓
  スクリプト実行     ↓    
    ↓ ↓
  window.open       ↓
★ (処理中)      処理中
   ページB       ↓
    ↓        ↓
    ↓         ↓
    ↓          ↓
表示中 ↓        処理終了
    ↓          ↓
    ↓       script 組み立て
    ↓         ↓
    ↓←←←←←←←レスポンス
  スクリプト実行     ↓
    ↓  ↓
  window.open       ↓
◆1”終了しました。”   ↓
 (ページB)       ↓
              ↓
              ↓
 処理後の結果表示←←←←←←
 (ページA) ◆2

◆1と◆2はほぼ同時です。       
★の箇所で、ページが真っ白となってしまい、
表示されていない状態となります。
時には真っ白のままで◆1の状態のみ表示されます。
※真っ白とならずに、★で画面がしっかり表示され、
◆1もしっかり表示されることもあります。

また、◆1でボタンがVisible=trueとなっており、
(それまではfalse)ボタンを押下したら、ページB
が閉じ、Aのみ表示されるという状態になります。

また、ページBの表示中の時は、画像が動いており、(見た目プログレスバー
のようなものであり、決してプログレスバーではないです)
ラベルには「処理中」と表示されています。
・・・この画像は、動いてますよ!伝える為だけのものです。

私なりに、必死に考えて作ったものですが、
この処理の流れで問題が解決できる箇所がありましたら
再度お願い致します。
(同時に、多少時間がかかると思いますが、教えて頂いた内容も
試して見ます。)     

※他、説明が不足箇所がありましたら、指摘を
お願い致します。

-------------------------------------------------------------------------------

Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-02-24 22:55
[ code][ /code]([ の後のスペースは取って)を使うと、そのタグの中は等幅フォントが使われます。
(で、コード:---- と入る)
コード:
ページA
 ↓
クリック
 ↓
window.open →分岐→↓
 ↓        ↓
ポスト→(1)    ページB   (1) →→サーバ
          処理中      ↓
          表示      処理開始
          ↓        ↓
          ↓        ↓
          ↓        ↓
          ↓       処理終了
          ↓       script作成
          ↓        ↓
 ↓←←(2)     ↓    (2)←レスポンス
child close →→→閉じる
 ↓
alert('終了しました')


こう、かな?レスポンスや、ポストを分岐することは出来ないので。

 これをやると、ページAが「サーバから応答がありません」という、ブラウザが持つエラー画面になる可能性があります。

 ASP.NET の構成ファイルで、プロジェクトがデバッグとなっていると、並列処理がされないと、どこかに書いてあった気がするんだけれど、探せない。。。

〆 written by Jitta@わんくま同盟 on 2006/02/24
□ Microsoft MVP for Visual Developer ASP/ASP.NET October, 2005 - September, 2006
1

スキルアップ/キャリアアップ(JOB@IT)