Почему размер вашего сайта не должен превышать 14 кб

При меньшем размере сайта он загружается быстрее — это неудивительно.

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

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

Что такое TCP?

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

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

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

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

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

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

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

Что такое медленный запуск TCP?

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

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

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

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

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

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

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

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

Так откуда же берутся 14 кБ?

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

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

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

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

Таким образом, на один TCP-пакет приходится 1460 байт. 10 x 1460 = 14600 байт или примерно 14 кБ!

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

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

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

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

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

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

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

Чтобы проиллюстрировать этот пример плохой задержки, давайте представим, что группа нефтяников забыла свои кости дома и им нужно использовать отличный (менее 14 кБ) missingdice.com для игры в Dungeons & Dragons.

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

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

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

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

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

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

Обратно на наземную станцию, в космос, вниз на спутниковую антенну, затем на wifi роутер и снова на наш телефон oilers.

phone -> WiFi router -> satellite dish -> satellite -> ground station -> server -> ground station -> satellite -> satellite dish -> WiFi router -> phone
Вход в полноэкранный режим Выход из полноэкранного режима

Если посчитать, то это 10 + ( 1 + 120 + 120 + 60 ) x 2 = 612 мс.

Это дополнительные 612 мс на каждую поездку — возможно, это не кажется долгим временем ожидания, но ваш сайт может иметь много поездок только для получения первого ресурса.

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

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

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

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

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

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

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

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

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

Но если вы изо всех сил старались уместить все в 14 кБ и не смогли — правило 14 кБ все еще полезно.

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

Примечание — правило 14 кБ включает **HTTP-заголовки* — которые не сжимаются (даже при HTTP/2 в первом ответе) — оно также включает изображения, поэтому загружайте только то, что находится над сгибом, и делайте их очень маленькими, или используйте заполнители, чтобы ваши посетители знали, что их ждет что-то хорошее.*

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

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

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

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

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

HTTP/3 и QUIC

Аналогично HTTP/2, существует мнение, что HTTP/3 и QUIC отменят правило 14 кБ — это не так. QUIC рекомендует то же правило 14 кБ.

Дополнительное чтение

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

  • Высокопроизводительные браузерные сети от Ильи Григорика
  • Повышение производительности HTTP путем вписывания в начальное окно медленного запуска TCP, автор Саймон Хёруп Эскильдсен
  • Критические ресурсы и первые 14 КБ — обзор
  • Улучшение производительности HTTP3

Оцените статью
devanswers.ru
Добавить комментарий