2009-04-24 15 views
5

Webページを完全に読み込むのにかかる時間を測定するためにWindowsフォームアプリケーションを構築する必要があります。そのための最善のアプローチは何ですか?ウェブページの応答と読み込み時間を測定するにはどうすればよいですか?

この小さなアプリケーションの目的は、Webサーバーまたはデータベースサーバーに問題が発生しているかどうかを事前に知るために、Webサイトの一部のページを所定の間隔で監視することです。

追加情報:私は商用アプリを使用することはできません

、私は、データベースに結果を保存し、この情報に基づいて一連のレポートを作成することができるようにするために、これを開発する必要があります。

ウェブリコストの解決策は、私が使用することになっていると思われるアプローチのようですが、ページ(画像、CSS、JavaScriptなど)を完全に読み込むのにかかる時間を測定できるのは良いことです。どのようにそれを行うことができる任意のアイデア?あなたはこれらのようなソフトウェアを使用することができます

答えて

16

基本的なページソースを取得するのにかかる時間を記録したい場合は、ストップウォッチの周りにHttpWebRequestをラップすることができます。例えば。

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(address); 

System.Diagnostics.Stopwatch timer = new Stopwatch(); 
timer.Start(); 

HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

timer.Stop(); 

TimeSpan timeTaken = timer.Elapsed; 

ただし、画像などの余分なコンテンツをダウンロードする時間は考慮されません。

[編集]これに代わる方法として、Webブラウザーコントロールを使用して、.Navigate()とDocumentCompletedイベントを実行してから発砲するまでの時間を測定することができます。私は、これには余分なコンテンツのダウンロードとレンダリングの時間も含まれると思います。しかし、私はWebBrowserコントロールを大量に使用しておらず、同じページを繰り返し要求している場合にキャッシュをクリアする必要があるかどうか分かりません。

+1

+1 - 私はこのアイデアに奇妙に満足しています - 笑 –

+0

偉大な心は似ています:) –

+0

私も!私はおそらく私のコードでそれを使用するでしょう、私は余分なコンテンツの測定は精度で実装することは非常に難しいだろうと思います。 – holiveira

1

このような何かはおそらく正常に動作します:

System.Diagnostics.Stopwatch sw = new Stopwatch() 
System.Net.HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://www.example.com"); 
// other request details, credentials, proxy settings, etc... 

sw.Start(); 
System.Net.HttpWebResponse res = (HttpWebResponse)req.GetResponse(); 
sw.Stop(); 

TimeSpan timeToLoad = sw.Elapsed; 
0

あなたはFirefoxがhttp://getfirebug.comで発見Firebugの拡張機能をインストールし使用している場合。そこから、[ネット]タブを選択すると、ページ上のすべての負荷/応答時間を知ることができます。

3

どのような頻度で実行する必要があるのか​​によって、ユーザーが内部的にWebブラウザを使用しているため、Selenium(Webアプリケーションの自動テストツール)を試すことができます。私は、.NETアプリケーションからSelenium APIを使用することはあまり難しくないと思います(ユニットテストでもSeleniumを使用することができます)。

ウェブブラウザがすべてのWebページ要素(JS、CSS、画像、iframeなど)をダウンロードしたときにいくつかの特殊性があるので、この種の測定は難しいです。この種の特殊性はこの優秀な本(http://www.amazon.com/High-Performance-Web-Sites-Essential/dp/0596529309/) 。

手作りの解決策は、おそらくあまりにも複雑すぎるコードであるか、それらの特殊性のいくつかに出席できないでしょう(htmlのダウンロードに費やされた時間を測定することは十分ではありません)。

+0

+1セレン! –

2

あなたが考慮する必要があることの1つはキャッシュです。キャッシュからではなく、サーバーからダウンロードする時間を測定していることを確認してください。クライアント側のキャッシュを無効にしておく必要があります。

また、サーバー側のキャッシュに注意してください。午前9時にペースをダウンロードして15秒かかるとしたら、9時05分にダウンロードして3秒、最後に10時にもう15秒かかります。

何が起こっているかは、9にキャッシュ内に何もなかったためにサーバーがページを完全にレンダリングする必要があったということです。 9時05分にページがキャッシュに入っていたため、再度レンダリングする必要はありませんでした。最後に10でキャッシュがクリアされたので、ページをサーバーで再度レンダリングする必要がありました。

FireFox用のアドインYSlowをチェックアウトすることをお勧めします。これは、ページ上の各アイテムのダウンロード時間を詳細に分析するためのものです。

1

私は一度HTMLページそれが参照するオブジェクト(画像、アイフレームなど)をダウンロードし、実験programを書きました。

HTTPネゴシエーションがあるように見えるより複雑なので、一部のWebクライアントではイメージのSVGバージョンとPNGのものが大きく異なります。 <object>の場合も同じです。

1

私はしばしば非常によく似た問題に直面しています。しかし、私はわずかに異なるアプローチを取っています:まず第一に、なぜ静的なコンテンツを気にする必要がありますか?私はもちろん、画像のために2分または2秒かかる場合、それはユーザーにとって重要ですが、それは私が完全にページを開発した後私の問題ではないです。これらのことは、開発中やデプロイメント後には静的コンテンツではなく、通常は物事を遅らせる動的なものです(最後の段落で述べたように)。次のことは、なぜそんなに多くのことが変わらないと信じていますか?あなたのネットワーク上の誰かがP2Pプログラムを起動した場合、ルーティングが間違っているか、またはあなたのISPにいくつかの問題があります。あなたのserver-statsは確実にダウンします。そして、あなたのベンチマークは、世界各地に住んでいるユーザーや、別のISPを使用しているだけのユーザーに対して何を言いますか?私が言っているのは、あなたがあなたの視点をベンチマークしているということですが、それはサーバーのパフォーマンスについてはあまり言いませんね。

サイト/サーバー自体がロードに要した時間を判断させてみませんか?ここではPHPで書かれた小さな例です。

function microtime_float() 
{ 
    list($usec, $sec) = explode(" ", microtime()); 
    return ((float)$usec + (float)$sec); 
} 

function benchmark($finish) 
{ 
    if($finish == FALSE){ /* benchmark start*/  
    $GLOBALS["time_start"] = microtime_float(); 
    }else{ /* benchmark end */  
    $time = microtime_float() - $GLOBALS["time_start"]; 
    echo '<div id="performance"><p>'.$time.'</p></div>'; 
    } 
} 

それはページの最後に、それは(CSSで隠された)を構築するのにかかった時間を追加します。数分おきにこれを正規表現でgrepし、解析します。この時間が上がると、何か間違っていることがわかります(静的コンテンツを含む!)、RSSフィードを介して私は情報を得て行動することができます。

私たちはfirebugを使って、すべてのコンテンツを読み込んでいるサイトの「正常な」パフォーマンスを知っています(開発段階)。ベンチマークでは、現在のサーバー状況(私たちの携帯電話でさえ)を取得します。 OK。次は何?我々は、すべての/ほとんどの訪問者が良好なつながりを得ていることを確かめる必要があります。私はこの部分が本当に難しいと思っています。しかし、私はログファイルを取って、このネットワークに到達するのにどれくらいの時間がかかるかを知るために、いくつかのIPにpingを試みます。また、私は特定のISPを決定する前に、私は接続性とユーザーの意見を読んでみる...

関連する問題