Обновить

Комментарии 20

Безусловно интересный опыт, но есть пара моментов.

У вас в developer tools стоит «disabel cache». А без кеша смотреть на загрузку статики не серьезно.
Так же, с учетом кеша, возникает вопрос, а стоит ли пушать при каждом запросе такое количество статики, если она у пользователя уже есть?
Увеличение передаваемых данных скорее сделает все только хуже.
Наверное вы правы. Вот здесь Announcing Support for HTTP/2 Server Push как раз написано что пушить желательно некэшируемый контент, иначе пушинг может давать негативное влияние.
Очевидно что статья лишь пример технологии. Дальше уже бизнс логика — что пушить, когда и при каких условиях.
Например
— если зашли на главную и не видим сессии — однозначно пушить всё
— если зашли на главную и видим что пользователь уже известен и заходил не давно — можно не пушить то что не поменялось
— если зашли на главную и видим что пользователь был до обновления продакшина — пушить то что обновилось или всё, в зависимости от того какие данные в удобном виде доступны

— если зашли не на главную, но в какой-то специализированный раздел где некоторые данные критичны — пушить
— если зашли на страницу где есть динамически обновляемые данные, например графики — пушить графики
И так далее и тому подобное.
Да, эффект в основном должен создаваться при первом посещении, нарулить это можно тучей способов — отправлять/резать заголовки, кому как нравится.
Есть другой веб-сервер, тоже поддерживающий http/2, называется H2O. Там вообще из коробки функционал проверки наличия файлов в кэше браузера и на основе этого происходит пуш.
https://h2o.examp1e.net/configure/http2_directives.html#http2-casper — вот эта директива
Очень интересно: в nginx (который с 1.9.5 с http2 дружит, хотя модуль и экспериментальный) подобные push-ы, вроде как, можно сотворить путем отправки заголовков
add_header 'Link' '</asset/to/push.js>; rel=preload; as=script';

Вы же используете nghttp2 — вот в чем разница, nginx или nghttp2, если больше ничего на nghttp2 вы как бы и не настроили?
Да, nginx дружит, но как автор и написал, не полностью.
Вот ананс 1.9.5 и там четко сказано:
HTTP/2’s ‘Server Push’ feature is not supported in this release.


Воз и ныне там вроде как.
Так вы бы CHANGES смотрели, что ли :) 1.9.5 не самая свежая версия на сегодня. Но поддержки или неподдержки новых фич http2 там нет, факт.

Однако схема nghttp2 -> nginx -> apache — ох, это же «мама-не-горюй»!
для этого же есть простой prefetch в html
НЛО прилетело и опубликовало эту надпись здесь
А для чего же? В чем разница?
НЛО прилетело и опубликовало эту надпись здесь
Ну очевидно же что ПРЕДзагрузка, начинается «перед», а не «после», на то он и префетч. Это даже из названий понятно. Он начинает тянуть эти файлы, до рендеринга страницы, если еще и в паре с http/2.0, то не нужны самые затратные дополнтельные коннекты — практически тоже самое как пуш, но намного проще, это просто html! Да, будут дополнительные запросы, но зато это работает с любыми другими хостами, а пушить можно только те файлы что лежат на этом же сервере, что невозможно в крупном проекте.

P.S. 14 линков в любом случае рекомендуется собрать в 2.
Собственно даже в приведенном здесь примере видим серьезный разрыв до начала загрузки шрифтов (зачем-то аж целых 4!) с fonts.gstatic.com и как результат — они и тормозят Document Ready и далеко не на 0,3 секунды о которых написана данная статья, а их можно просто и изящно предзагрузить. Попробуйте — результат приятно удивит.
Пуш в данном случае — из пушки по воробьям.
НЛО прилетело и опубликовало эту надпись здесь
prefetch попробовать. Я уже давно разобрался и использую. Строчка в html явно проще чем вся эта по сути вредная статья.
НЛО прилетело и опубликовало эту надпись здесь
Для меня тут нет ничего нового, но с удовольствием выслушаю Ваши конкретные аргументы, свои я весьма развернуто изложил.
НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации