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 基础上的,所以上述所有的优化都是安全的。
相关推荐
-
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执行完全正常发现将代码转移
随机推荐
- shell学习教程获取命令行参数示例
- ajax+asp无限级分类树型结构的代码
- Java设计模式之备忘录模式_动力节点Java学院
- python 文件与目录操作
- Asp.net TreeView来构建用户选择输入的方法 推荐
- php中把美国时间转为北京时间的自定义函数分享
- php解析http获取的json字符串变量总是空白null
- PHP使用glob函数遍历目录或文件夹的方法
- GO语io包的常用接口
- Golang排列组合算法问题之全排列实现方法
- Mysql启动报ERROR:2002的分析与解决
- 在MySQL中用正则表达式替换数据库中的内容的方法
- div+css实现自适应宽度按钮
- Java二维码登录流程实现代码(包含短地址生成,含部分代码)
- 用SQL Server访问Sybase中的表的方法
- oracle11数据库安装图文教程
- Nodejs关于gzip/deflate压缩详解
- CentOS 5.4系统下安装VPN(pptp) 适用于Linux服务器
- python实现图片变亮或者变暗的方法
- 通过原理解析Spring mvc的内置编码过滤器