Сайт спидтест. Проблема с gzip? - PullRequest
3 голосов
/ 14 мая 2011

Я собираюсь внедрить скорость интернет-соединения в нашем веб-приложении. Не требуется, чтобы это была очень продвинутая функция, поэтому я начал делать ее как можно проще.

Идея состоит в том, чтобы получить некоторые данные из 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
            });
        });
    });

}); * +1011 *

Файл 1mb.txt был создан из командной строки в Windows как:

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

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

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

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

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

Ответы [ 2 ]

1 голос
/ 14 мая 2011

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

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

0 голосов
/ 29 июня 2011

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

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

...