YUI Compressor压缩JavaScript原理及微优化

最近写一个jQuery插件,在最后完成优化时,对比发现压缩后文件比较大,就思考那些是可以被修改和优化的,发现压缩原理也有很大的空间可以学习,通过这次对YUI Compressor压缩JavaScript深有体会,那些是可以被压缩的,特别是那些不能被压缩的,都需要很清楚,这样才能写出来的插件才能保持文件更小,代码更精巧,而且优化的过程中也会发现代码待改良的地方,对以后也有很大帮助。随便在网上找来一篇文章做记录了。

YUI Compressor 压缩 JavaScript 的内容包括
移除注释
移除额外的空格
细微优化
标识符替换(Identifier Replacement)

YUI Compressor包括哪些细微优化呢?
object["property"] ,如果属性名是合法的 JavaScript 标识符(注:合法的 JavaScript 标识符——由一个字母开头,其后选择性地加上一个或者多个字母、数字或下划线)且不是保留字,将优化为: object.property
{"property":123} ,如果属性名是合法的 JavaScript 标识符且不是保留字,将优化为{property:123} (注:在对象字面量中,如果属性名是一个合法的 JavaScript 标识符且不是保留字,并不强制要求用引号引住属性名)。
'abcd\'efgh',将优化为 "abcd'efgh"。
"abcd" + "efgh",如果是字符串相连接,将优化成 "abcdefgh"(注:所有在使用 YUI Compressor 的前提下,对于脚本中的字符串连接,使用连接符 “+” 的效率和可维护性最高)。
对于 JavaScript 最有效的压缩优化,当属标识符替换。
比如:


代码如下:

(function(){
function add(num1, num2) {
return num1 + num2;
}
})();

进行属标识符替换后:


代码如下:

(function(){
function A(C, B) {
return C+ B;
}
})();

再移除额外的空格,最终成了:


代码如下:

(function(){function A(C,B){return C+B;}})();

YUI Compressor 标识符替换仅替换函数名和变量名,那哪些不能被替代呢?
原始值:字符串、布尔值、数字、null 和 undefined。一般来说字符串占的空间最多,而非数字字面量其次(true、false,null,underfinded)。
全局变量:window、document、XMLHttpRequest等等。使用最多的就是 document、window。
属性名,比如:foo.bar。占据的空间仅次于字符串,”.” 操作符无法被代替,且 a.b.c 更加费空间。
关键字。经常被过度使用的关键字有:var、return。最好的优化方法:一个函数仅出现一次 var 和 return 关键字。
对于原始值、全局变量、属性名的优化处理方式大致相同:任何字面量值、全局变量或者属性名被使用超过 2 次(包括2次),都应该用局部变量存储代替。
但有部分情况下是禁止使用标识符替换的:
使用 eval() 函数。解决方法:不使用或者创建一个全局函数封装 eval()。
使用 with 语句。解决方法:方法同上。
JScript 的条件注释。唯一解决的方法:不使用。
由于 YUI Compressor 是建立在 rhino interpreter 基础上的,所以上述所有的优化都是安全的。

(0)

相关推荐

  • java字符串压缩解压示例

    我测试的字符串是JQuery源码. 明文长度:78082压缩后:26566加密长度:54746再压缩:41647-----------------------------密文长度:41647解压缩:54746解密后:26566再解压:78082-----------------------------比对成功 Des需要Jar:sun.misc.BASE64Decoder.jar Test 复制代码 代码如下: public static void main(String[] args) thr

  • 用于CSS代码压缩与格式化的javascript函数代码

    复制代码 代码如下: var lCSSCoder={ format : function(s){//格式化代码 s=s.replace(/\s*([\{\}\:\;\,])\s*/g,"$1"); s=s.replace(/\,[\s\.\#\d]*{/g,"{"); s=s.replace(/([^\s])\{([^\s])/g,"$1 {\n\t$2"); s=s.replace(/([^\s])\}([^\n]*)/g,"$1\n

  • JavaScript(JS) 压缩 / 混淆 / 格式化 批处理工具

    昨天分享了http://jscompress.sinaapp.com/ 这个小工具后,发现大家还是很喜爱的. 因此今天我把它json化了.用json传输数据,也开放了api 本工具所有的功能实现都是由 http://jscompress.sinaapp.com/api 处理.(包括现在可以使用的这个在线压缩) 所有的数据交换均由 HTTP POST 输入处理后由 json 作为数据输出格式. API参数 : http://jscompress.sinaapp.com/api?get={type}

  • java生成压缩文件示例代码

    代码: 复制代码 代码如下: import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream; import org.apache.tools.zip.ZipEntry;import org.apache.tools.zip.ZipOutputStream; /**  * @project: Test  * @author

  • JavaScript 代码压缩工具小结

    UglifyJS UglifyJS是构建于nodeJS服务器端之上的一个代码压缩工具,目前jQuery使用它来压缩,压缩效果比较好. GitHub主页:http://github.com/mishoo/UglifyJS/ 在线使用:http://marijnhaverbeke.nl/uglifyjs 使用方法: 从http://nodejs.org下载nodejs,用到的是node.exe 再从UglifyJS的GitHub主页下载它的最新版本 复制node.exe到UglifyJS的bin目录

  • JavaScript 在线压缩和格式化收藏

    以前在找到过压缩 Javascript 代码的程序,一直在用,感觉效果不错.http://javascriptcompressor.com/在线压缩 Javascript 源码只是把空格.换行.多余的注释等等清理掉,尤其选中 Shrink variables 时,会把长的变量名缩减成单个字母的变量名,压缩比通常能达到50%甚至更小.现在 AJAX 大行其道,JavaScript 文件越来越大,用此压缩应该能减轻不少流量负担.而且缩减变量名后,程序并没有加密,但会使程序变得很难看懂,一定程度上也能

  • 使用GruntJS链接与压缩多个JavaScript文件过程详解

    自己写了个简单的HTML5 Canvas的图表库,可以支持饼图,折线图,散点图,盒子图 柱状图,同时支持鼠标提示,绘制过程动画效果等.最终我想把这些多个JS文件变成 一个JS文件发布出去,于是我的问题来啦,怎么把这些JS文件搞成一个啊,群里有个 朋友告诉我,GruntJS – JavaScript多文件编译,风格检查,链接与压缩神器.Google了一 把终于帮我完成这个任务,算是入门,分享一下过程. 一什么是GruntJS 不想翻译英文,自己看它的网站吧->http://gruntjs.com/

  • Java压缩文件ZIP实例代码

    提示:java.util.zipoutputstream java API压缩为zip文件 代码: 复制代码 代码如下: package com.gaoqi.test;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.util.zip.ZipEntry;import java.util.zip.ZipOu

  • Microsoft Ajax Minifier 压缩javascript的方法

    但常用的命令是  ajaxmin -a -h inputfile.js -o outputfile.js(这种是高压缩方式) 也可以对JS代码进行分析 命令是 ajaxmin inputfile.js -a -w:3 更多的使用方法请参考 Help 说明. ajaxmin.exe 下载 Microsoft AJAX 库 (第六个预览版)Ajaxmin压缩多文件的时候: Ajaxmin -inputfile_1 -inputfile_2 -o -oututfile /Eo:utf-8 /Ei:ut

  • 一款js和css代码压缩工具[附JAVA环境配置方法]

    TBCompressor的安装很简单,点击install.cmd就可以了,安装后会在里的右键菜单里出现"Compress CSS or JS"选项,需要压缩文件时只需选取目标文件然后右键点选"Compress CSS or JS"即刻.压缩后的文件会自动重命名. 这里对jQuery1.3 Development版进行压缩测试,效果如下:可以看到效果还是非常不错的:) TBCompressor下载 需要注意的是使用TBCompressor必须要有JAVA环境的支持,需

  • 使用UglifyJS合并/压缩JavaScript的方法

    build.js中的代码会去调用UglifyJS的接口函数以执行压缩任务. 1,去github下载最新的UglifyJS.两种方式下载,如果安装了git,进入git控制台使用如下命令 git clone git://github.com/mishoo/UglifyJS.git 或者使用http方式下载,点击zip下载.解压后其目录结构如下 2,新建一个项目(文件夹)myApp,将uglify-js.js和lib目录拷贝到自己的项目中.如下 3,在myApp中新建一个compress.js,内容如

  • java压缩多个文件并且返回流示例

    这个类可以压缩多个文件并且返回流,在程序中可以再操作返回的流做其它功能,比如验证MD5,下面看代码吧 复制代码 代码如下: /*** 方法描述:<b>测试类</b></br>*/public class TestFileStream{ //文件和压缩包存储的位置StringtempFilePath="C:/temp/"List<String>fileList=newArrayList<String>();fileList.ad

  • 使用java基础类实现zip压缩和zip解压工具类分享

    使用java基础类写的一个简单的zip压缩解压工具类 复制代码 代码如下: package sun.net.helper; import java.io.*;import java.util.logging.Logger;import java.util.zip.*; public class ZipUtil {    private final static Logger logger = Logger.getLogger(ZipUtil.class.getName());    privat

  • javascript实现的样式表(CSS) 格式整理与压缩

    样式表(CSS) 格式整理与压缩 html,body,form,fieldset,textarea { height:100%; margin:0; padding:0; border:0; font-size:10pt; background:#eee; } form { margin:0 1%; overflow:hidden; } legend { line-height:3em; font-weight:bolder; } button { float:left; margin:1% 1

  • java使用gzip实现文件解压缩示例

    复制代码 代码如下: package com.cjonline.foundation.cpe.action; import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import java.

  • Java 文件解压缩实现代码

    Java实现压缩文件的解压缩操作,缺点是压缩文件内不能含有文件名为中文的的文件,否则会出现如下错误: 复制代码 代码如下: Exception in thread "main" java.lang.IllegalArgumentException: MALFORMED at java.util.zip.ZipCoder.toString(Unknown Source) at java.util.zip.ZipInputStream.readLOC(Unknown Source) at

  • Java 图片压缩实现思路及代码

    Java图片压缩代码 复制代码 代码如下: package com.img; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import javax.imageio.ImageIO; import com.sun.image.codec.jpeg.JPEGCod

  • Java中如何调用cmd压缩文件

    今天在做一个java调用windows的压缩命令时遇到一奇怪问题代码如下: 复制代码 代码如下: String cmd ="C:/Program Files (x86)/WinRAR/rar.exe a c:/test.rar c:/test.log"; //System.out.println(cmd);Process proc = Runtime.getRuntime().exec(cmd); 以上代码在Xp,win7,windows server2003执行完全正常发现将代码转移

随机推荐