Re: http2 push — не планируется ли поддержка <link rel="preload"> по аналогии с заголовком Link?
Maxim Dounin
mdounin на mdounin.ru
Вс Май 3 21:02:43 UTC 2020
Hello!
On Wed, Apr 29, 2020 at 01:26:27PM -0400, gz wrote:
> > > Востребованные ресурсы из push-кэша переходят в основной и будут
> > > использованы для следующих страниц.
> > > Клиенты умеют отказываться от проталкиваемых ресурсов, уже имеющихся
> > в
> > > кэше.
> > > В крайнем случае несложно пометить клиента стандартным способом
> > через
> > > cookie.
> >
> > Проблема в том, что даже отказ от push-ресурсов - это нагрузка как
> > на сервер, так и на канал. И статистика как бы говорит нам, что в
> > среднем эти накладные расходы - больше, чем польза.
>
> Я таковой статистикой не располагаю.
Ссылку на статистику я привёл. Если вы не располагаете другой -
вероятно, другой и нет.
> Но предполагаю, что клиенту отказаться от push'а проще, чем сделать
> дополнительный запрос к ресурсу.
По ресурсам "получить push" и "сделать дополнительный запрос и
получить на него ответ" - строго одно и то же. Разница - только во
времени, полученный push будет доступен чуть раньше, что в хорошем
случае немного сократит время до показа страницы. А в плохом -
потребует передачи по сети дополнительных данных (начала push'а и
его отмены) и приведёт к увеличению времени до показа страницы.
Именно на баланс "хороших" и "плохих" случаев и стоит смотреть.
> > Что будет конкретно в вашем случае - зависит, безусловно, от
> > конкретной нагрузки и от того, насколько "в крайнем случае
> > несложно" вам будет избежать лишних push'ей. Но, повторюсь, в
> > среднем - будет хуже, потому что "в крайнем случае" никто не
> > заморачивается. Именно поэтому я начал с вопроса пробовали ли вы
> > тестировать, что получится. Подозреваю, что от банального
> > перекладывания существующих <link rel="preload"> в push'ы -
> > станет только хуже.
>
> Да, я понял Вашу точку зрения.
> Да, узкого эксперимента я не проводил.
>
> >
> https://github.com/httpwg/wg-materials/blob/gh-pages/ietf102/chrome_push.pdf
> > >
> > > Не совсем понимаю какие выводы делают авторы.
> > >
> > > Предлагают работать над приоритезацией (которая и так корректная, и
> > > регулируется preload'ом), использовать экспериментальный QUIC,
> > поддержики
> > > которого толком нет.
> >
> > Авторы ясно и однозначно показывают, что server push - в среднем
> > вредит, и в большинстве случаев лишь способ выстрелить себе в
> > ногу. И предлагают работать над другими технологиями,
> > потенциально более полезными.
> >
> > Тут важно понимать, что речь идёт про взгляд разработчиков
> > браузера, и рассказывалось это всё на HTTP working group, то есть
> > в рамках встречи людей, занимающихся разработкой протокола.
>
> Из Ваших соображений и трактовке вышеприведённого исследования складывается
> впечатление, что даже разработчики протокола не донца понимают зачем push
> нужен.
> При том, что не только они описали его в протоколе, но и сторонние
> разработчики реализовали поддержку push'а клиентах и нескольких серверах.
Зачем нужен push - все понимают. Насколько он при этом полезен
для интернета в среднем - можно выяснить только практически. Вот
есть исследование от команды одного из браузеров, которое говорит,
что в среднем - вреден.
Что до "реализовали поддержку push'а", то вот мы - всегда считали,
что полезность push'а, мягко говоря, преувеличена. Но, тем не
менее, вынуждены были реализовать, просто мотому, что пользователи
читают маркетинговые материалы, рассказывающие о новом красивом
протоколе HTTP/2 и его замечательных возможностях. А понимать,
какие недостатки есть у этих замечательных возможностей - не
пытаются.
> > (Ну и да, про приоритезацию - смешно. Нет, это не про preload,
> > это, как я понимаю, про приоритеты в рамках HTTP/2. Там самолёт с
> > бассейном и джакузи запроектирован в рамках стандарта, корректности
> > ждать не приходится.)
>
> Я о текущей примитивной приоретизации.
> Сомневаюсь, что когда-нибудь появятся инстументы точного управления ею,
> браузеры всё равно будут вынуждены использовать указания как рекомендацию.
Приоритизация в рамках стандарта HTTP/2 - это вполне конкретная
вещь, и именно она и упоминается в соответствующем докладе. И с
ней проблемы, именно потому она там и упоминается.
> > > Я прекрасно понимаю, что push — не панацея, и хотел попробовать на
> > практике
> > > проталкивание критических ресурсов, которые в любом случае
> > приоритетны и
> > > будут загружены для отрисовки.
> >
> > Именно с этого я и начал: попробуйте на практике на отдельных
> > страницах, без попыток вытаскивать версии ресурсов через SSI и вот
> > этого всего. Получите статистику, сравните.
> >
> > Сейчас же вы пришли и убеждаете разработчиков, что вам надо,
> > потому что оно точно будет лучше, но тестировать вы ничего не
> > тестировали и не хотите.
>
> Где именно и кого я в чём-то убеждал и убеждал в том, что мне нужно?
> Я задал вопрос о планах.
И получили на него ответ. А равно рекоменацию о том, с чего
начать, если вы вдруг считаете, что вам, тем не менее, надо.
Но почему-то пытаетесь спорить, убеждая меня в том, что статистика
не нужна, а надо слепо верить в теоретические рассуждения в
интернете.
> А учитывая, что использовать саму директиву http2_push затруднительно — один
> ресурс за раз, невозможность использования в if — и предвидя рекомендацию
> использовать http2_push_preload, я рассказал о том, в какую сторону пошёл и
> что уже попробовал сделать своими силами, и о том, какие возможности могли
> бы помочь в решении задачи.
Директив http2_push может быть сколько угодно. Если после
интерполяции переменных парамером оказалась пустая строка -
директива не делает ничего. То есь если хочется push'ить ресурсы
условно, то это можно сделать элементарно:
set $push "";
if ($want_push_css) {
set $push "/css/main.css";
}
http2_push $css;
Аналогично можно push'ить произвольное количество ресурсов, если
это нужно. Достаточно написать соответствующий конфиг.
> > Так это не работает. Придёте со
> > стастикой, явно показывающей плюсы - мы задумаемся над тем, как
> > облегчить вам жизнь в конфигурации с SSI. Пока же из статистике
> > есть вот только ссылка выше, из которой явно следует, что делать
> > что-либо для лучше поддержки HTTP/2 push - в среднем бессмысленно.
>
> То, о чём я рассказываю и есть эксперимент.
> Проще внедрить это на dev- или даже production-версии сайта, чем готовить
> узкие эксперименты из двух страниц.
> В случае pdocution'а можно прогнозировать значимое изменение в статистике
> загрузки страниц, в том числе по данным браузеров — в той же Метрике, Google
> Console или PageSpeed Insights.
>
> Простой эксперимент, конечно, имеет право на жизнь, но это пара страниц и
> несколько доступных браузеров и инструментов.
Ну вот для эксперимента - у вас есть все ресурсы, начиная от
собственно отдачи страниц с бекенда напрямую, без кеширования
SSI-кусков, с явно проставленными заголовками Link, и заканчивая
явной выдачей необходимых push'ей с помощью директивы http2_push.
--
Maxim Dounin
http://mdounin.ru/
Подробная информация о списке рассылки nginx-ru