@delight
2014-05-02T20:37:06.000000Z
字数 4928
阅读 2131
pagespeed
PageSpeed只能作为apache或nginx的一个模块存在,而如果需要做forward proxy,就只能集成到apache2中 。注意PageSpeed的设计目的主要是作为反向代理供http服务器使用的,如果被用作正向代理,很多特性就不能使用了。
首先从源里安装apache2:sudo apt-get install apache2
,12.04 Ubuntu里面对应的版本是2.2,而13.10中则是2.4;接下来可以按照google官方的安装指南来进行pagespeed的安装。
一般情况下,装完mod_pagespeed后,其会自动配置好并加载。这点可以通过检测/etc/apache2/mods-enabled
目录下是否存在pagespeed.load
和pagespeed.conf
来验证,如果没有的话,可以自己使用ln -s ../mods-available/
来创建符号链接。
注意:以下配置是以apache2.4为标准的,mod_pagespeed则是使用了最新的稳定版1.6.29.7.
我们这里配置apache作为正向代理,可以参考apache的官方指南(2.2中文版,2.4英文版)但是注意debian系列的linux的配置和其他版本差别很大,是通过在mods-enabled
目录下创建符号链接来实现激活的。这里需要创建proxy.load
,proxy.conf
,proxy_connect.load
,proxy_http.load
这几个文件的符号链接。
proxy.load
中配置代理相关信息:
#代理开关
ProxyRequests On
#访问控制
<Proxy *>
AddDefaultCharset off
Require all denied
Require local
</Proxy>
ProxyPreserveHost On
ProxyStatus On
ProxyBadHeader Ignore
#允许CONNECT盲转
AllowCONNECT 443
#打开via头部
ProxyVia On
#可以添加下一跳的地址,类似squid的cache_peer parent
#ProxyRemote * http://127.0.0.1:8080
在/etc/apache2/apache2.conf
中增加ServerName xxx
一行,如果没有这个配置,apache2每次启动都会有个相关的warning;在/etc/apache2/ports.conf
中配置端口,可以添加以下信息:
<IfModule mod_proxy.c>
Listen 9999
</IfModule>
这样,正向代理的初步配置就完成了,可以使用sudo apache2ctl -t
来检测配置是否有误。默认的访问控制是Require local
的,只有本地才能连接代理,如果需要做远程测试,记得再加上Require ip myip
,可以配置浏览器测试一下能否正常工作。
PageSpeed的功能其实和ziproxy有些重复,主要也是压缩图像、优化html/css/js等文件,另外还有类似squid的控制缓存能力(这个应该来自apache本身)。
PageSpeed的优化选项比较复杂,ziproxy的html优化只是一个黑盒开关,PageSpeed则是一个暴露各种优化细节的白盒,下面是一个可选的配置(参考了这里和这里):
ModPagespeedDomain *
ModPagespeedRewriteLevel CoreFilters
ModPagespeedEnableFilters combine_heads
ModPagespeedEnableFilters combine_javascript
ModPagespeedEnableFilters convert_png_to_jpeg
ModPagespeedEnableFilters convert_jpeg_to_webp
ModPagespeedEnableFilters inline_preview_images
ModPagespeedEnableFilters make_google_analytics_async
ModPagespeedEnableFilters move_css_above_scripts
ModPagespeedEnableFilters move_css_to_head
ModPagespeedEnableFilters prioritize_visible_content
ModPagespeedEnableFilters resize_mobile_images
ModPagespeedEnableFilters sprite_images
#ModPagespeedEnableFilters defer_iframe
ModPagespeedInPlaceResourceOptimization on
ModPagespeedEnableFilters lazyload_images
ModPagespeedCriticalImagesBeaconEnabled false
ModPagespeedJsPreserveURLs on
ModPagespeedImagePreserveURLs on
ModPagespeedCssPreserveURLs on
最安全的办法是使用默认配置,即CoreFilters
,可以尽量确保页面加载没有任何问题(这也是默认配置)。PreserveURL
那几行是保证URL不被改写,因为用作正向代理时,URL一旦被改写,服务器一定返回403,这3行实际上会关闭上面有些优化选项。Beacon 对服务器的POST一般不会得到应答,也没有开的必要。
有两个比较优势的选项:resize_mobile_images
是根据UA自动裁剪图片尺寸;lazyload_images
是直到浏览才开始加载图片,前者比较实用,后者则可能有一些争议。不过ziproxy也有优势:可以根据图片大小对ImageQuality进行分段设置,这点pagespeed暂时没提供相关选项(但是有按图片类型的压缩质量分类)。
配置中和图像质量相关的选项包括:
# Settings for image optimization:
#
# Lossy image recompression quality (0 to 100, -1 just strips metadata):
ModPagespeedImageRecompressionQuality 75
#
# Jpeg recompression quality (0 to 100, -1 uses ImageRecompressionQuality):
ModPagespeedJpegRecompressionQuality -1
ModPagespeedJpegRecompressionQualityForSmallScreens 75
#
# WebP recompression quality (0 to 100, -1 uses ImageRecompressionQuality):
ModPagespeedImageWebpRecompressionQuality 75
ModPagespeedImageWebpRecompressionQualityForSmallScreens 75
#
# Timeout for conversions to WebP format, in
# milliseconds. Negative values mean no timeout is applied. The
# default value is -1:
# ModPagespeedImageWebpTimeoutMs 5000
#
# Percent of original image size below which optimized images are retained:
# ModPagespeedImageLimitOptimizedPercent 100
#
# Percent of original image area below which image resizing will be
# attempted:
# ModPagespeedImageLimitResizeAreaPercent 100
# Settings for inline preview images
#
# Setting this to n restricts preview images to the first n images found on
# the page. The default of -1 means preview images can appear anywhere on
# the page (if those images appear above the fold).
# ModPagespeedMaxInlinedPreviewImagesIndex -1
# Sets the minimum size in bytes of any image for which a low quality image
# is generated.
# ModPagespeedMinImageSizeLowResolutionBytes 3072
由于二者可配置的选项差别较大,很难进行很公平的对比测试。这里将二者的图像压缩质量都设置为75%左右,分别加载alexa top 100cn进行流量测试,结果显示在80%左右的情况下ziproxy的压缩效果要更好一些(ziproxy用默认设置,没有打开页面优化),如下图所示:
上图是去除了明显不合理结果后(比如超时返回0)PageSpeed与Ziproxy加载同一个网页的流量差,可以看出:对于80%左右的网站,ziproxy的压缩效果要更好一些,尤其是某些图片较多的网页,ziproxy的压缩效果明显更胜一筹,以下是本次测试中差值最大的10个网站的具体数据:
Addr | Direct | Ziproxy | Pagespeed | P-Z |
---|---|---|---|---|
http://www.babytree.com | 2193.97 | 1397.07 | 2215.93 | 818.86 |
http://www.kdnet.net | 2737.93 | 1883.82 | 2718.26 | 834.44 |
http://www.mama.cn | 1913.24 | 659.72 | 1736.49 | 1076.77 |
http://www.lotour.com | 3066.15 | 1825.24 | 3062.86 | 1237.62 |
http://www.china.com.cn | 2150.49 | 898.45 | 2178.56 | 1280.11 |
http://www.v1.cn | 3172.69 | 1889.61 | 3172.37 | 1282.76 |
http://www.lady8844.com | 2711.86 | 1333.55 | 2727.24 | 1393.69 |
http://www.soku.com | 2242.02 | 736.81 | 2242.28 | 1505.47 |
http://www.xywy.com | 3287.15 | 1663.39 | 3286.04 | 1622.65 |
http://www.youth.cn | 3710.69 | 1942.99 | 3688.09 | 1745.1 |
表中单位都是Kb。
经过筛选计算,本次测试中PageSpeed的平均压缩率为98.21%,而ziproxy的平均压缩率为65.93%。虽然数据可能存在一定的误差,但是从均值数据上也可以看出二者之间的差别。
下面是加载时间对比(这里使用了3个进程同步测试的方法,但是结果依然有明显误差,所以只能数据仅供参考):
上图横轴单位是毫秒。显然,大部分情况下,ziproxy压缩造成的时间消耗是多于pagespeed的,这点在意料之内。经计算,ziproxy的平均压缩时间是direct的1.11倍,而对于pagespeed,这个数值是1.08,如果均摊到本次试验的所有网页上,ziproxy比pagespeed平均多延迟0.35秒,至于这个结果究竟有多大的影响,这里不做结论。
另外,chrome beta for android声称能减少50%的流量,试验中没有看到相关页面可以达到这个数值,进一步的测试准备中。