Pull to refresh

Comments 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
А для чего же? В чем разница?
Разница в том, что предзагрузка (prefetch) файла начинается после загрузки документа html и отправки запроса на сервер, а push подразумевает последовательную загрузку html+файл без отправки запросов.
Ну очевидно же что ПРЕДзагрузка, начинается «перед», а не «после», на то он и префетч. Это даже из названий понятно. Он начинает тянуть эти файлы, до рендеринга страницы, если еще и в паре с http/2.0, то не нужны самые затратные дополнтельные коннекты — практически тоже самое как пуш, но намного проще, это просто html! Да, будут дополнительные запросы, но зато это работает с любыми другими хостами, а пушить можно только те файлы что лежат на этом же сервере, что невозможно в крупном проекте.

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

https://tools.ietf.org/html/rfc7540#page-60
https://http2.github.io/faq/#whats-the-benefit-of-server-push
https://http2.github.io/faq/#how-can-i-use-http2-server-push
https://www.smashingmagazine.com/2016/02/preload-what-is-it-good-for/#doesnt-http2-push-cover-those-same-use-cases

Если сравнивать между собой, то пуш будет всегда быстрее префетча, поскольку нет необходимости скачивать и парсить HTML, отправлять и обрабатывать на сервере запрос. Кроме того, prefetch имеет самый низкий приоритет при предзагрузке и не позволяет управлять порядком загрузки ресурсов. Наличие атрибута prefetch не гарантирует, что браузер немедленно отправит запрос и станет загружать ресурс:

Link prefetching is a browser mechanism, which utilizes browser idle time to download or prefetch documents that the user might visit in the near future.

Важно также понимать, что пуш не является заменой или конкурентом атрибутам предзагрузки.

И прошу не писать мне (вы меня с кем-то путаете!) предложения что-то пробовать, объединять какие-то непонятные файлы и всё остальное, что не имеет непосредственного отношения к моим словам в этой ветке, начиная с замечания к вашему комментарию.
Sign up to leave a comment.

Articles