Включая заголовок для Http2, включая css, js и файлы в php для отправки на сервер

После успешного включения http2 в apache2. Я столкнулся с проблемой для сервера. У меня 4-5 css, 4-5 js и 100 изображений на сайте. Итак, как мне работать с несколькими активами?

    <link href="source" rel="stylesheet">
    <script src="source"></script>
    <img src="source">
   header('Link: </asset/to/push.js>; rel=preload; as=script')

поэтому я должен заголовки для каждого актива, если у меня есть 100 активов, будет 100 заголовков или около того


person ujwal dhakal    schedule 23.02.2017    source источник
comment
Ага. Вы должны сделать их 1 на 1.   -  person Koala Yeung    schedule 23.02.2017
comment
Также вам нужно использовать функцию заголовка перед отправкой реального контента.   -  person Koala Yeung    schedule 23.02.2017
comment
@KoalaYeung не может быть сделано в htaccess или что-то в этом роде, подскажите коду, что, если появится расширение .css, сделайте его серверным push   -  person ujwal dhakal    schedule 23.02.2017
comment
Заголовок push сервера должен быть добавлен на страницы, которым требуется актив. Например, если вашему login.php нужен css/style.css, именно файл login.php должен предоставить заголовок push-уведомления сервера.   -  person Koala Yeung    schedule 23.02.2017
comment
Ваш Apache не будет знать, какие активы вам понадобятся для определенной HTML-страницы.   -  person Koala Yeung    schedule 23.02.2017
comment
Вероятно, мы можем использовать регулярное выражение в htaccess для сопоставления файлов или расширений.   -  person ujwal dhakal    schedule 23.02.2017
comment
Это не загрузка css, которая толкает css. Это загрузка HTML / PHP, которая должна идентифицировать css или изображения, которые следует продвигать. Как вы предлагаете сделать это с помощью регулярных выражений?   -  person Koala Yeung    schedule 23.02.2017
comment
файлы, начинающиеся с .css, .js, .jpg, .png, должны быть отправлены для нашего текущего сценария, вот как :)   -  person ujwal dhakal    schedule 23.02.2017
comment
Как вы запускаете push-заголовок? Как я объяснял снова и снова, вы не можете запустить его из загрузки файла .css, .js, .jpg или .png.   -  person Koala Yeung    schedule 23.02.2017


Ответы (2)


Альтернативное решение для добавления заголовков Link и использования Apache для их разбора и передачи связанных ресурсов состоит в том, чтобы естественным образом сопоставить вторичные ресурсы, такие как js, css и файлы изображений, с первичным ресурсом.

Это подход, который мы использовали в Jetty (отказ от ответственности, я являюсь разработчиком этого решения).

Мы используем это решение для обслуживания нашего собственного веб-сайта на основе WordPress через HTTP/2 с HTTP/2 Push.

Подход представлен здесь: слайды, видео.

Основная идея заключается в том, что когда браузер получает HTML-страницу, он немедленно анализирует ее и выполняет запросы, необходимые для загрузки вторичных ресурсов, таких как файлы js и css. Сервер, в данном случае Jetty, может сопоставлять первичный ресурс (html) с вторичными ресурсами.

В следующий раз, когда поступит запрос на ту же страницу html, Jetty уже знает, какие вторичные ресурсы необходимы, и может отправить их. Нет необходимости в заголовках Link, поскольку Jetty «узнает», какие ресурсы необходимы странице, из шаблонов запросов, которые выполняет браузер.

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

Я рекомендую прочитать/посмотреть все слайды/видео для более широкого контекста HTTP/2 и HTTP/2 Push, но дело в том, что комбинация Jetty + PHP с HTTP/2 является мощным решением для HTTP/2 Push и требует никаких изменений в PHP-страницах, что идеально при использовании PHP-фреймворков, таких как WordPress или Drupal, и позволяет избежать добавления 100+ заголовков Link на ваши PHP-страницы.

person sbordet    schedule 23.02.2017
comment
поэтому мы не можем отправлять изображения с другого сервера, например, для отправки изображений с google.com/logo.png в мой сервер - person ujwal dhakal; 23.02.2017
comment
Вы можете передавать изображения со своего собственного сервера, но не с других серверов. - person sbordet; 23.02.2017
comment
есть ли какие-либо плохие последствия http2 на сервере, поскольку мы обновили http1 до http2 с внедрением сервера, мы не смогли увидеть радикальных изменений. - person ujwal dhakal; 02.03.2017
comment
Если вы не видите никакой разницы, то, возможно, вы не правильно настроили HTTP/2 Push, или используете сервер с неисправной реализацией, или ваш случай очень своеобразный (хотя он выглядит как случай, когда HTTP/2 должен работать хорошо). - person sbordet; 03.03.2017
comment
неудачная реализация? я использую с nginx и apache .. разве http2 не запущен официально с полным тестированием для этих двух? - person ujwal dhakal; 05.03.2017
comment
Даже у самого лучшего программного обеспечения есть проблемы. Просто поищите здесь, в SO, другие вопросы по HTTP/2, и вы увидите, что реализации далеки от совершенства. Не только обычные ошибки, но и оптимизации, которые могут быть сделаны только со временем и опытом, а HTTP/2 — относительно новый протокол. - person sbordet; 06.03.2017

Просто выдвигайте то, что действительно необходимо, заранее, иначе вы можете вообще не получить никакого прироста производительности.

Вот как я добавляю Icon-Font:

header("link: </fonts/icons.woff2?v=".$version.">; rel=preload; as=font; type=\"font/woff2\" nopush", false);

Не забудьте установить replace=false при использовании нескольких заголовков ссылок.

person Sascha Grindau    schedule 27.03.2017