服务端合并和压缩JS和CSS文件(3)
来源:随网之舞 发布时间:2010-06-11 18:23:00
5. 使用Minify
比如,有两个JavaScript文件,http://localhost/example/a.js,http://localhost/example/b.js,那么使用Minify合并的URL是http://localhost/min/f=/example/a.js,/example/b.js,直接把这个URL放到页面中就可以使用了。
实际上Minify不仅仅实现了合并功能,同时默认在合并的同时还会对文件进行精简压缩,如果你在本地本身就对文件进行压缩了,比如使用YUI Compressor,那么可以在config.php中进行如下设置取消Minify的压缩以提升性能:
$min_serveOptions['minifiers']['application/x-javascript'] = '';
$min_serveOptions['minifiers']['text/css'] = '';
如果服务端支持Java,那么也可以对Minify进行简单配置而实现利用YUI Compressor压缩JavaScript和CSS文件。
直接在服务端进行合并和压缩,这非常的灵活,也极大的减轻了前端开发成果的部署过程,真使事半功倍。更多配置请看Minify CookBook和Wiki
在YUI3中使用Minify
在YUI2中,合并机制只支持库本身的文件,自定义的文件会单独一一加载。从YUI3开始,模块变得更小,这样就导致使用合并时URL会变长,但在IE下URL的最大值是2083,Apache默认的URL最大值是8192,所以当URL在对应浏览器下超出最大值时,YUI3会自动根据浏览器判断进行拆分成多个合并的URL,并且还提供maxURLLength来设置最大值。而从YUI3.1.0开始,不仅仅支持自定义文件的合并,还支持可以使用多个提供合并服务的CDN,即可以对YUI组件使用http://yui.yahooapis.com这个CDN,其余文件使用其他支持合并的CDN,这样非常的实用、方便和灵活。示例在YUI3中使用Minify就说明了这点。
由于YUI默认URL的合并形式和Minify的不相同,所以在YUI实例化时需要利用正则替换来实现YUI3支持Minify的URL合并形式,但这种方式既不灵活,且有风险,不友好又效率低。比较简单的方式是直接修改YUI 3的源码,如示例在修改后的YUI3中使用Minify。同时,YUI 3.1.*的版本有一个bug,即同时合并JavaScript和CSS时,较短的那个URL结尾处多一个&符号,如示例在YUI3中使用Minify中:
/file/UploadPic/20106/11/widget-33.css&
3.1.1/build/console/assets/skins/sam/console.css&
http://dancewithnet.com/min/b=yui&f=3.1.1/tabview/assets/
skins/sam/tabview.css&
这两种都可以使用,虽然在早期的IE浏览器版本(如IE6)中会有无法解析的风险,且影响某些特定情况下的缓存,但当使用修改后的YUI时,合并的URL变成类似/min/b=yui&f=3.1.1/tabview/assets/skins/sam/tabview.css,的样子,就会出现bug了。对于YUI的Combo Handler来说这是一个小bug,所以YUI3把这个bug设置为P5。但当我们改造YUI3来更好的支持Minify时,还要解决这个问题,具体方案请看示例在修改后的YUI3中使用Minify。
在CDN上使用Minify
CDN的全称是Content Delivery Network,即内容分发网络。其最常应用就是通过位于不同地理位置的服务器把静态资源部署到用户最近的边缘,这样能有效解决Web服务中大量静态资源的速度和性能问题。由于实施成本比较高,所以在实际的应用中,大型公司一般会组建自己的CDN,而小型公司只能租借第三方的CDN,但不管怎样这两种方式都不会影响在服务端实施合并和压缩程序。一般情况下,静态资源也并不是直接上传到CDN,而是先传到一台后台服务器,然后各地CDN的前端Cache服务器按需索取。YUI CDN的Combo Handler就是部署在其后台服务器上的,Minify也应如此。简单图示如下:
当一个资源请求到CDN时,CDN会先检查本地是否存在这个资源,如果有则会直接返回该资源,如果没有则会请求其后台服务器,后台服务器会依据资源URL的信息进行相应的处理,然后返回给CDN,CDN就会存储这个资源,再次出现这个资源请求时就无需请求后台服务器了。所以,虽然合并特别是压缩JavaScript和CSS文件是消耗时间的,但是由于只需要第一次,并且第一次基本上由我们自己访问掉(我们可以创建程序自动进行一次访问来保证,实际上图片优化也可以采用这种方式),所以基本上很安全。这正是目前在口碑网实施的JavaScript和CSS合并方案,在第4届D2的《前端性能优化和自动化》中也介绍了它。
原文:http://dancewithnet.com/2010/06/08/minify-js-and-css-files-in-server/


猜你喜欢
- 网站主题就是一辆车。一个网站因为拥有一个热门主题而被网友广知,一个网站因为拥有一个知名主题而四处扩张。主题就象是一架马车,肩负着网站的使命四
- 千橡互动集团CEO兼董事长陈一舟(陈一舟新闻,陈一舟说吧)在日前举行的中国国际数字娱乐领袖峰会上表示,目前中国原创网络游戏发展面临的三大挑战
- 在centos7中,/etc/rc.d/rc.local文件的权限被降低了,没有执行权限,需要给它添加可执行权限。chmod +x /etc
- 如果说中国的SEOer是“掘金者”,那么搜索引擎就是“金子”,从SEO在国内的兴起也有好几年年的时间,至今能在搜索引擎挖到“金”的SEOer
- 我做了源码下载站有两个月了,在这里把这两个月做站的一点心得和感受拿出来分享下。 1.网站定位 既然打算做源码下载站,定位
- Windows2000 域名解析是基于动态DNS,动态DNS的实现是基于RFC 2136基础上的。在Windows 2000下,动态DNS是
- 有些朋友想要查看MySQL的IP地址,却不知道在那里查看,登录到Godaddy,在主机管理中的MySQL点击你要查询的Mysql的图标,进入
- 从PHP5.2.10版本开始(现在有PHP5.2.10和5.3两个版本),有None-Thread Safe与Thread Safe两种版本
- 如果你想让你的WordPress站点有CMS的风格,首页幻灯片肯定是必须的。实现WordPress首页幻灯片的插件有很多,比如D13Slid
- 一、安装POP3和SMTP服务组件Windows Server 2003默认情况下是没有安装POP3和SMTP服务组件的,因此我们要手工添加
- Dedecms还是比较不错的,当然,除了论坛的技术回复速度!!今天分享一个比较实用的关于循环调用子栏目及其内容列表的小代码,其实查看标签手册
- 北京时间4月6日消息,据国外媒体报道,微软于当地时间周六给雅虎董事会发送了一封信关于收购的“最后通牒”。这封信件要求雅虎在今后三周内接受微软
- 如何更好的达到防范黑客攻击,本人提一下个人意见!第一,免费程序不要真的就免费用,既然你可以共享原码,那么攻击者一样可以分析代码。如果在细节上
- foreach($kws as $k) { $k = trim($k); if($k!=”") { if($i > $max
- 1. 简要双网卡绑定技术在centos7中使用了teaming技术,而在rhel6/centos7中使用的是bonding技术,在cento
- Linux系统中的Netfilter提供了一个抽象、通用化的框架,该框架定义的一个子功能的实现就是包过滤子系统,框架包含以下五部分:1. 为
- 那些被封站心怀愤懑的朋友就不要看了,本帖希望能有较有深度以及技术性的讨论,而不欢迎谩骂。几个问题1、百度竞价排名开展之后的过去7年内,虽然竞
- 什么是网页快照所谓网页快照,原理是搜索引擎每收录一张网页,就会先把网页进行抓取,并且把网页内容复制并存储起来。搜索引擎并对快照进行分类整理排
- 概述本模块集中说明在您的环境中强化 IIS 服务器所需的指导和步骤。为了向组织的公司 Intranet 中的 Web 服务器和应用程序提供全
- 北京时间11月6日消息,据国外媒体报道,Facebook将为其聊天工具(Facebook Chat)提供XMPP协议支持。这意味着用户通过任