版权所有,转载请注明来源http://gogo1217.iteye.com,违者必究!
在做WEB企业应用时,都会涉及到的CSS和JS的编写。随着项目的推进,这些文件如果写在同一个文件中,造成维护的困难,找一个需要修改的地方很麻烦。所以,好的做法是根据JS的功能划分为多个小的JS文件,页面通过某种方式间接引用这些小的JS文件。
这里推荐yahoo的一个js/css压缩工具YUI Compressor ,目前最新版本是2.4.6。
1.下载文件后,新建工程目录如下所示:
2.ant脚本及配置文件如下:
ant脚本build.xml文件代码如下:
由于在实际项目中,我们需要对不同的目录的资源文件压缩,因此一般通过循环完成多个目录的压缩。在本配置文件中,使用了额外的一个ant任务扩展包ant-contrib,下载地址为:http://ant-contrib.sourceforge.net/. 该包在ant的基础上扩展了多个自定义任务。
<?xml version="1.0" encoding="UTF-8"?> <project name="yui-compressor-demo" basedir="." default="yui-compress"> <description> yui-compressor-demo create by gogo1217 2011-9-4 http://gogo1217.iteye.com/ </description> <!--导入配置文件 --> <property file="build.properties" /> <tstamp> <format property="build.time" pattern="yyyy-MM-dd-HH-mm" /> </tstamp> <!--设置ant-contrib.jar用于逻辑判断 --> <taskdef resource="net/sf/antcontrib/antlib.xml"> <classpath> <pathelement location="${lib.build.antcontrib}" /> </classpath> </taskdef> <!--设置编译环境 --> <path id="build.classpath"> <fileset dir="${lib.build}"> <include name="*.jar" /> </fileset> </path> <!-- 创建build相关目录 --> <target name="init"> <delete dir="${deploy.dir}" /> <mkdir dir="${deploy.resource}" /> </target> <!--压缩合并css、js文件 --> <target name="yui-compress" depends="init"> <!-- 由于需要对css和js压缩,因此使用antcontrib ant扩展来做循环判断 --> <for list="${resources.include}" param="resoucesPath"> <!-- param表示在迭代的变量,使用时为@{resourcesPath} --> <sequential> <!--创建资源目录 --> <mkdir dir="${deploy.resource}/@{resoucesPath}/" /> <!--合并小文件为一个资源文件 --> <concat destfile="${deploy.resource}/@{resoucesPath}/demo-src.@{resoucesPath}" fixlastline="true" encoding="UTF-8"> <fileset dir="${resource.dir}/@{resoucesPath}"> <exclude name="demo.@{resoucesPath}" /> </fileset> </concat> <!--压缩资源文件 --> <apply executable="java" parallel="false" failonerror="true"> <fileset dir="${deploy.resource}/@{resoucesPath}"> <include name="*.@{resoucesPath}" /> </fileset> <arg line="-jar" /> <arg path="${lib.build.yuicompressor}" /> <arg line="--charset UTF-8" /> <srcfile /> <arg line="-o" /> <mapper type="glob" from="*.@{resoucesPath}" to="${deploy.resource}/@{resoucesPath}/demo-min.@{resoucesPath}" /> <targetfile /> </apply> </sequential> </for> </target> </project>
build.properties配置文件代码如下:
##工程根目录 project.dir=.. ##app目录 resource.dir=${project.dir}/resources resources.include=css,js ##依赖包 lib.dir = ${project.dir}/lib lib.build=${lib.dir}/build lib.build.yuicompressor= ${lib.dir}/build/yuicompressor-2.4.6.jar lib.build.antcontrib= ${lib.dir}/build/ant-contrib-1.0b3.jar #发布目录 deploy.dir=${project.dir}/deploy deploy.resource=${deploy.dir}/resources
3.在build.xml上右键,选择“Run-As”-》“Ant Build”,控制台结果为:
4.工程中新建了目录deploy及相关的子目录如下所示:
其中 demo-src.css和demo-src.js为压缩后的源文件,发布时,带上源文件便于使用者能覆盖重写和查找问题。demo-min.css和demo-min.js为压缩后的代码。
demo-src.js源码如下:
/** * @description mi命名空间 * @namespace mi命名空间 * @version 0.1 */ var mi = { /** * 设置cookie * * @param {String} * name cookie name * @param {Object} * value cookie value * @param {Number} * days 保持天数,单位天 0表示永久不实效,小于0表示立马实效 */ setCookie : function(name, value, days) { if(name && value) { var expires = ''; if(days) { var d = new Date(); d.setTime(d.getTime() + days * 24 * 60 * 60 * 1000); expires = '; expires=' + d.toGMTString(); } document.cookie = name + '=' + encodeURIComponent(value) + expires + '; path=/'; } }, /** * 读取cookie * * @param {String} * sName cookie内的名称 * @returns {Object} 该cookie的内容 */ getCookie : function(name) { var cookieValue = null; if(document.cookie && document.cookie != '') { var cookies = document.cookie.split(';'); for(var i = 0; i < cookies.length; i++) { var cookie = jQuery.trim(cookies[i]); if(cookie.substring(0, name.length + 1) == (name + '=')) { cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); break; } } } return cookieValue; }, /** * 删除cookie * * @param {String} * name 所要删除cookie中的名称 */ removeCookie : function(name) { this.setCookie(name, '', -1); } }; /** * @namespace 表单相关 * @version 0.1 */ mi.form = { };
demo-min.js源码如下:
var mi={setCookie:function(b,c,f){if(b&&c){var a="";if(f){var e=new Date(); e.setTime(e.getTime()+f*24*60*60*1000);a="; expires="+e.toGMTString()} document.cookie=b+"="+encodeURIComponent(c)+a+"; path=/"}}, getCookie:function(a){var e=null;if(document.cookie&&document.cookie!="") {var d=document.cookie.split(";");for(var c=0;c<d.length;c++) {var b=jQuery.trim(d[c]);if(b.substring(0,a.length+1)==(a+"=")) {e=decodeURIComponent(b.substring(a.length+1));break}}}return e}, removeCookie:function(a){this.setCookie(a,"",-1)}};mi.form={};
由于排版问题,因此本是一行现实的demo-min.js被换行成多行了。
压缩的好处
上面对比可以看出yui-compress能将删除 全部 的 注释、 换行和 多余的 空白字符 ,并且将中间变量简化为单个字符 ,从而大大的减少js和css文件的体积。将页面的资源文件压缩在一个文件中,从而减少页面的请求次数,也减少了服务器的压力和提高了页面的相应速度,是页面的优化的一项重要的措施。
文件拆分后页面引入的统一措施
由于将css和js文件拆分为多个文件,如果不做处理,开发时页面的需要引入多个文件,但在发布时确只需要引入单个文件。为了统一开发和发布的环境,css可以通过@import命令达到统一,而js可以通过js添加javascript标签动态引入所拆分的小的js达到统一,如在本例中,页面只需要引入demo.css和demo.js即可。
在实际开发中,可能还会遇到不同的页面引入不同的css,但是又会引入共同的css的情况,这均可以通过concat命令生成单个文件完成。
demo.css示例
@import url(00-clean.css); @import url(01-global.css); @import url(02-form.css);
demo.js示例
getContextPath = function() { var contentPath = ''; var link = document.getElementsByTagName('script'); for(var q = 0; q < link.length; q++) { var h = !!document.querySelector ? link[q].src : link[q].getAttribute("src", 4), i; if(h && ( i = h.indexOf('resources/js/demo.js')) >= 0) { var j = h.indexOf('://'); contentPath = j < 0 ? h.substring(0, i - 1) : h.substring(h.indexOf('/', j + 3), i - 1); return contentPath; } }; return contentPath; } importJS = function(url) { document.write('<script type="text/javascript" src="' + getContextPath() + '/resources/js/' + url + '"></script>'); } importJS('00-common.js'); importJS('11-form.js');
本文中的实例工程打包下载:
yui-compressor-demo.rar (991 KB)
相关推荐
- **代码预处理**:在使用YUI Compressor之前,可以先对代码进行模块化管理,比如使用CommonJS或AMD规范,以便于压缩合并。 - **CDN加速**:压缩后的静态资源可以放在CDN(内容分发网络)上,利用其缓存机制,进一步...
标题 "ant和yuicompressor 压缩css、js方案" 涉及到的是在软件开发中如何使用构建工具Ant以及JavaScript压缩工具YUI Compressor来优化前端资源,特别是CSS和JavaScript文件。这两个工具在Web开发中起着至关重要的...
1. **使用方法**:yuicompressor可以通过命令行接口或集成在构建系统中使用,提供对JS和CSS的压缩支持。 2. **选项设置**:它提供了多种配置参数,如是否保留注释、是否启用CSS压缩等,以满足不同需求。 3. **兼容性...
1. **yuicompressor**:yuicompressor是一款由Yahoo开发的开源JavaScript和CSS压缩工具。它能够去除代码中的空格、换行和不必要的注释,从而减少文件大小,提高页面加载速度,优化网页性能。yuicompressor支持Gzip...
例如,你可以先用Closure Compiler将JavaScript文件压缩到最小,然后使用YUI Compressor处理CSS文件,从而达到最佳的前端性能优化效果。 此外,为了便于开发者使用这些工具,社区还提供了许多自动化构建工具,如...
- **UglifyJS**:专为JavaScript压缩设计,支持ES6及更高版本,但不处理CSS。 - **Closure Compiler**:谷歌的JavaScript压缩工具,提供了高级优化,但可能对代码结构有更严格的要求。 - **CSSNano**:专门针对CSS的...
在IT行业中,优化网站性能是至关重要的,其中一项关键技术就是对JavaScript(js)和CSS(css)文件进行压缩和合并,以减少页面加载时间。"js压缩工具 批处理"这个主题聚焦于如何通过自动化工具有效地处理这些任务。...
使用压缩工具是前端性能优化的关键一环,还有其他如CDN(内容分发网络)用于加速静态资源的加载,延迟加载(Lazy Loading)以减少首屏加载时间,以及代码分割来按需加载资源等策略。结合这些方法,可以显著提升网页...
的YUI Compressor也是一个常用的CSS和JavaScript压缩工具,它能有效地去除代码中的冗余部分,进一步优化文件大小。 **混淆与压缩的结合** 在实际应用中,混淆和压缩通常会一起使用,以实现双重保护和性能优化。混淆...
CSS压缩工具包括CSSNano和YUI Compressor。 **混淆:** 混淆是JS压缩的一个进阶操作,它主要是为了保护代码不被轻易阅读和理解。混淆工具会将变量名和函数名替换为无意义的字符串,增加逆向工程的难度。例如,`...
它支持多种编译器和压缩器,包括Less、Sass(SCSS)等预处理器,以及UglifyJS(JavaScript)和YUI Compressor(CSS和JS)等压缩工具。这使得开发者可以充分利用这些工具的强大功能,同时无需担心部署时的资源优化...
YUI Ant 使得开发者可以方便地在构建流程中整合YUI Compressor,自动对项目中的JavaScript和CSS文件进行压缩,确保在发布时,前端资源已经进行了优化处理。 前端性能优化不仅仅局限于代码压缩。其他关键点还包括: ...
- **CSS/JS 压缩**: 使用如`yuicompressor`或`uglifyjs`等第三方库,对CSS和JavaScript进行压缩,去除空格、注释和不必要的字符,进一步减小文件大小。 **3. 使用流程** 安装`django_compressor`通常是通过pip...
3. **资源压缩**:合并后的文件会被选定的压缩器进行压缩,例如使用 YUI Compressor 或 Closure Compiler 对 JavaScript 进行压缩,使用 CSSMin 对 CSS 进行压缩。 4. **资源版本化**:为了有效利用浏览器缓存,Jawr...
9. **压缩JavaScript和CSS**:使用JSMin和YUI Compressor等工具压缩JavaScript和CSS,减少文件大小,加快传输速度。 10. **避免重定向**:重定向会导致额外的HTTP请求,影响加载速度。尽量减少不必要的重定向,特别...
11. **压缩CSS和JS**:使用工具如JSMin和YUI Compressor来减小文件大小。 12. **避免重复的JS和CSS**:消除重复引用,减少不必要的HTTP请求和计算。 13. **配置ETags**:利用ETags机制来判断缓存内容与服务器内容...
例如,使用Yahoo提供的`yuiCompressor`工具,不仅可以合并文件,还能压缩代码,进一步减小文件大小。 2. **CSS Sprites**: - CSS精灵技术允许将多个小图片合并到一张大图中,通过设置CSS背景图像的位置来显示所...
此外,还包括其他性能优化策略,如YUI Compressor和Closure Compiler来压缩JavaScript代码。 5. 响应式设计:PDF可能会讨论如何利用HTML5 Boilerplate的移动优先策略和媒体查询来创建适应不同设备屏幕尺寸的网站。 ...
3. **资源文件压缩**:利用工具如YUI Compressor对JS和CSS文件进行压缩,并使用HTML Compressor对JSP文件进行压缩,进一步减小文件体积。 4. **合并重复资源**:检查并合并重复的资源链接,确保每个资源只被加载一次...