Скорость на клиенте
• Что измерять?– ??? (нет одной циферки)
• Как измерять– Измерять на клиенте– Загружать обратно– Считать статистику
… молоток и гвозди
• API– Navigation Timing API – Resource Timing API– firstPaintTime (Chrome)– msFirstPaint (IE)
Первый байт быстрого* сервера
Новосибирск
Владивосток
Алматы
Киев
Астана
Екб
Стамбул
Минск
Анкара
Спб
Москва
0 500 1000 1500 2000 2500 3000 3500
50%
70%
90%
95%
Посл. байт быстрого* сервера (60kb)
НовосибирскКиев
Алматы Владивосток
АстанаЕкб
МоскваСпб
СтамбулМинскАнкара
0 500 1000 1500 2000 2500 3000 3500
50%
70%
90%
95%
… наглая ложь, и статистика • Не все браузеры поддерживают
– На мобилках только Chrome• Считают разное
– firstPaintTime/msFirstPaint* • Подвержено bias
До первого байта
Chrome/Windows
Firefox/Windows
MSIE/Windows
Opera/Windows
Safari/Macintosh
YaBrowser/Windows
0 200 400 600 800 1000 1200 1400
Особенности HTTPS
• Должно быть медленней– время на handshake
• Первый байт быстрее– aртефакт?
• Становится быстрее*– What?!
*без НДС
Proofpic - Стамбул
В Стамбуле с другой стороны нет почти разницы…(тут 10% https траффика, но влиять не должно)
Конец первой части
• Поняли:– Серверное время – не всё– Как измерять клиентское
• Непонятно:– 0ms (60kb) –> 3249ms в 95%, ping < 200ms
tcpdump - оружие героя
• Можно понять все.• Сервер знает о доставке.• tcpdump – трудоемко, точечно.• Можно ли автоматизировать?
tcplanz
• github.com/yandex/tcplanz• Парсит tcpdump-ы, быстро• Hardcore tool, не продукт.
TCP за 1 слайд
• rtt – время туда и обратно. ping ~ rtt.• ACK – подтверждение доставки• cwnd – сколько можно отослать без
подтверждения
Скорость доставки
• На каждые CWND пакетов нам нужно rtt времени.
• cwnd = 10, rtt=100, 145kb/s• cwnd = 100, rtt=50, 2900kb/s• cwnd медленно растет, пока все
хорошо, сильно падает, когда пакет теряется.
TCP - Summary
• Новейшие технологии 70-х• Для деления канала, не для latency• Для проводов• Потеря -> congestion
Крутите параметры
• Параметр Initial CWND• Initial CWND=10
(был = 4, до этого =2)• Страничка в 60кб ~ 40 пакетов ~ 3-4 rtt.
Initial cwnd=20
Разница между первым и последним пакетом ответа
Разница между ACK последнего пакета от пользователя
Безумный пример
• Игнорируем cwnd, шлем все 40 пакетов каждую 1ms следующий.
• Получаем selective ack, досылаем то, что потерялось.
• Страница на хорошем канале придет за 1-2 rtt, на плохом будет хуже.
• Сейчас такое сделать нельзя* в QUIC можно* внутри CDN примерно так все и ходит, cwnd учитывается, но он запредельного размера.
Итоги• Задержку доставки сервер делает сам
из-за ограничений протоколов• Серебряной пули нет, но место для
оптимизаций есть.• Делая оптимизации следите за
метриками Timing API и tcpdump
Пару слов о HTTP
• Новейший протокол 90-х• Второй запрос в соединении = лишний rtt.• Количество соединений ограничено.• Фиксится SPDY/HTTP2
GPRS/Edge/LTE
• Первые два просто медленные с большим RTT• сами разбираются ретрансмитами
(см. HARQ), может страдать Latency• Ретрансмит внутри LTE выглядит для TCP как
самопроизвольное временное возрастание rtt. Будет ли лишний ретрансмит от TCP?
• Мелкий декларируемый application window у мобильников