5

SQLサーバーからデータを取得している間、「ページの読み込み...お待ちください」というオーバーレイを表示しようとしています。これにはBlockUIプラグインを使用したいと思っていますが、何でもかまいません。site.masterを使用したASP.NETページがあります。プラグインは機能しますが、何を試しても、ページが完全に読み込まれた後にのみ表示されます。

待機の大部分は、Global.asaxファイルで行われる作業にかかっています。Session_Startセクションには、データを返し、ページのドロップダウンメニューにデータを入力する関数があります。これが完了するまでに約20秒かかります。

では、ページが完全に読み込まれる前にオーバーレイを表示するには、何をする必要がありますか?ヘルプやアドバイスをありがとう。

4

2 に答える 2

14

ページをロードする場合、プラグインはトリックを行いません

ページが読み込まれるまでブロックする場合は、コンテンツブロッカー要素をページの一部にし、ページの読み込み後に常に実行されるプラグインによって生成されないようにする必要があります。ある時点か別の時点で。

<body>
   ...
   <!-- make it last -->
   <div id="blocker">
       <div>Loading...</div>
   </div>
</body>

そして、CSSに残りを任せます

#blocker
{
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    opacity: .5;
    background-color: #000;
    z-index: 1000;
}
    #blocker div
    {
        position: absolute;
        top: 50%;
        left: 50%;
        width: 5em;
        height: 2em;
        margin: -1em 0 0 -2.5em;
        color: #fff;
        font-weight: bold;
    }

そして、ブロッキングをクリアするJavascript:

$(function(){
    $("#blocker").hide();
});

これは、上記のコードを使用した実際の例です。非常に単純なドキュメントであるため、タイムアウト時にブロッカーを削除します。

重要なお知らせ

しかし、おそらくあなたはこれを正しい方法で理解していません。別の話なので、サーバーにポストバックするときに既存のページをブロックしたいと思うかもしれません。この場合、プラグインで十分であり、unloadウィンドウイベントとディスプレイブロッカー要素で実行する必要があります。これにより、既存のページがデータをポストバックしている間、およびブラウザーが新しいコンテンツの受信を開始する前にブロックされます(これは前に示した手法でブロックできます)。

問題はブラウザがサーバーの応答を待っていることのようです

自分でピンポイントで特定できないため、わかりにくいです。しかし、問題はブラウザがサーバーの応答を待っていることだとしましょう。そして、あなたが言うように、セッションのロードは遅いです。2つのこと:

  1. DB呼び出しを最適化して、これらのメニューデータをより迅速に取得します(本当に時間がかかる場合は、プロファイラーで確認しましたか?)
  2. 読み込み中のコンテンツを表示し、リダイレクトを実行する 静的なデフォルトのHTMLページを用意します。
    • METAリフレッシュタグを使用する-古いブラウザやjavascriptのないブラウザにとってより安全
    • javascript-最近のページに適しています。特に、ページでJavascriptを使用しているため(__doPostback誰でも)

あなたの最善の策は両方の組み合わせであるようです。しかし、一度に一歩ずつ進んで、それがより良いかどうかを確認してください。

もう一つ。最初の応答(アプリケーションの開始)を待つのに時間がかかることを知っています。それは多くのページでそうします。しかし、データはまだ表示されていないため、ユーザーはデータに害を及ぼすことができないため、通常、人々は実際には気にしません。ユーザーが同じボタンを数回クリックする傾向があるため(たとえば、データを作成/更新する場合)、ページを使用するときに応答時間が長い場合はさらに悪化します。それははるかに有害です。

また、Asp.netアプリケーションの起動とセッションの読み込みを混同している可能性があります。アプリケーションを最初に起動するときは、アプリケーションをコンパイルして起動する必要があるため、サーバーが応答するのにはるかに長い時間がかかります。これにはかなりの時間がかかる場合があります。そのためのいくつかの回避策があります。これには、アプリケーションのリサイクル時間の変更や、アプリケーションが非アクティブな状態が長く続く間、アプリケーションを存続させるためだけにアプリケーションに小さな要求を行う個別のハートビートサービスが含まれます。

また、開発中のページがデスクトップマシンで実行されていることも考慮に入れる必要があります。サーバーが高速かどうかを知っておく必要があります。

したがって、おそらくそれはセッションの作成ではなく、アプリケーションの起動です。ブラウザでページを開いてページが完了するのを待ってから、ブラウザを閉じてもう一度開いて(新しいセッションが作成されるように)、アプリケーションにアクセスして、違いを確認する必要があります。読み込みが速い場合は、セッションの障害ではなく、.netFrameworkがアプリケーションをコンパイルする必要がある場合のアプリケーションの起動です。

最初に問題を定義してから、軽減を開始します。

于 2011-10-26T10:58:39.580 に答える
1

あなたはCSSでそれを行うことができます。すべての上に、絶対に配置されたdivを作成します。そのdiv内に、「読み込み中」メッセージを書き込むことができます。ページの読み込みが完了したら、javascriptを使用してそのdivにdisplay:noneを設定できます。

于 2011-10-26T11:00:42.247 に答える