Почему 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