1

私は以前にオンラインニュースポータルを構築しましたが、それは私にとってはうまく機能していますが、ホームページが少し遅いと言う人もいます。考えてみると、その理由がわかります。

サイトのホームページが表示されます

  1. 見出し
  2. スポットニュース(サブヘッドライン
  3. 写真のあるスポット
  4. ほとんどのニュースを読む(タイトルとして)
  5. 最もコメントされたニュース(タイトルとして)
  6. 各ニュースカテゴリから5つのニュースタイトル(スポーツ、経済、地域、健康など、合計11)

現在、これらはそれぞれデータベースへの個別のクエリです。私はtableadaptersデータセットとdatatables(標準のデータアクセスシナリオ)を持っているので、ヘッドラインについては、テーブルアダプターによってデータテーブルを返すニュースクラスのビジネスロジックを呼び出します。それ以降は、データテーブルをコントロールにバインドするだけで使用するか、(ほとんどの場合)オブジェクトがデータテーブルを(ニュースの)リストに変換して、そこから使用します。

上記のそれぞれに対してこれを行うことは、しかしうまくいくようです。少なくとも、大きな負荷はかかりません。しかし、もっと良い方法があるのだろうかと思います。

たとえば、私が上で説明したプロジェクトは非常に動的なWebサイトであり、ニュースは24時間ノンストップで代理店から到着したときに挿入されます。したがって、この場合のキャッシュは適切に聞こえない可能性があります。しかし一方で、地元の新聞のために別の同様のプロジェクトがあることを私は知っています。サイトは1日1回のみ更新されます。この場合:今日挿入されたすべてのニュースアイテムを含むデータテーブルを返すクエリを1つだけ実行し、そのデータテーブルをクエリして、ヘッドライン、スポット、その他のアイテムをサイトのそれぞれの場所に配置できますか?または、周りにもっと良い選択肢がありますか?私は他の人が最も効率的な方法で同様のタスクを実行する方法をたださまよっています。

4

3 に答える 3

2

パフォーマンスが低下している場合、最初のステップはいじり始めることではありません。コードのプロファイルを作成します。それが遅い理由を正確に調べてください。ページの送信、レンダリング、または実際にページを動的に生成する際の速度低下はありますか?1つのクエリに時間がかかりすぎていませんか?

ボトルネックがどこにあるかを正確に把握し、その中心にある問題を攻撃します。

コンテンツがかなり迅速に更新される場合でも、キャッシュは非常に良いアイデアです。キャッシュメカニズムがインテリジェントである限り、生成時間を大幅に節約できます。フォーラムではなくニュースポータルやブログの場合、キャッシュシステムを使用するとパフォーマンスが大幅に向上する可能性があります。

于 2009-04-11T06:41:45.273 に答える
2

FireBugを使用して、読み込みに時間がかかっている要素を見つける必要があると思います。大きな画像はショーを台無しにすることがあります(そして画面上の画像のサイズは必ずしもダウンロードサイズに相対的ではありません)。

次に、Yahoo FirefoxプラグインYSlowをダウンロードして、速度の遅いスクリプトがあるかどうかを調査します。

しかし、Firebugはあなたに最高のレビューを与えるはずです。Firebugをロードした後、[ネット]タブをクリックして、ページ内の各要素のロード時間を表示します。

于 2009-04-11T07:35:19.810 に答える
1

遅延がDBに起因することがわかった場合は、テーブルをチェックし、テーブル内のデータの量に応じて、適切にインデックスが作成されているか、クラスター化されているか、その他必要なものがあることを確認してください。また、動的クエリを使用している場合は、代わりにストアドプロシージャを試してください。

1つのデータベースリクエストで複数のクエリを実行したい場合は、それが可能です。最初は、すべてのクエリが実行されるまでデータを表示せず、他の問題がなければ、少なくとも、クエリごとにDBに再度アクセスする時間を節約できます。データセットはテーブルのコレクションを保持し、同じリクエスト内の複数のクエリによって生成できます。

ASP.NETは、キャッシュ用の非常に優れたメカニズム(HttpContext.Cache)を提供します。これをラップアラウンドして、使いやすくすることができます。キャッシュされたオブジェクトに寿命を設定できるため、記事やタイトルが最新でないことを心配する必要はありません。

このWebサイトでWebFormsを使用している場合は、ページの読み込みを少し速くするためだけに、実際にはそれらを必要としないコントロールのViewStateを無効にします。ページの読み込みを高速化するための他の多くの調整や変更は言うまでもありません(gzip、スクリプトの最小化など)。

それでも、それを行う前に、Anthonyが提案したように行い、コードのプロファイルを作成してください。本当の問題が何であるかを調べてください。

于 2009-04-11T07:12:02.037 に答える