Меньший размер веб-сайта ускоряет его загрузку — это неудивительно.

Что удивительно, так это а 14kb страница может загружаться намного быстрее, чем 15kb страница — может быть 612ms быстрее — а разница между 15kb и 16kb страница тривиальна.

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


Что такое TCP?

Протокол управления передачей (TCP) это способ использования Интернет-протокол (IP) для надежной отправки пакетов данных — иногда это называют TCP/IP.

Когда браузер запрашивает ваш веб-сайт (или изображение, или таблицу стилей), он делает этот запрос, используя HTTP.

HTTP построен поверх TCP, и один HTTP-запрос обычно состоит из множества TCP-запросов. пакеты.

Сам по себе IP — это просто система для отправки пакетов данных из одного места в Интернете в другое. IP не имеет способа проверить, успешно ли прибыл пакет в пункт назначения.

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

TCP — это расширение IP, которое позволяет браузеру и серверу вашего веб-сайта сообщать друг другу, какие пакеты были успешно доставлены.

Сервер отправляет несколько пакетов, затем ждет ответа от браузера о том, что он получил пакеты (это называется подтверждением или ACK), затем отправляет еще несколько — или, если он не получил ACK, он может отправить пакеты опять таки.


Что такое медленный старт TCP?

Медленный запуск TCP — это алгоритм, используемый серверами для определения количества пакетов, которые они могут отправить за раз.

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

Пропускная способность — это количество данных, которое может быть передано по сети в единицу времени. Обычно он измеряется в битах в секунду (b/s). Сантехника — обычная аналогия — подумайте о пропускной способности как о том, сколько воды может выйти из трубы в секунду.

Ваш сервер не знает, сколько данных может обработать соединение, поэтому он начинает с отправки вам небольшого и безопасного объема данных — обычно 10 пакетов TCP.

Если эти пакеты успешно доходят до посетителя вашего сайта, его компьютер отправляет обратно подтверждение (ACK), в котором говорится, что пакеты были получены.

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

Этот процесс повторяется до тех пор, пока пакеты не будут потеряны и ваш сервер не получит ACK. (В этот момент сервер продолжает отправлять пакеты, но с меньшей скоростью).

В этом суть медленного старта TCP — в реальной жизни алгоритм меняется, но по сути он работает именно так.


Так откуда 14кб?

Алгоритм медленного старта TCP большинства веб-серверов начинается с отправки 10 пакетов TCP.

Максимальный размер TCP-пакета 1500 bytes.

Этот максимум не установлен спецификацией TCP, он исходит из стандарт Ethernet

Каждый пакет TCP использует 40 байт в его заголовке — 16 байт для IP и дополнительный 24 байта для TCP

Это оставляет 1460 байт за TCP-пакет. 10 x 1460 = 14600 bytes или примерно 14kb!

Таким образом, если вы сможете уместить свой веб-сайт или его важные части в 14 КБ, вы сэкономите посетителям много времени — время, необходимое для одного кругового пути между ними и сервером вашего веб-сайта.


Насколько плохим может быть одно путешествие туда и обратно?

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

Задержка — это время, которое требуется пакету данных для перемещения от источника к месту назначения. Если пропускная способность — это количество воды, которое может пройти через трубу в секунду, то задержка — это время, которое требуется капле воды, чтобы войти в трубу, а затем выйти из другого конца.

Вот забавный пример того, насколько серьезной может быть задержка:


Спутниковый интернет

Спутниковый интернет обеспечивается спутником на орбите вокруг Земли. Он используется людьми в очень малонаселенных районах, на нефтяных вышках, круизных лайнерах и для Wi-Fi в полете авиакомпаний.

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

Сначала один из них использует свой телефон, чтобы сделать запрос на веб-страницу…

Телефон отправляет этот запрос на буровую установку Wi-Fi роутер — который отправляет эти данные на буровую установку спутниковая тарелка — давайте будем милы и скажем, что это занимает 1ms.

Затем спутниковая антенна должна отправить эти данные на спутник на орбите над землей.

Как правило, это достигается с помощью спутника в геостационарная орбита в 35786km над поверхностью земли. Скорость света распространяется на 299792458 m/sпоэтому сообщение, отправленное с Земли на спутник, занимает 120ms. Затем спутник отправляет сообщение обратно на наземная станциячто занимает другое 120ms.

Затем наземная станция должна отправить запрос туда, куда сервер находится на земле (свет замедляется до 200000000 m/s когда он находится в оптоволоконном кабеле). Если расстояние между наземной станцией и сервером такое же, как расстояние между Нью-Йорк и Лондон займут около 28ms — но если это больше похоже на расстояние между Нью-Йорком и Сиднеем, то это займет 80ms — так мы его назовем 60ms (удобное число для нашей математики)

Затем запрос должен быть обработан сервером, что может занять 10ms затем сервер отправляет его обратно.

Назад к наземной станции, в космос, обратно к спутниковой тарелке, затем к Wi-Fi-маршрутизатору и снова к нашему телефону нефтяников.

phone -> WiFi router -> satellite dish -> satellite -> ground station -> server -> ground Station -> satellite -> satellite dish -> WiFi router -> phone

Если мы сделаем математику, это 10 + ( 1 + 120 + 120 + 60 ) x 2 = 612ms.

это дополнительный 612ms каждое обращение туда и обратно — возможно, это не похоже на долгое ожидание, но ваш веб-сайт может легко иметь много циклов обращения только для того, чтобы получить свой первый ресурс.

Кроме того, HTTPS требует двух дополнительных круговых обходов, прежде чем он сможет выполнить первый, что позволяет нам 1836ms!


А как насчет задержки для людей, живущих на суше?

Спутниковый интернет может показаться заведомо плохим примером — я выбрал его, потому что он иллюстрирует суть и выглядит странно — но для наземных пользователей задержка может быть хуже по многим причинам:

  • Мобильный 2g обычно имеет задержку между 300ms а также 1000ms
  • Сети 3G могут иметь где угодно между 100ms а также 500ms задержка
  • Шумные мобильные сети — скажем, в необычно людном месте вроде музыкального фестиваля.
  • Серверы, работающие с большим объемом трафика
  • Плохие вещи

Неоднозначные соединения также могут привести к потере пакетов, что приведет к еще одному круговому обходу для получения потерянных пакетов.


Теперь, когда вы знаете о правиле 14 КБ, что вы можете сделать?

Конечно, вы должны сделать свой сайт как можно меньше — вы любите своих посетителей и хотите, чтобы они были счастливы. Стремление к тому, чтобы каждая страница помещалась в пределах 14 КБ, является хорошей целью.

Эти 14 КБ включают сжатие — так что на самом деле это может быть больше похоже на ~ 50 КБ несжатых данных. — что щедро. Учтите, что компьютеры наведения Аполлона-11 имели только 72 КБ памяти.

Как только вы потеряете автоматически воспроизводимые видео, всплывающие окна, файлы cookie, баннеры с согласием на использование файлов cookie, кнопки социальных сетей, сценарии отслеживания, фреймворки JavaScript и CSS и весь другой мусор, который никому не нравится, — вы, вероятно, там.

Но если предположить, что вы изо всех сил старались уместить все в 14 КБ и не можете — правило 14 КБ все еще полезно.

если ты Убедитесь, что первые 14 КБ данных, которые вы отправляете своим посетителям, могут быть использованы для чего-то полезного. — например, некоторые критические CSS, JS и первые несколько абзацев текста, объясняющие, как использовать ваше приложение.


Некоторые оговорки к правилу

Правило 14 КБ больше похоже на эмпирическое правило, чем на фундаментальный закон вычислений:

  • Некоторые серверы увеличили начальное окно медленного запуска TCP до 30 пакетов вместо 10.
  • Иногда сервер знает, что он может начать с большего количества пакетов, потому что он использовал рукопожатие TLS для установления большего окна.
  • Серверы могут кэшировать количество пакетов, которыми может управлять маршрут, и отправлять больше при следующем подключении.
  • Есть и другие предостережения — вот более подробная статья о том, почему правило 14 КБ не всегда имеет место


HTTP/2 и правило 14 КБ

Есть идея, что правило 14kb больше не действует при использовании HTTP/2. Я прочитал об этом все, что мог, не утомив себя до смерти, но я не видел никаких доказательств того, что серверы, использующие HTTP/2, перестали использовать медленный запуск TCP, начиная с 10 пакетов.


дальнейшее чтение

Большая часть контента этого поста взята из следующих ресурсов: