chaihongjun.me

关于ngx_pagespeed与http2 server push优化的思考

最近一直在研究nginx端的http2 server push,百度谷歌了很多的资料,"服务器端的主动推送"成了着迷的地方。当向服务器请求一个简单的资源的时候,比如index.html,服务器还可以立即给客户端推送其他的资源,当然,这个是在服务器端事先设置好的策略。为了完成这样的策略,上一篇的博文《体验nginx端的HTTP2 Server Push》实际已经去实践了,但是,验证结果和实际的优化效果有待商榷。本篇博文,则是涉及到服务器推送和nginx的模块pagespeed的一个结合问题的思考。

默认使用了ngx_pagespeed(1.13.35.2稳定版),使用一些默认的过滤器规则会让静态资源的URL做一些变更,合并URL并重写对应的资源文件名:

关于ngx_pagespeed与http2 server push优化的思考

上图可以看到,所有的CSS文件合并到一个URL,并且文件名都重写了。由于无法预知重写之后的URL会怎么生成,因此在服务器端就无法预先书写重写之后的URL。

关于ngx_pagespeed与http2 server push优化的思考

上图是页面的headers响应内容。圈出的部分后面有nopush字样,这个也是页面真实使用到的部分。带着这样的问题,去到了pagespeed模块的github,发出了问题#Will ngx_pagespeed affect the use of http / 2 server push?

关于ngx_pagespeed与http2 server push优化的思考

开发维护人员的回复,如果想结合使用http2 server push,那么就启用过滤器 

pagespeed RewriteLevel OptimizeForBandwidth;

后面又说这样是OK的,但是和实际预想的效果可能不一样,pagespeed维护人员已经早几年就开始尝试研究优化http2 server push的工作,结果是然并卵。然后,又安利了自家产品的一个配置:

pagespeed EnableFilters hint_preload_subresources;

所以,研究的结果是,使用推荐的配置,等待pagespeed的升级优化啦

知识共享许可协议本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。作者:柴宏俊»