C# 网站速度测试。gzip有问题吗?
我将在我们的web应用程序中实现internet连接速度测试。没有要求它必须是非常高级的特性,所以我开始尽可能地简化它 其思想是从HttpHandler获取一些数据,看看需要多长时间,然后根据数据量和时间计算速度。我认为最好发送十个数据包,扔掉最高和最低时间,然后计算平均时间 我的HttpHandler:C# 网站速度测试。gzip有问题吗?,c#,jquery,gzip,speed-test,C#,Jquery,Gzip,Speed Test,我将在我们的web应用程序中实现internet连接速度测试。没有要求它必须是非常高级的特性,所以我开始尽可能地简化它 其思想是从HttpHandler获取一些数据,看看需要多长时间,然后根据数据量和时间计算速度。我认为最好发送十个数据包,扔掉最高和最低时间,然后计算平均时间 我的HttpHandler: public class SpeedTest : IHttpHandler { public void ProcessRequest(HttpContext context)
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
});
});
});
$(文档).ready(函数(){
$('').prependTo('#HeaderInfoBarRight')。按钮({
text:false,图标:{primary:“ui图标时钟”}
})
。单击(函数(){
变量对话框=$('')。对话框({
自动打开:错误
,标题:“速度测试”
,模态:真的
,宽度:“自动”
,可调整大小:false
,高度:'自动'
,最小身高:50
,关闭:函数(){
$(this.dialog('destroy').remove();
}
});
var html='要开始测试,请单击下面的按钮。'+
'';
dialog.html(html.dialog('open');
dialog.find('a')。按钮({text:true})
。单击(函数(){
var startTest=新日期();
$.post('SpeedTest.ashx',{},函数(结果){
var endTest=新日期();
//计算时间
});
});
});
}))
文件1mb.txt是通过windows中的命令提示符创建的,如下所示:
fsutil文件createnew
c:\temp\1mbfile.txt 1048576
这个文件正好是1mb。现在来谈谈问题。例如,当我在firebug中检查响应时,它的大小只有8.8KB。这怎么可能?是GZIP压缩吗?它如何将1mb文件压缩到8.8KB?是否因为使用fsutil创建文件时,数据重复
我寻找的一个解决方案是强制它不压缩(如果这是问题的话),这可能吗?我找不到方法将正确的头设置为不压缩
如果这是一个压缩问题,对此无需采取任何措施,我是否可以检查响应大小,并始终指望它在所有环境中都精确到该大小
欢迎提出任何其他想法。另外,如果有这样的想法,也可以考虑如何实施speedtest。是的,这可能是一个gzip压缩问题
fsutil file createnew
创建一个由零组成的文件,因此它当然可以非常高效地压缩
可以使用web调试代理来验证web服务器是否正在使用压缩,如本文所述:
这肯定是压缩问题。作为一种我没有尝试过但我认为应该有效的解决方法,将生成文件的扩展名更改为Gzip可以避免的扩展名(例如:mp3),然后再次尝试测试,看看它是否再次被压缩
告诉我发生了什么,谢谢。谢谢你的回答。但有一个问题。我不想关闭web服务器上的压缩,因为我需要它来提高性能。我只想为这个明确的请求关闭它。您知道这是否可行吗?如果您发送的HTTP头
接受编码:
没有值,则可能会强制服务器向您发送未压缩的响应。或者,浏览器的about:config页面中可能有一个设置将禁用此标题。