PHP Speed ​​Test для скорости соединения пользователя без эха на текущей странице - PullRequest
6 голосов
/ 15 октября 2010

Ищу возможность проверить скорость подключения пользователя.Предполагается, что он будет сохранен как cookie-файлы, а javascript-файлы, а также css-файлы будут адаптированы, если скорость будет низкой.

Возможность тестирования скорости, которая у меня есть на данный момент, составляет

    $kb = 512;

    flush();
    //
    echo "<!-";
    $time = explode(" ",microtime());
    for($x=0;$x<$kb;$x++){
        echo str_pad('', 512, '.');
        flush();
    }
    $time_end = explode(" ",microtime());
    echo "->";

    $start = $time[0] + $time[1];
    $finish = $time_end[0] + $time_end[1];
    $deltat = $finish - $start;

    return round($kb / $deltat, 3);

Несмотря на то, что это работает, мне не нравится, когда в код добавляется так много символов, и если я повторяю все это, я не могу сохранить результат в файле cookie, поскольку уже есть вывод.

Можно ли сделать что-то подобное в другом файле?Есть ли у вас решение?

Заранее спасибо.

Ответы [ 7 ]

8 голосов
/ 15 октября 2010

Есть ли у вас решение?

Мое решение - вообще не беспокоиться о тесте скорости. И вот почему:

Вы заявили, что причиной теста является определение того, какие файлы JS / CSS следует отправить. Необходимо помнить, что браузеры будут кэшировать эти файлы после первой загрузки (если они не были изменены). Таким образом, по сути, вы отправляете 256 КБ тестовых данных, чтобы определить, следует ли отправлять, скажем, дополнительные 512 КБ?

Просто отправьте данные, и они будут кэшированы. Если у вас нет MB JS / CSS (в этом случае вам нужен редизайн сайта, а не тест скорости), время загрузки будет выполнимым. Скоростные тесты должны быть зарезервированы для таких вещей, как потоковое видео и т. П.

3 голосов
/ 15 октября 2010

Единственная идея, которую я могу придумать, - это перенаправление.

  • Измерение скорости пользователя
  • Перенаправление на индекс

Пока это не такХорошее решение: измерять скорость пользователей нужно только один раз, поэтому я думаю, что это извиняет.

1 голос
/ 16 октября 2010

Вы посещаете первую страницу (возможно, 100 КБ со всеми внешними файлами), сеанс немедленно начинается с $ _SESSION ["start_time"] = время ();

когда страница закончила загрузку (загрузка окна jQuery или что-то в этом духе :) вы снова отправляете запрос со временем, Вы вычисляете скорость (jQueryRequestTime - $ _SESSION ["start_time"] / PageSize) и устанавливаете другую переменную сеанса, следующая ссылка, по которой он нажимает, может включать пользовательские CSS / JS, утвержденные для этого

ofc это не точно:)

1 голос
/ 15 октября 2010

Как насчет использования JavaScript для определения времени, которое требуется для загрузки страницы. Затем используйте JavaScript, чтобы установить куки.

микротайм в javascript http://phpjs.org/functions/microtime:472

Использование jQuery

<head>
<!-- include jquery & other html snipped -->

<script>

function microtime (get_as_float) {
    // http://kevin.vanzonneveld.net
    // +   original by: Paulo Freitas
    // *     example 1: timeStamp = microtime(true);
    // *     results 1: timeStamp > 1000000000 && timeStamp < 2000000000

    var now = new Date().getTime() / 1000;
    var s = parseInt(now, 10);

    return (get_as_float) ? now : (Math.round((now - s) * 1000) / 1000) + ' ' + s;
}

function setCookie(c_name, value, expiredays) {
var exdate=new Date();
exdate.setDate(exdate.getDate()+expiredays);
document.cookie=c_name+ "=" +escape(value)+
((expiredays==null) ? "" : ";expires="+exdate.toUTCString());
}

start = microtime(true);

$(window).load(function () {
  // everything finished loading
  end = microtime(true);
  diff = end - start;
  // save in a cookie for the next 30 days

    setCookie('my_speed_test_cookie', diff, 30);
});

</script>
</head>
<body>
<p>some page to test how long it loads</p>
<img src="some_image_file.png">
</body>

Некоторые подводные камни: - Страница должна была бы начать загружаться сначала. JQuery должен быть загружен (или вы можете переработать приведенный выше код, чтобы избежать jQuery)

  • скорость тестирования на данных ASCII / Latin может не дать наилучшего результата, поскольку символы могут быть сжаты. Помимо высокоуровневого сжатия gzip, некоторые модемы / линии (если не все) имеют базовое сжатие, которое способно обнаруживать повторяющиеся символы и сообщать другому концу, что следующие 500 повторяют ''. Я думаю, что было бы лучше использовать двоичные данные, которые были сжаты
1 голос
/ 15 октября 2010

Проблема в том, что вы не можете решить эту проблему, и, вероятно, не в чистом PHP. Выбранный вами подход заставит пользователя загрузить (512x512) = 262 144 байта бесполезных данных, что намного больше, чем у большинства полных страниц. Если у пользователя медленное соединение, он может предположить, что ваш сайт не работает до завершения теста скорости (с 10 КБ / с, до того, как на экране появится что-нибудь интересное, потребуется полминуты!).

Вы можете сделать AJAX-запрос на файл известного размера и времени, сколько занимает . Проблема в том, что страница должна быть уже загружена, чтобы она работала, поэтому она будет работать только для последующих страниц.

Вы можете создать «загрузочную» страницу (как вы видите в GMail при доступе к ней по медленному соединению), которая предварительно загружает данные со ссылкой на версию с низкой пропускной способностью (или, возможно, перенаправляет, если загрузка выполняется слишком долго). длинный).

Или вы можете сохранить время запуска в файле cookie и сделать AJAX-запрос, когда страница будет загружена - это даст вам фактическое время загрузки вашей страницы; если это, скажем, более 10 секунд, вы можете перейти на версию с низкой пропускной способностью.

Однако ни один из них не даст вам скорость при первом доступе; и отправка большой пустой страницы заранее не очень хорошее первое впечатление.

0 голосов
/ 15 октября 2010

Единственное, о чем я могу думать, - это подписаться на услугу, которая предлагает поиск IP-адреса в сети. Эти службы работают путем создания базы данных IP-адресов и каталогизации их зарегистрированного использования по назначению. Они не всегда точны, но они обеспечивают отправную точку. Посмотрите IP-адрес пользователя по одному из них и посмотрите, что он возвращает.

Ip2Location.com предоставляет такую ​​базу данных, начиная с продукта DB13.

Конечно, если ваша цель - мобильная версия сайта, то поиск агента является лучшим решением.

0 голосов
/ 15 октября 2010

После того, как вы определили скорость пользователя, отправьте javascript в браузер, чтобы установить cookie, а затем выполните обновление или перенаправление в тех случаях, когда скорость ниже желаемой.

...