2017-02-23 44 views
0

成功将http2包含在apache2中后。我正面临服务器推送的问题。我在网站上有4-5个CSS,4-5个JS和100个图像。那么,我将如何使用多个资产?在服务器推送中包含Http2头文件(包括css,js和php文件)

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

所以我必须头为每个资产,如果我有100个资产会有100头左右

+0

是的。你必须做1 1. –

+0

你也需要在发送真正的内容之前使用头功能 –

+0

@KoalaYeung无法在htaccess中完成或者告诉代码,如果.css扩展名使其成为服务器推送 –

回答

1

的替代解决方案加入Link头和具有阿帕奇分析它们与推动相关联的资源,自然地将次要资源(如js,css)和映像文件关联到主资源。

这是我们在Jetty中采取的方法(免责声明,我是该解决方案的实现者)。

我们使用此解决方案基于WordPress,通过使用HTTP/2 Push的HTTP/2来为我们自己的网站提供服务。

该方法在此呈现:slides,video

其基本思想是当浏览器收到一个HTML页面时,它立即解析它并执行下载次要资源(如jscss文件)所需的请求。 在这种情况下,服务器Jetty可以将主资源(html)与辅助资源相关联。

下一次同一html页面的请求到达时,Jetty已经知道需要的辅助资源是什么,并且可以推送它们。 不需要Link标题,因为Jetty会从浏览器执行的请求模式中“学习”页面所需的资源。

这种方法可以基于基础进行微调,但可以正常工作并提供显着的性能改进,请参阅上面链接的视频中的here for the live demo

我推荐阅读/观看有关HTTP/2和HTTP/2 Push的更大背景的整个幻灯片/视频,但重要的是Jetty + PHP与HTTP/2的组合是HTTP/2推送,不需要更改PHP页面 - 使用PHP或Drupal等PHP框架时,这是完美的选择,并且可以避免将100多种Link标题添加到PHP页面。

+0

所以我们不能从其他服务器推送图像,例如在我的服务器中推送来自http://google.com/logo.png的图像 –

+0

你可以从你自己的服务器推送图像,但不能从其他服务器推送图像服务器。 – sbordet

+0

是否有任何http2服务器的不良影响,因为我们升级http1到http2与服务器的实现我们无法看到剧烈的变化。 –

0

只是推动真正需要的东西,否则你可能最终没有性能优势。

这就是我如何添加一个图标,字体:

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

不要忘记设置使用多个链接头时替换=假。