我即將在我們的Web應用程序中實施互聯網連接speedtest。沒有要求它必須是一個非常先進的功能,所以我開始儘可能簡單地做到這一點。網站速度測試。問題與gzip?
這個想法是從HttpHandler獲取一些數據,看看它需要多長時間,然後從數據量和時間計算速度。我認爲最好是發送可能的數據,然後扔掉最高和最低時間,然後計算平均時間。
我的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通過命令提示在視窗創建爲:
FSUTIL文件createnew C:\ TEMP \ 1mbfile.txt 1048576
該文件是完全1MB。現在解決問題。當我檢查例如螢火蟲的響應時,它的大小隻有8.8kb。這怎麼可能?它是GZIP壓縮嗎?它如何將一個1MB文件壓縮到8.8 kb?這是因爲當你用fsutil創建一個文件重複的數據?
我搜索的解決方案是強制它不壓縮的方法(如果這是問題),那可能嗎?我無法找到一種方法來設置正確的標題不壓縮。
如果這是一個壓縮問題,而且沒有任何關於它的事情,我可以檢查響應大小並始終指望它在所有環境中的大小都正確嗎?
歡迎任何其他想法。如果有這樣的想法,還有關於如何實施速測的一般想法。
謝謝你的回答。一個問題,但。我不想關閉Web服務器上的壓縮,因爲我需要它來提高性能。我只想關閉這個明確的請求。你知道這是可能的嗎? – John 2011-05-17 06:25:19
如果您發送HTTP標頭'Accept-Encoding:'沒有值,它可能會強制服務器向您發送未壓縮的響應。或者,您的瀏覽器可能會設置about:config頁面來禁用此標題。 – 2011-05-18 03:35:13