データ アクセス ASP.NET
-
09-09-2019 - |
質問
以前オンライン ニュース ポータルを構築しましたが、それはうまく機能していましたが、ホームページが少し遅いという人もいます。そう考えると、その理由が見えてきました。
サイトのホームページが表示されます
- 見出し
- スポットニュース(サブヘッドライン)
- 写真付きスポット
- よく読まれたニュース (タイトルとして)
- 最もコメントされたニュース (タイトルとして)
- 各ニュース カテゴリから 5 つのニュース タイトル (合計 11 件)スポーツ、経済、地元、健康など。)
現在、これらはそれぞれデータベースに対する個別のクエリです。tableadapters データセットとデータテーブル (標準データ アクセス シナリオ) があるため、見出しの場合は、tableadapter によってデータテーブルを返すニュース クラスのビジネス ロジックを呼び出します。そこからは、データテーブルをコントロールにバインドするだけで使用するか、(ほとんどの場合) オブジェクトがデータテーブルをたとえば (ニュースの) リストに変換して、そこから利用します。
ただし、上記のそれぞれに対してこれを実行すると、うまく動作するようです。少なくとも大きな負荷はかかりません。しかし、もっと良い方法があるのではないかと考えています。
たとえば、上で説明したプロジェクトは非常に動的な Web サイトであり、ニュースは代理店から 24 時間ノンストップで届くたびに挿入されます。したがって、この場合のキャッシュは良くないように思われるかもしれません。しかしその一方で、地元の新聞社でも同様のプロジェクトがあることを私は知っています。サイトは1日1回のみ更新されます。この場合:今日挿入されたすべてのニュース項目を含むデータテーブルを返し、そのデータテーブルにクエリを実行して、ヘッドライン、スポット、その他の項目をサイト上のそれぞれの場所に配置するクエリを 1 つだけ実行できますか?それとももっと良い代替手段があるのでしょうか?他の人が同じようなタスクをどのようにして最も効率的に実行しているのかをただ眺めているだけです。
解決
どの要素の読み込みに時間がかかっているかを調べるには、FireBug を使用する必要があると思います。大きな画像が番組を台無しにする場合があります (また、画面上の画像のサイズは、ダウンロード サイズと必ずしも比例するとは限りません)。
次に、Yahoo Firefox プラグイン YSlow をダウンロードして、速度を低下させるスクリプトがあるかどうかを調査します。
ただし、Firebug は最高のレビューを提供してくれるはずです。Firebug をロードした後、「ネット」タブをクリックして、ページ内の各要素のロード時間を表示します。
他のヒント
パフォーマンスが低い場合、最初のステップは、あれこれいじることではありません。 コードのプロファイリングを行います。 遅い理由を正確に調べてください。ページの送信、レンダリング、または実際にページを動的に生成する際に速度が低下しているのでしょうか?1 つのクエリに時間がかかりすぎますか?
ボトルネックがどこにあるのかを正確に特定し、問題の核心に取り組みます。
コンテンツがかなり早く更新される場合でも、キャッシュは非常に良いアイデアです。キャッシュ メカニズムがインテリジェントである限り、生成時間を大幅に節約できます。フォーラムではなくニュース ポータルやブログの場合、キャッシュ システムを使用するとパフォーマンスが大幅に向上する可能性があります。
遅延が DB に起因していることがわかった場合は、テーブルをチェックし、インデックスが適切に作成されているか、クラスター化されているか、またはテーブル内のデータ量に応じて必要なものがすべて揃っているかどうかを確認してください。また、動的クエリを使用している場合は、代わりにストアド プロシージャを試してください。
1 つのデータベース リクエストで複数のクエリを実行したい場合は、それが可能です。最初は、他の問題がない限り、すべてのクエリが完了するまでデータは表示されないため、少なくともクエリごとに DB に再度アクセスする時間を節約できます。DataSet はテーブルのコレクションを保持し、同じリクエスト内の複数のクエリによって生成できます。
ASP.NET には、ラップアラウンドして使いやすくすることができる、キャッシュ用の非常に優れたメカニズム (HttpContext.Cache) がすでに提供されています。キャッシュされたオブジェクトの有効期間を設定できるため、記事やタイトルが最新でないことを心配する必要はありません。
この Web サイトで Web フォームを使用している場合は、ページの読み込みを少し速くするためだけに、実際には必要のないコントロールの ViewState を無効にします。ページの読み込みを高速化するための他の多くの調整や変更 (gzip 圧縮、スクリプトの最小化など) は言うまでもありません。
それでも、それを行う前に、次のようにしてください アンソニーが提案した コードをプロファイリングします。本当の問題が何なのかを見つけてください。