Как уменьшить «Время первого байта» на моем сайте? - PullRequest
16 голосов
/ 17 декабря 2011

если вы зайдете на домашнюю страницу, то увидите, что перед загрузкой страницы браузер ждет ...

Как я могу уменьшить Время для первого байта ?

enter image description here

Ответы [ 7 ]

16 голосов
/ 20 февраля 2012

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

Однако, поскольку сайт использует php, вы, скорее всего, используете буферизацию вывода

Учитывая это, следующий код даст TTFB (сетевая задержка +) 2 с:

<?php ob_start(); ?>
<!doctype html>
<html>
    <head>
        <title>Slow to Load, Slow to finish</title>
    </head>
    <body>
    <?php 
        sleep(2); // Simulate slow processing
        echo "Body"
    ?>
    </body>
</html>

Принимая во внимание, что это даст вам TTFB (задержка сети +) 0s:

<!doctype html>
<html>
    <head>
        <title>Fast to load, Slow to finish</title>
    </head>
    <body>
        <?php ob_start(); ?>
        <?php 
            sleep(2); // Simulate slow processing
            echo "Body"
        ?>
    </body>
</html>

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

ВАЖНО : Есть множество изменений внешнего интерфейса , которые вы должны сделать перед тем, как сосредоточиться на TTFB.

5 голосов
/ 29 июня 2016

Я имел дело с огромным TTFB (8-10 секунд) и отчаянно искал решение. После безуспешного поиска и поиска я решил поближе взглянуть на мой код PHP и индексы базы данных .

Решение для буферизации вывода немного понизит мой TTFB, но этого недостаточно. У меня снова были жалобы пользователей.

Настоящая проблема заключается в времени обработки сервера (запросы БД и циклы PHP) и в исходном коде HTML, который вы создали .

Теперь я предлагаю предпринять следующие шаги:

  1. Посмотрите на индексы базы данных. Убедитесь, что вы используете правильные индексы для " все данные ", которые вы возвращаете . Используйте Объясните , чтобы проверить, используется ли ваш индекс, какой используется и как он используется.

В моем случае я возвращаю массив объектов и проверяю свои индексы для моей основной таблицы. Все выглядело нормально, но я забыл, что мои объекты включают другие меньшие объекты из других таблиц. Эти таблицы не были правильно проиндексированы. Отсюда мой огромный TTFB. Я просто передаю от 8 секунд до 2 секунд, просто добавляя правильный индекс в правильные таблицы.

  1. Взгляните на свой PHP-код.

Возможно, у вас есть цикл в цикле , который может быть медленным для обработки. Вы должны использовать PHP MVC Framework. Твой выбор. Я не назову ни одного.

Избегайте такого кода, даже если он работает. Я знаю, некоторые программисты PHP4 скажут, что это хорошо. :)

$query = "SELECT something FROM table";
$result = mysqli_query($mysqli, $query);

if($result) {
    while($row = mysqli_fetch_assoc($result)) {
        $query = "UPDATE other_table SET something_else = "'.$row['something'].'";
        $result2 = mysqli_query($mysqli, $query)
    }
}
  1. Обратите внимание на сгенерированный HTML-код .

Например, вы генерируете код Javascript через циклы PHP . Логика в порядке. Время загрузки нет. Допустим, вы возвращаете 100 строк в таблицу. Для каждой строки у вас есть только 5 возможных действий (изменение статуса, редактирование, удаление, дублирование, печать). Это означает, что 5 диалогов jQuery (HTML div, с элементами управления) и 5 ​​JS-скриптов умножаются на 100 строк = тысячи строк кода, которые будут написаны на этой странице. В моем случае более 32 000 строк в моем HTML-коде размером 4 МБ. Прошло от 2 до 1 секунды после того, как я установил все эти диалоги на соответствующие функции JS.

В заключение , (если вы все еще читаете это :)) не ищите некоторые магические функции, чтобы уменьшить ваш TTFB. Поиск вашего кода и базы данных.

PS: некоторые другие вещи помогут увеличить скорость: кэширование и сжатие в браузере, использование CDN, минимизация HTML, CSS и JS, откладывание анализа JavaScript, объединение изображений в CSS-спрайты и т. Д. Используйте скорость страницы Google и аудиты Google для получения дополнительной информации о производительности.

3 голосов
/ 20 февраля 2012

Задержка вызвана серверным скриптом, который генерирует страницу индекса.

При быстром взгляде на ваш сайт, я могу догадаться, что сайт использует PHP.Итак, задержка вызвана чем-то, что содержится в вашем скрипте index.php.

Хостинг, сеть, оборудование и HTTP-сервер (Apache) определенно НЕ являются причиной.Ваш график показывает, что статические файлы (.css, .js и т. Д.) Доставляются довольно быстро.

Итак, для более подробной информации вы должны предоставить больше информации (медленное выполнение index.php может иметь много разных причин...).

1 голос
/ 05 января 2017

Ошибки в .htaccess также могут значительно увеличить TTFB.

Мне пришлось удалить некоторые старые строки кода, оставленные Wordfence, чтобы разрешить мой 8-12 секундный TTFB (теперь 500 мс).

0 голосов
/ 18 ноября 2014

вы можете использовать сервисы cloudflare и cdn для TTFB. Если вы не получили должного отзыва, смените хост-сервер.

0 голосов
/ 06 октября 2013

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

Недавно я написал об этом пост, в котором рассматриваются факторы задержки TTFB и среднее время загрузки различных ресурсов (на основе данных, собранных за сеансы 1B). Вы можете найти это полезным: http://www.incapsula.com/the-incapsula-blog/item/809-using-cdn-to-improve-seo-and-ttfb

0 голосов
/ 20 февраля 2012

Я думаю, это зависит от того, какие инструменты вы используете для измерения такого рода данных. Когда я использовал webpagetest.org - время до первого байта составляло 292 мс, что хорошо. Возможно, вам следует повторить проверку?

Часть этого числа зависит от того, где вы находитесь по отношению к серверу - чем больше прыжков вам нужно сделать - тем больше это число. Это также касается аппаратного обеспечения и подключения серверов - обычно это то, что вы не можете контролировать. Возможно, вы захотите посмотреть другие хосты, но сначала я бы запустил еще несколько тестов - попросите ваших друзей протестировать ваш сайт на webpagetest.org (или аналогичный) и посмотреть, какие значения они получают.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...