0

これが私のモデルです:

public class Pitchermodels
{
InsideEdEntities ieEntity = new InsideEdEntities();
PitcherProfileEntities ppEntity = new PitcherProfileEntities();

Pitcher5model p5Mod = new Pitcher5model();
Pitcher6model p6Mod = new Pitcher6model();

public Pitcher5model pitcher5(long? _pid)
    {
        if (p5Mod.exist(_pid) == true)
        {
            p5Mod.playerinfo = ieEntity.ppsproc_playerinfo(_pid).FirstOrDefault();
            p5Mod.ListP5T1 = ppEntity.ppsproc_newP5_T1(_pid).ToList();
            p5Mod.ListP5T2 = ppEntity.ppsproc_P5_T2(_pid).ToList();
            return p5Mod;
        }
        else
        {
            return null;
        }
    }

 public Pitcher6model pitcher6(long? _pid)
    {
        if (p6Mod.exist(_pid) == true)
        {
            p6Mod.playerinfo = ieEntity.ppsproc_playerinfo(_pid).FirstOrDefault();
            p6Mod.ListP6T1 = ppEntity.ppsproc_P6(_pid).ToList();
            return p6Mod;
        }
        else
        {
            return null;
        }
    }
}

これが私のコントローラーです:

public ActionResult AllPitchers(long? _pid)
    {
        Pitchermodels pMods = new Pitchermodels();
        return View(pMods);
    }

そして、ここに私の見解があります:

@model MVCdodgersplayerinfohub.Models.Pitchermodels
@{
    Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>All Pitcher Reports</title>
<link href="~/LA.ico" rel="shortcut icon" type="image/x-icon" />

</head>
<body>
    <div>
        @Html.Partial("Pitcher5",Model.pitcher5(Convert.ToInt32(Request.QueryString["_pid"])))
    </div>
    <p style="page-break-before:always;"></p>
    <div>
        @Html.Partial("Pitcher6",Model.pitcher6(Convert.ToInt32(Request.QueryString["_pid"])))
    </div>
</body>
</html>

あまり良くない点の 1 つは、読み込みに 2 分以上かかることです。ユーザーには、読み込まれていないように見えます (マウスが回転するだけです)。プログレスバーを入れることは可能ですか?ほとんどのユーザーはプログレス バーを気に入っていると思います。

4

2 に答える 2

2

ブラウザの動作について知っておく必要があることがいくつかあります。

  • ページを開いている場合、接続が閉じられるまで何も表示されません。画像やその他のものはブラウザによって後で解析されるため、最初のページが開いた後にそれらが開きます
  • 受信しているデータのサイズがわからない限り、開いているページの現在の状態を判断する方法はありません。そのためには、ページがデータの送信を開始する必要があり、データの大きさを正確に知る必要があります。たとえば、ファイルにはデータのサイズが設定されているため、Javascript を使用してプログレス バーを添付できます。ブラウザがまだ応答を待っている間に、すべてのデータがサーバー上で処理されます。
  • フロントエンド (html 側) で何らかの追跡が必要になります。これは、少なくとも、トランザクションを追跡できるページの基本的なシェルを開く必要があることを意味します。これは、AJAX を使用して Web サイトの一部をロードし、これが開くのにかかる時間を大まかに見積もることによって実行できます (そして、これを時間に関連するプログレス バーに適用します)。プログレス バーをロードされたセグメントに分割する (つまり、1/4 セグメントがロードされ、プログレス バーが 1/4 になる) ことは、このセットアップで機能します。

ここで私が見ることができる本当の問題は、あなたが迅速な解決策を探していて、部屋で象を撃とうとしていないということです. 2 分間は Web サイトの読み込みに非常に長い時間です。これは、その時間を支配しているコントローラーで何かが起こっていることを意味します。HTML の送信にかかる時間は、今日のインターネットでは非常に高速であるため、これが問題の原因ではありません。問題を見つけるのに役立ついくつかの手順を次に示します。

  • データベース呼び出しを見てください。すでに持っている可能性のあるデータに対して、データベースを複数回呼び出していますか?
  • ロードしているデータが非常に大きい。必要な列だけではなく、テーブル全体をロードしていますか? 非常に大きなテーブルに参加していますか?
  • これがたとえばデータをロードするファイルに依存している場合、そのファイルを使用している何か他のものがあり、プログラムはアクセスを待っていますか?
  • あなたのコレクションを見てください。並べ替え、並べ替え、並べ替えを繰り返していますか? 異なるコレクション タイプ間で変換していますか (つまり、LinkedList から Array から List から別のものへ)? C# を使用して並べ替えようとしている大きなコレクションがある場合、データベースのクエリなど、別の場所で並べ替えることができますか?
  • どのような状況でページが遅くなりますか? 同じ量のデータがあるにもかかわらず、はるかに速く開くページはありますか? その場合、ボトルネックは非常に特定の場所で発生している可能性があります。
  • これを遅いサーバーで実行していますか。家に?これは、パフォーマンスに大きな影響を与える可能性があります。

これらはほんの一部です。2 分間は長すぎます。単純なデータ収集をやりくりする単純な Web サイトの場合、たとえ忙しい日であっても、根本的な問題がなければ 2 分に達することはありません。Web サイトの使用率が高く、コードが遅い場合は、最も一般的なコード セグメントを調べて、まずそれらを最適化してみてください。次に、あまり使用されていない他のコード セグメントの最適化に進みます。

Web サイトの大部分を最適化した後でもパフォーマンスに多くの問題がある場合は、部分ビューで AJAX を使用することを検討してください。全体的なパフォーマンスが向上するわけではありませんが、ウェブサイトをセグメントで開くことができ、ページがまだロード中であることをユーザーに伝える視覚的なフィードバックをより多く提供できます.

于 2013-09-27T06:12:46.823 に答える
0

はい。コンポーネントの読み込み時間に待機ポップアップを使用できます。たとえば。待機中のポップアップ コンポーネントを使用する場合は、.ajaxStart()イベントでポップアップを呼び出し、 AjaxCompleteイベントで待機中のポップアップを閉じます。

詳細については、以下の ajax イベントを確認してください。

http://api.jquery.com/category/ajax/global-ajax-event-handlers/

于 2013-09-27T06:16:49.667 に答える