
200 мілісекунд: інтерактивна сторінка показує повний шлях одного HTTP-запиту
Сторінка «200 Milliseconds» із thenodebook.com веде один HTTP-запит через усі його 211,4 мілісекунди — від кліку в кав'ярні в Сан-Франциско до підтвердження замовлення.
Інтерактивна сторінка «200 Milliseconds» із thenodebook.com проводить один HTTP-запит через усе його 211,4-мілісекундне життя: у вівторок о 9:41 хтось у кав'ярні в Сан-Франциско натискає «Buy», і через 211,4 мс на екрані з'являється «Order confirmed». Людина, яка клікнула, жодної затримки не помітила. Годинник угорі сторінки точний і зупиняється на t = 0,211400 с; коли розповідь робить паузу для уроку, годинник завмирає, а потім час іде далі.
Маршрут
Запит робить сім зупинок: ноутбук у Wi-Fi кав'ярні, точка доступу, яка приймає радіосигнал і передає його дротом, інтернет-провайдер закладу, приблизно 4 700 км оптоволокна між Сан-Франциско та Ешберном у Вірджинії, балансувальник із чотирма процесами Node.js за ним, сам серверний процес (PID 1447, розгорнутий 23 дні тому) і база PostgreSQL за 0,35 мс. На момент виведення підтвердження запит і відповіді шість разів перетнуть Північну Америку й пройдуть крізь близько сорока машин, де виконуються сто мільйонів рядків чужого коду.
Куди йде час
Перші п'ять мілісекунд — це апаратне забезпечення та облік браузера: зміна ємності на тачпаді викликає переривання, драйвер HID, сервер вікон і браузерний процес Chrome передають подію в ізольований рендерер, де hit testing знаходить кнопку, вкладену на шість рівнів. Далі fetch на /api/checkout промахується повз усі три кеші — пам'яті, service worker і диска, — бо POST-запити не кешуються. У пулі сокетів немає з'єднання з api.thenodebook.com, тож запит платить за «холодний старт»: рукостискання TCP і TLS по 62 мс на раунд разом дають 127 із 211,4 мілісекунди. 203-байтовий текстовий запит перетворюється на 225-байтовий TLS-запис і йде мережею як трохи менш ніж 300 байтів; адреси залишаються читабельними на кожному вузлі, бо близько сорока машин мають його маршрутизувати.
Холодний і теплий старт
Опублікований розподіл для холодного старту: підготовка 7 мс, рукостискання 127 мс, політ і відмальовування 74 мс, сервер 3 мс. Другий запит на тому самому збереженому з'єднанні займає близько 95 мс — браузер 5, одне перетинання 62, сервер 3, відмальовування 25, — бо збережений сокет і квиток сесії повністю прибирають рукостискання. Між актами сторінка зупиняє годинник і коротко пояснює сокети, порти, anycast-маршрутизацію, SYN-кукі та автентифіковане шифрування.
SiTech — веброзробка з підтримкою AI
Створюємо швидкі та сучасні сайти й інтегруємо AI у бізнес-процеси. Маєте проєкт чи запитання? Із задоволенням допоможемо.