Web アプリケーションにインターネット接続速度テストを実装しようとしています。非常に高度な機能である必要はないので、できる限りシンプルにすることから始めました。
アイデアは、HttpHandler からいくつかのデータをフェッチし、どれくらいの時間がかかるかを確認し、データの量と時間から速度を計算することです。たぶん10個のデータのパッケージを送信して、最高時間と最低時間を捨ててから平均時間を計算する方が良いと思いました。
私のHttpHandler:
public class SpeedTest : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
var Response = context.Response;
FileInfo file = new FileInfo(@"C:\dev\Project\****\trunk\Application\1mb.txt");
if (file.Exists)
{
Response.Clear();
Response.AddHeader("Content-Length", file.Length.ToString());
Response.WriteFile(file.FullName);
Response.End();
}
}
public bool IsReusable
{
get
{
return false;
}
}
}
これは、ボタンを追加し、結果などを表示するダイアログを表示する jquery コードです。
$(document).ready(function () {
$('<a href="#">Speedtest</a>').prependTo('#HeaderInfoBarRight').button({
text: false, icons: { primary: "ui-icon-clock" }
})
.click(function () {
var dialog = $('<div></div>').dialog({
autoOpen: false
, title: 'Speedtest'
, modal: true
, width: 'auto'
, resizable: false
, height: 'auto'
, minHeight: 50
, close: function () {
$(this).dialog('destroy').remove();
}
});
var html = '<div>To start the test click below.</div>' +
'<a href="#">Start test</a>';
dialog.html(html).dialog('open');
dialog.find('a').button({ text: true })
.click(function () {
var startTest = new Date();
$.post('SpeedTest.ashx', {}, function (result) {
var endTest = new Date();
//Calculate time
});
});
});
});
ファイル 1mb.txt は、Windows のコマンド プロンプトで次のように作成されました。
fsutil ファイル createnew c:\temp\1mbfile.txt 1048576
ファイルはちょうど1MBです。今問題に。たとえばfirebugで応答を調べると、サイズはわずか8.8 kbです。これはどのように可能ですか?GZIP圧縮ですか?1MB のファイルを 8.8KB に圧縮するにはどうすればよいですか? fsutil でファイルを作成すると、データが繰り返しになるからですか?
私が探している解決策は、強制的に圧縮しないようにする方法です (これが問題である場合)、それは可能ですか? 正しいヘッダーを圧縮しないように設定する方法が見つかりません。
それが圧縮の問題であり、それについて何もすることがない場合、応答サイズを確認し、常にすべての環境で正確にそのサイズであると期待できますか?
他のアイデアは大歓迎です。そのようなアイデアがあれば、一般的にスピードテストを実装する方法についてのアイデアも。