服务端合并和压缩JavaScript和CSS文件

2019-09-09 郑州网站建设  

Web性能优化最佳实践中最重要的一条是减少HTTP请求,它也是YSlow中比重最大的一条规则。减少HTTP请求的方法主要有合并JavaScript和CSS文件、CSS Sprites、图像映射(Image Map)和使用Data URI来编码图片。CSS Sprites和图像映射现在已经随处可见了,但由于IE6和IE7不支持Data URI以及性能问题,这项技术尚未大量使用。目前大部分网页中的JavaScript和CSS文件数量和开发时一致,少量的网页会根据实际情况采取本地合并,这些合并中相当多的是有选择地手动完成,每次新的合并都需要重新在本地完成并上传到服务器,比较的随意和繁琐,同样文件的压缩也有类似的情况。而利用服务端的合并和压缩,我们就可以按照开发的逻辑尽可能让文件的颗粒度变小,利用网页中网址的规则来自动实现文件的合并和压缩,这会相当的灵活和高效。

一、YUI Combo Handler

2008年7月YUI Team宣布在YAHOO! CDN上对YUI JavaScript组件提供Combo Handler服务。Combo Handler是Yahoo!开发的一个Apache模块,它实现了开发人员简单方便地通过网址来合并JavaScript和CSS文件,从而大大减少文件请求数。比如在页面上使用YUI2的Rich Text Editor组件>需要引入多个JavaScript文件,常用方式如下:

<script src=http://www.divcss5.com/html5/"http:/yui.yahooapis.com/2.8.0r4/build/yahoo-dom-event/yahoo-dom-event.js"></script><script src=""></script><script src=http://www.divcss5.com/html5/"http:/yui.yahooapis.com/2.8.0r4/build/menu/menu-min.js"></script><script src=""></script><script src=http://www.divcss5.com/html5/"http:/yui.yahooapis.com/2.8.0r4/build/button/button-min.js"></script><script src=""></script>

而使用Combo Handler服务之后,则上述的代码可以写为:

<script src=http://www.divcss5.com/html5/"http:/yui.yahooapis.com/combo?2.8.0r4/build/yahoo-dom-event/yahoo-dom-event.js&2.8.0r4/build/container/container_core-min.js&2.8.0r4/build/menu/menu-min.js&2.8.0r4/build/element/element-min.js&2.8.0r4/build/button/button-min.js&2.8.0r4/build/editor/editor-min.js"></script>

除了代码的可读性稍稍有一点点降低外,使用Combo Handler服务大大的降低了HTTP请求数,同时也减少了网址代码量,这对于Web性能优化来讲至关重要。所以,随后YUI从2.6.0开始,其核心组件YUI Loader内置了Combo Handling功能,即使用YUI Loader时,通过配置combine属性就可以把要加载的多个JavaScript或CSS文件按照使用Combo Handler服务的形式合并起来,这时只要静态文件的服务器支持Combo Handler就行了。在YUI中当combine配置为true时,CDN默认是使用Yahoo! CDN(yui.yahooapis.com),所以没有任何问题。这正是YUI最迷人的地方之一。

遗憾的是yui.yahooapis.com在中国的速度并不佳,本来中国雅虎提供了cn.yui.yahooapis.com/ ,但尚未提供Combo Handler服务,同时因种种原因,其更新在YUI 2.7.0之后就停滞了。更糟糕的是Yahoo!开发的支持Combo Handler的Apache模块虽然据传有计划开源,但至少现在依旧是私有技术,要使用就需要自己实现类似功能,所以国内类似技术的应用并不太多。

二、Minify

在Google Code上有一个PHP的开源项目叫Minify它可以合并、精简、Gzip压缩和缓存JavaScript和CSS文件。其文件合并功能就特别类似Combo Handler,只不过网址的语法稍微有点不同。如果Yahoo! CDN安装了Minify,那么上面Rich Text Editor的代码用Minify的默认格式来写就是:

<script src=http://www.divcss5.com/html5/"http:/yui.yahooapis.com/min/f=2.8.0r4/build/yahoo-dom-event/yahoo-dom-event.js,2.8.0r4/build/container/container_core-min.js,2.8.0r4/build/menu/menu-min.js,2.8.0r4/build/element/element-min.js,2.8.0r4/build/button/button-min.js,2.8.0r4/build/editor/editor-min.js"></script> 1)使用Minify

本地使用Minify很简单,只需要Apache + PHP环境就OK了:

安装好Apache + PHP (Windows、Mac)。

downloadMinify模板,解压,然后把min文件夹复制到指定的根目录下,比如localhost。这时网址的写法大概是=…

启用Apache的Mod Rewrite模块,然后在min文件夹下新建.htaccess文件,并添加Rewrite规则[1]。如果不启用Mod Rewrite功能,则Minify的网址会类似?f=…,这对客户端和中间服务器的缓存不利,而启用了Mod Rewrite之后的网址类似=…,不仅解决前面问题且更短。

配置Minify,即编辑min/config.php文件[2]

使用Minify比如,有两个JavaScript文件,,http://localhost/example/b.js,那么使用Minify合并的网址是=/example/a.js,/example/b.js,直接把这个网址放到页面中就可以使用了。实际上Minify不仅仅实现了合并功能,同时默认在合并的同时还会对文件进行精简压缩,如果你在本地本身就对文件进行压缩了,比如使用YUI Compressor,那么可以在config.php中进行如下设置取消Minify的压缩以提升性能[3],如果服务端支持Java,那么也可以对。直接在服务端进行合并和压缩,这特别的灵活,也极大的减轻了前端开发成果的部署过程,真使事半功倍。更多配置请看<Minify CookBook和Wiki.

2)在YUI3中使用Minify
河南郑州做网站首选天择文化,我们专注郑州网站建设网站设计网站制作与开发,是中原地区专业的郑州网络公司,多年来我们一直努力,服务客户数百家,欢迎您的咨询。
本文链接:郑州网络公司http://tzchb.ieyo.com/dede/1571.html转载请标明出处,谢谢合作!
标签:
  • WEB
  • 优化
  • JavaScriptCS
  • 性能
  • 最佳
  • 实践