• Google Pagespeed,自动压缩优化JS/CSS/Image


    Google Pagespeed,自动压缩优化JS/CSS/Image
    
     
    浏览:257 发布日期:2015/07/05 分类:技术分享 关键字: Nginx Appache Pagespeed 自动压缩优化JS/CSS/Image
    这个周末,把服务器的Nginx升级了下,并加入了Google Pagespeed模块
    效果很明显:
    页面加载的多个JS、CSS会自动合并压缩处理
    发现新版本的Pagespeed能很好的发现处理用户加载的第三方JS库,如jQuery
    发现新版本的lazyload_images处理的很好
    
    注意:CSS代码里含有背景图片这类的,要注意下图片的路径改为绝对路径,否则会导致图片引用部分404错误
    
    具体请参考:https://developers.google.com/speed/pagespeed/
    
    我的安装体验过程记录如下给大家分享:
    
    (1)检查下NGINX是否有modules目录,没有则创建下
    # mkdir /usr/local/nginx/modules
    
    (2) 下载和解压缩
    # cd /usr/local/src
    
    # NPS_VERSION=1.9.32.4
    
    # wget https://github.com/pagespeed/ngx_pagespeed/archive/release-${NPS_VERSION}-beta.zip
    # unzip release-${NPS_VERSION}-beta.zip
    # cp -a ngx_pagespeed-release-${NPS_VERSION}-beta /usr/local/nginx/modules/
    # rm -rf release-${NPS_VERSION}-beta.zip
    # rm -rf ngx_pagespeed-release-${NPS_VERSION}-beta
    
    # cd /usr/local/nginx/modules/ngx_pagespeed-release-${NPS_VERSION}-beta/
    # wget https://dl.google.com/dl/page-speed/psol/${NPS_VERSION}.tar.gz
    # tar -xzvf ${NPS_VERSION}.tar.gz # extracts to psol/
    
    (3)重新编译 Nginx with support for pagespeed
    http://nginx.org/en/download.html
    注意:如果已安装Nginx请使用升级脚本(修改增加配置选项)来重新升级编译NGINX
    
    # cd /usr/local/src
    # NGINX_VERSION=1.8.0
    
    # wget http://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz
    # tar -xvzf nginx-${NGINX_VERSION}.tar.gz
    # cd nginx-${NGINX_VERSION}/
    # ./configure --add-module=/usr/local/nginx/modules/ngx_pagespeed-release-${NPS_VERSION}-beta
    # make
    # make install
    
    确认下ngx_pagespeed模块已添加到安装的Nginx系统上
    # /usr/local/nginx/sbin/nginx -V
    
    (4)创建将由Nginx写入的一个文件缓存目录
    
    $ mkdir /tmp/ngx_pagespeed_cache
    $ chown www:www /tmp/ngx_pagespeed_cache
    注意:可以将缓存目录的创建及清除工作交个启动任务脚本
    
    (5)修改配置Nginx中的ngx_pagespeed模块
    想启用并配置ngx_pagespeed,就要编辑Nginx配置的server部分。
    
    
    下面是我网站的配置,请参考
    common_pagespeed.conf文件是独立文件,在需要开启pagespeed服务的虚拟主机文件中加载此文件(请加载在php rewrite配置之前)
    ------------------------------------
    conf/common_pagespeed.conf;
    ------------------------------------
    # 启用ngx_pagespeed
    pagespeed on;
    pagespeed FileCachePath /tmp/ngx_pagespeed_cache;
    # 禁用CoreFilters
    pagespeed RewriteLevel PassThrough;
    # 启用压缩空白过滤器
    pagespeed EnableFilters collapse_whitespace;
    # 启用JavaScript库卸载
    pagespeed EnableFilters canonicalize_javascript_libraries;
    # 把多个CSS文件合并成一个CSS文件
    pagespeed EnableFilters combine_css;
    # 把多个JavaScript文件合并成一个JavaScript文件
    pagespeed EnableFilters combine_javascript;
    # 删除带默认属性的标签
    pagespeed EnableFilters elide_attributes;
    # 改善资源的可缓存性
    #pagespeed EnableFilters extend_cache;
    # 更换被导入文件的@import,精简CSS文件
    pagespeed EnableFilters flatten_css_imports;
    pagespeed CssFlattenMaxBytes 5120;
    # 延时加载客户端看不见的图片
    pagespeed EnableFilters lazyload_images;
    # 启用JavaScript缩小机制
    pagespeed EnableFilters rewrite_javascript;
    # 启用图片优化机制
    #pagespeed EnableFilters rewrite_images;
    # 预解析DNS查询
    pagespeed EnableFilters insert_dns_prefetch;
    # 重写CSS,首先加载渲染页面的CSS规则
    pagespeed EnableFilters prioritize_critical_css;
    
    # And no extraneous headers get set.
    location ~ ".pagespeed.([a-z].)?[a-z]{2}.[^.]{10}.[^.]+" { add_header "" "";}
    location ~ "^/pagespeed_static/" {}
    location ~ "^/ngx_pagespeed_beacon$" {}
    location /ngx_pagespeed_statistics { allow 127.0.0.1; deny all; }
    location /ngx_pagespeed_global_statistics { allow 127.0.0.1; deny all; }
    location /ngx_pagespeed_message { allow 127.0.0.1; deny all; }
    location /pagespeed_console { allow 127.0.0.1; deny all; }
    location ~ ^/pagespeed_admin { allow 127.0.0.1; deny all; }
    location ~ ^/pagespeed_global_admin { allow 127.0.0.1; deny all; }
    # Add no rewrite if you site set rewrite 
    if ($request_uri ~ "(pagespeed_([^.]+)/(.*)?)") { break; }
    if ($request_uri ~ "(ngx_pagespeed_([^.]+)/(.*)?)") { break; }
    
    
    注意:ThinkPHP如果启用了rewrite,需要排除下Google Pagespeed 特殊的请求路径
    我在测试时,发现开启图片延时加载时,有很多图区启用延迟加载后请求会报404错误,发现请求都被转发交给ThinkPHP处理啦,
    解决方式如下在server{rewrite}脚本转发之前添加如下代码,我的一并放入conf/common_pagespeed.conf文件;
    
    if ($request_uri ~ "(pagespeed_([^.]+)/(.*)?)") { break; }
    if ($request_uri ~ "(ngx_pagespeed_([^.]+)/(.*)?)") { break; }
    
    注意:如果使用了TP官方麦当苗儿Thinkbox这个JQ插件
    你会发现,JS报错,请前端工程师排查了下发现是经过pagespeed自动压缩合并后,includeCss这个机制的问题,前端适当重写了下就OK啦
    前端还同时改写了他base.js库,注意js中的命名污染及变量范围,我们网站有几个专题页面,启用后发现JS报错,未启用前OK,最后基本都是这个原因
    
    
    
    优化效果如下
    自动处理页面加载的CSS文件,这个机制很赞,多个重用度高的外联CSS文件都被合并压缩了,重用度很低的文件直接添加到了html的header头
    
    
    
     
    阿里云
     
  • 相关阅读:
    C# 两个List泛型用lamada表达式去重复数据 或者 得到重复数据
    基于模版文件复制替换的abpcore代码生成器(一)
    基于数据库的vs2019的T4模版代码生成器(二)基于mysql数据库
    基于数据库的vs2019的T4模版代码生成器(一)基于sqlserver数据库
    前后端分离开发vue+Elementyui+abpcorewebapi商城管理系统(十六)项目总结
    前后端分离开发vue+Elementyui+abpcorewebapi商城管理系统(十五)项目上线
    前后端分离开发vue+Elementyui+abpcorewebapi商城管理系统(十四)项目优化
    前后端分离开发vue+Elementyui+abpcorewebapi商城管理系统(十三)报表开发
    前后端分离开发vue+Elementyui+abpcorewebapi商城管理系统(十二)订单列表页面
    前后端分离开发vue+Elementyui+abpcorewebapi商城管理系统(十一)之二 添加商品页面
  • 原文地址:https://www.cnblogs.com/archoncap/p/4941315.html
Copyright © 2020-2023  润新知