Тест скорости сайта. Проблема с 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 был создан через командную строку в Windows как:

файл fsutil createnew c:\temp\1mbfile.txt 1048576

Файл ровно 1мб. Теперь к проблеме. Когда я проверяю ответ, например, в firebug, его размер составляет всего 8,8 КБ. Как это возможно? Это сжатие GZIP? Как он может сжать файл размером 1 МБ до 8,8 КБ? Это потому, что когда вы создаете файл с помощью fsutil, данные повторяются?

Решение, которое я ищу, - это способ заставить его не сжиматься (если это проблема), возможно ли это? Я не могу найти способ установить правильные заголовки, чтобы они не сжимались.

Если это проблема сжатия и с этим ничего нельзя поделать, могу ли я проверить размер ответа и всегда рассчитывать на то, что он будет точно таким же во всех средах?

Любые другие идеи приветствуются. Также идеи по поводу того, как вообще реализовать спидтест, если есть такие идеи.


person John    schedule 14.05.2011    source источник


Ответы (2)


Да, это может быть проблема со сжатием gzip. fsutil file createnew создает файл, состоящий из нулей, поэтому он, конечно, сжимается очень эффективно.

Можно использовать прокси-сервер веб-отладки Fiddler, чтобы проверить, использует ли ваш веб-сервер сжатие, как описано в этом статья: Сжатие HTTP в IIS 6 и IIS 7

person Chris Fulstow    schedule 14.05.2011
comment
Спасибо за ответ. Однако есть одна проблема. Я не хочу отключать сжатие на веб-сервере, так как мне это нужно для производительности. Я хочу отключить его только для этого явного запроса. Вы знаете, возможно ли это? - person John; 17.05.2011
comment
Если вы отправите заголовок HTTP Accept-Encoding: без значения, это может заставить сервер отправить вам несжатый ответ. Или на странице about:config вашего браузера может быть параметр, отключающий этот заголовок. - person Chris Fulstow; 18.05.2011

Однозначно дело в компрессии. в качестве обходного пути, который я не пробовал, но я думаю, что он должен работать, измените расширение вашего сгенерированного файла на то, чего Gzip будет избегать (например, mp3), и повторите свой тест еще раз и посмотрите, сжимается ли он снова или нет.

дайте мне знать, что случилось, спасибо.

person Mohammed Swillam    schedule 29.06.2011