Почему 1 КБ может замедлить загрузку сайта?

Привет, %username%! Знал ли ты, что добавив всего 1 КБ данных к своему сайту, ты можешь удвоить время его загрузки? Звучит как магия, но на самом деле все дело в том, как работает TCP Slow Start — механизм, который не дает серверу сразу заливать весь ответ клиенту.

Когда браузер подключается к серверу, они сначала делают "рукопожатие" (TCP Handshake) — обмениваются тремя пакетами (SYN, SYN-ACK, ACK), что занимает один RTT (Round Trip Time — время туда и обратно). Только после этого начинается передача данных, но и тут TCP не торопится.

Вот в чем фишка: TCP начинает с маленького окна перегрузки (Congestion Window), обычно равного 10 MSS (Maximum Segment Size). MSS — это максимальный размер полезных данных в одном TCP-сегменте, обычно около 1460 байт. Умножаем 1460 байт на 10 MSS и получаем примерно 14 600 байт — наши магические 14 КБ!

Что это означает на практике?

  • Если твой HTML весит 14 КБ — он полностью влезает в начальное окно и прилетает за один RTT.
  • Если твой HTML весит 15 КБ — первые 14 КБ уйдут сразу, но оставшийся 1 КБ TCP не отправит, пока не придет подтверждение (ACK) на первые пакеты. Это уже второй RTT!

Разница всего 1 КБ, но из-за ограничений Slow Start получаем практически вдвое больше задержки по времени.

А что в реальном мире?

В жизни все сложнее: есть DNS-запросы, TLS-рукопожатия (в TLS 1.2 — это еще +2 RTT, в TLS 1.3 — всего +1 RTT, а с 0-RTT вообще можно обойтись без задержек при повторном подключении). HTTP/2 добавляет мультиплексирование, а HTTP/3 на базе QUIC вообще избавляется от классического TCP Slow Start.

Но самое интересное — не все CDN одинаковы! У большинства хостеров (Netlify, Heroku) начальное окно = 10 MSS (14.6 КБ), а вот Cloudflare, Fastly и GitHub Pages используют 30 MSS — это уже ~43 КБ в первой волне! Это значит, что на Cloudflare твоя страница в 15 КБ загрузится так же быстро, как 14 КБ на обычном хостинге.

Полезные выводы

  • Чистишь лишнее, сжимаешь контент — каждый байт имеет значение, особенно если ты близок к границе окна перегрузки.
  • Существует даже 14KB Club — сообщество сайтов, которые грузятся за один RTT.
  • Не забывай про TLS 1.3 и HTTP/3 — они серьезно улучшают производительность.
  • Выбор CDN тоже важен — разные провайдеры используют разные настройки initial congestion window.

А ты обращаешь внимание на размер первоначальной загрузки своих сервисов? Может быть, ты уже применяешь какие-то оптимизации или используешь определенные CDN для ускорения? Сталкивался ли ты с проблемами производительности из-за TCP Slow Start? Делись в комментариях — интересно узнать, как ты боришься с задержками и оптимизируешь время загрузки!

#SRE #DevOps #Performance #TCP #SlowStart #WebOptimization #HTTP2 #HTTP3 #CDN #Networking #Latency