# Понедельник 16 твитов
Всем привет!
Я @Andre_487 (Андрей по-простому) – разработчик, аналитик, менеджер. Занимаюсь тем, что делаю веб-сер… twitter.com/i/web/status/1…
13:57Работаю я в Яндексе, основной объект приложения моих усилий – Поиск. Вместе с командой из 7 человек делаем его быст… twitter.com/i/web/status/1…
14:01Раз будем говорить о скорости, пожалуй, следует начать с методик измерения. Так уж у нас заведено – не измерил, зна… twitter.com/i/web/status/1…
14:17В классической модели скорости мы смотрели вот на что:
* FCP – время первой отрисовки контента
* FMP – время о… twitter.com/i/web/status/1…
FCP – время первой отрисовки. Оно должно быть минимальным. Но для всех ли проектов и для любых ли переходов? Пользо… twitter.com/i/web/status/1…
14:25FMP – время отрисовки значимого контента. Очень показательная метрика, для которой нет стандартного способа измерен… twitter.com/i/web/status/1…
14:45JS inited в первой своей версии был прост – время, когда фреймворк закончил развешивать обработчики после DOMConten… twitter.com/i/web/status/1…
14:51Как выбрать значимый контент для измерения FMP? Очень индивидуально для проекта. Google пробовали разработать униве… twitter.com/i/web/status/1…
15:53Для ЯндексПоиска FMP – это отрисовка выдачи. И это можно вычислить приблизительно.
Отрисовку контента можно оценит… twitter.com/i/web/status/1…
15:59Однажды мы научились исследовать UX в разрезе скорости с помощью краудсорсинговой платформе Толока. И вот оказалось… twitter.com/i/web/status/1…
16:02В данный момент работаем над метрикой FMPv2, которая будет учитывать также и время отрисовки (или загрузки) видимых… twitter.com/i/web/status/1…
16:05Кто любит, когда в процессе загрузки блоки на странице прыгают, появляются и исчезают?
Я знал только одного такого… twitter.com/i/web/status/1…
16:13Largest Contentful Paint (LCP, web.dev/lcp/) – интересная метрика, но есть проблема – на неё влияют не т… twitter.com/i/web/status/1…
17:52Солнце зашло, а значит, просыпается мафия – и коммитит в репозиторий медленный код.
Скорость в большом проекте – н… twitter.com/i/web/status/1…
18:00Последняя метрика перед сном – Time To Interactive (TTI): web.dev/tti/
Время от старта запроса до момен… twitter.com/i/web/status/1…
18:55«Фиалки в саду.
Одуванчики вдоль дороги.
Неизбежное время сна.
Жидкость стекает из порезанного запястья»
Это значи… twitter.com/i/web/status/1…
19:53# Вторник 8 твитов
В одном из тредов был спор, что TTI должен быть единственной метрикой. Это не так, но единую метрику построить можн… twitter.com/i/web/status/1…
7:58Один из возможных пререквизитов к комбинированию метрик – переход от классических агрегаций (средняя, процентили),… twitter.com/i/web/status/1…
11:25Когда мы имеем оценку, насколько пользователю было хорошо по всем параметрам (FCP, FMP, JS inited, TTI), мы можем с… twitter.com/i/web/status/1…
13:30Ещё способ комбинировать метрики – голосование.
Можно реализовать алгоритм голосования вроде такого:… twitter.com/i/web/status/1…
15:13У замедлений есть опасное отличие от поведенческих метрик. Пример: мы вырастили клики на 10%, а замедлились всего н… twitter.com/i/web/status/1…
17:51А сегодня перед сном будет не метрика, а утверждение.
Фуллстек существует! Всем спокойной ночи.
19:55# Среда 6 твитов
Начнём день с обмена опытом. В тред призывается @_jin_nin_ для рассказа про свою оригинальную методику оценки скорости веба
9:09Ожидание в предыдущем твите затягивается, поэтому завершим про метрики.
Их нельзя рассматривать как истину и по од… twitter.com/i/web/status/1…
13:21Как мы вчера выяснили, фуллстек существует.
Разработчик решает задачи бизнеса, и есть такие задачи, где нужен один… twitter.com/i/web/status/1…
15:31Теперь давайте серьёзно обмениваться опытом. Скорость в том числе предоставляется как консалтинговый сервис. Вот… twitter.com/i/web/status/1…
16:30Официальное заявление по итогам тредов: если у вас проблемы со скоростью сервисов Яндекса – пишите на andre487@yand… twitter.com/i/web/status/1…
19:39Среда – это маленькая пятница, поэтому финальный твит в 1:27.
Чтобы не выгорать (о чём позже), нужно иногда добавл… twitter.com/i/web/status/1…
22:27# Четверг 7 твитов
Метрики – безусловно очень интересная штука, но не в них цель скорости. Цель скорости – в скорости, как бы странно… twitter.com/i/web/status/1…
10:41Первая крутая оптимизация – отдача страницы чанками. Поиск занимает несколько сотен миллисекунд, но у страницы есть… twitter.com/i/web/status/1…
12:43Пример отдачи страницы чанками: gist.github.com/andre487/cb299…
Можно даже показать какую-то часть страницы пользователю,… twitter.com/i/web/status/1…
12:52Применяем подход Critical CSS.
Вообще говоря, CSS мы инлайним для ускорения отрисовки. Помощь кеша браузера не та… twitter.com/i/web/status/1…
15:59Также мы используем Progressive CSS – наиболее общие стили приезжают в первом чанке и парсятся, пока ожидается осно… twitter.com/i/web/status/1…
20:52Reduce bundle size via one-letter css classname hash strategy dev.to/denisx/reduce-… #dev #frontend #css #webpack #perfomance
Мы пробовали и этот метод. Размер страницы до gzip действительно драматически уменьшается, но выигрыша по FCP, FMP,… twitter.com/i/web/status/1…
Reduce bundle size via one-letter css classname hash strategy dev.to/denisx/reduce-… #dev #frontend #css #webpack #perfomance
21:06
Ну и твит на позднюю ночь.
SDCH – крутой, но сложный способ сжатия: en.wikipedia.org/wiki/SDCH
Его выпилили из Chrom… twitter.com/i/web/status/1…
21:59# Пятница 6 твитов
Интересный способ оптимизации – унести все сервисы на единый домен. Вместо images.yandex.ru делаем… twitter.com/i/web/status/1…
7:59Мы показываем лёгкую версию выдачи на медленных соединениях. Это совсем другая вёрстка и урезанные фичи.
Медленное… twitter.com/i/web/status/1…
12:38А теперь шок. Перезагрузить целую (ну или большой кусок) страницу через AJAX – медленнее с точки зрения FCP и FMP,… twitter.com/i/web/status/1…
13:38На своём поле (Яндекс.Браузер, приложение Яндекс) мы используем ML для предсказания финального запроса пользователя… twitter.com/i/web/status/1…
14:16Ну что, снова про фуллстек? Я вижу ошибку в наличии "стек". Очень редок специалист, знающий все уровни, на которых… twitter.com/i/web/status/1…
15:07Быть узким специалистом – хороший выбор для work-life balance в сторону life. Но если хочется расти как крутой реша… twitter.com/i/web/status/1…
15:11# Суббота 8 твитов
Правильный подход к скорости – эксперименты и измерения.
У нас несколько уровней проверок нового кода на всех этапах его жизни
18:31Pull Request
Измерение скорости SSR и размера ответа как часть CI. Если мы видим деградацию – pr нельзя влить.
По… twitter.com/i/web/status/1…
18:32Релиз – все те же проверки, что и в pr, только базой для сравнения является не текущий master, а предыдущий релиз.… twitter.com/i/web/status/1…
18:34Эксперимент
Все нужные скоростные метрики реализованы в А/Б, есть механизмы предупреждения экспериментатора о проб… twitter.com/i/web/status/1…
18:35Разработчики команды скорости сами разрабатывают метрики, пишут инструменты, оптимизируют код. Это разные области з… twitter.com/i/web/status/1…
19:31Некоторое время назад было принято решение использовать React на Поиске. Это большой челлендж для сохранения скорос… twitter.com/i/web/status/1…
20:08Страница выдачи очень вариативная, многие запросы задаются первый и последний раз в жизни.
Поэтому JS бандлов, кот… twitter.com/i/web/status/1…
21:13Опрос на ночь. Из серии тем про выгорание, life-work balance и прочее такое.
Как вы оцениваете свой запас сил во в… twitter.com/i/web/status/1…
21:53# Воскресенье 14 твитов
Синдром хронической усталости, выгорание, депрессия – всё это я испытывал, но больше не хочу.
Порой нахожусь где-т… twitter.com/i/web/status/1…
13:14Что ж, вот и закончилась наша неделя. Я не заходил в Твиттер с 2018 года, а тут зашёл и прямо понравилось.
Продол… twitter.com/i/web/status/1…
19:38