`
gogo1217
  • 浏览: 152433 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

使用yuicompressor压缩及合并js,css静态资源

阅读更多

版权所有,转载请注明来源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) 

 

  • 大小: 24.1 KB
  • 大小: 15 KB
  • 大小: 12.9 KB
2
0
分享到:
评论

相关推荐

    YUI Compressor js css压缩工具

    - **代码预处理**:在使用YUI Compressor之前,可以先对代码进行模块化管理,比如使用CommonJS或AMD规范,以便于压缩合并。 - **CDN加速**:压缩后的静态资源可以放在CDN(内容分发网络)上,利用其缓存机制,进一步...

    ant和yuicompressor 压缩css、js方案

    标题 "ant和yuicompressor 压缩css、js方案" 涉及到的是在软件开发中如何使用构建工具Ant以及JavaScript压缩工具YUI Compressor来优化前端资源,特别是CSS和JavaScript文件。这两个工具在Web开发中起着至关重要的...

    JS与css 压缩工具 yuicompressor.zip

    1. **使用方法**:yuicompressor可以通过命令行接口或集成在构建系统中使用,提供对JS和CSS的压缩支持。 2. **选项设置**:它提供了多种配置参数,如是否保留注释、是否启用CSS压缩等,以满足不同需求。 3. **兼容性...

    使用脚本+yuicompressor对js,css文件打包.pdf

    1. **yuicompressor**:yuicompressor是一款由Yahoo开发的开源JavaScript和CSS压缩工具。它能够去除代码中的空格、换行和不必要的注释,从而减少文件大小,提高页面加载速度,优化网页性能。yuicompressor支持Gzip...

    推荐2款前端代码压缩工具minifier 推荐2款压缩css代码,js代码的工具

    例如,你可以先用Closure Compiler将JavaScript文件压缩到最小,然后使用YUI Compressor处理CSS文件,从而达到最佳的前端性能优化效果。 此外,为了便于开发者使用这些工具,社区还提供了许多自动化构建工具,如...

    前端开源库-yui-compressor

    - **UglifyJS**:专为JavaScript压缩设计,支持ES6及更高版本,但不处理CSS。 - **Closure Compiler**:谷歌的JavaScript压缩工具,提供了高级优化,但可能对代码结构有更严格的要求。 - **CSSNano**:专门针对CSS的...

    js压缩工具 批处理

    在IT行业中,优化网站性能是至关重要的,其中一项关键技术就是对JavaScript(js)和CSS(css)文件进行压缩和合并,以减少页面加载时间。"js压缩工具 批处理"这个主题聚焦于如何通过自动化工具有效地处理这些任务。...

    Javascript、CSS压缩工具(支持批量压缩)

    使用压缩工具是前端性能优化的关键一环,还有其他如CDN(内容分发网络)用于加速静态资源的加载,延迟加载(Lazy Loading)以减少首屏加载时间,以及代码分割来按需加载资源等策略。结合这些方法,可以显著提升网页...

    web代码混淆方案.混淆js代码,压缩css代码

    的YUI Compressor也是一个常用的CSS和JavaScript压缩工具,它能有效地去除代码中的冗余部分,进一步优化文件大小。 **混淆与压缩的结合** 在实际应用中,混淆和压缩通常会一起使用,以实现双重保护和性能优化。混淆...

    JS和CSS压缩混淆

    CSS压缩工具包括CSSNano和YUI Compressor。 **混淆:** 混淆是JS压缩的一个进阶操作,它主要是为了保护代码不被轻易阅读和理解。混淆工具会将变量名和函数名替换为无意义的字符串,增加逆向工程的难度。例如,`...

    Python-jinjaassetscompressor一个Jinja扩展用来编译和压缩你的资源

    它支持多种编译器和压缩器,包括Less、Sass(SCSS)等预处理器,以及UglifyJS(JavaScript)和YUI Compressor(CSS和JS)等压缩工具。这使得开发者可以充分利用这些工具的强大功能,同时无需担心部署时的资源优化...

    前端性能优化

    YUI Ant 使得开发者可以方便地在构建流程中整合YUI Compressor,自动对项目中的JavaScript和CSS文件进行压缩,确保在发布时,前端资源已经进行了优化处理。 前端性能优化不仅仅局限于代码压缩。其他关键点还包括: ...

    Python库 | django_compressor-2.2-py2.py3-none-any.whl

    - **CSS/JS 压缩**: 使用如`yuicompressor`或`uglifyjs`等第三方库,对CSS和JavaScript进行压缩,去除空格、注释和不必要的字符,进一步减小文件大小。 **3. 使用流程** 安装`django_compressor`通常是通过pip...

    jawr使用

    3. **资源压缩**:合并后的文件会被选定的压缩器进行压缩,例如使用 YUI Compressor 或 Closure Compiler 对 JavaScript 进行压缩,使用 CSSMin 对 CSS 进行压缩。 4. **资源版本化**:为了有效利用浏览器缓存,Jawr...

    提高页面加载速度的若干方式 .doc

    9. **压缩JavaScript和CSS**:使用JSMin和YUI Compressor等工具压缩JavaScript和CSS,减少文件大小,加快传输速度。 10. **避免重定向**:重定向会导致额外的HTTP请求,影响加载速度。尽量减少不必要的重定向,特别...

    SEO前端规范的21条军规.pdf

    11. **压缩CSS和JS**:使用工具如JSMin和YUI Compressor来减小文件大小。 12. **避免重复的JS和CSS**:消除重复引用,减少不必要的HTTP请求和计算。 13. **配置ETags**:利用ETags机制来判断缓存内容与服务器内容...

    前端工程师-高级WEB网站前端开发减少请求数指南.docx

    例如,使用Yahoo提供的`yuiCompressor`工具,不仅可以合并文件,还能压缩代码,进一步减小文件大小。 2. **CSS Sprites**: - CSS精灵技术允许将多个小图片合并到一张大图中,通过设置CSS背景图像的位置来显示所...

    PDF-Html5BoilerplateWebDevelopment-英文版.rar

    此外,还包括其他性能优化策略,如YUI Compressor和Closure Compiler来压缩JavaScript代码。 5. 响应式设计:PDF可能会讨论如何利用HTML5 Boilerplate的移动优先策略和媒体查询来创建适应不同设备屏幕尺寸的网站。 ...

    网站优化

    3. **资源文件压缩**:利用工具如YUI Compressor对JS和CSS文件进行压缩,并使用HTML Compressor对JSP文件进行压缩,进一步减小文件体积。 4. **合并重复资源**:检查并合并重复的资源链接,确保每个资源只被加载一次...

Global site tag (gtag.js) - Google Analytics