最近写一个jQuery插件,在最后完成优化时,对比发现压缩后文件比较大,就思考那些是可以被修改和优化的,发现压缩原理也有很大的空间可以学习,通过这次对YUI Compressor压缩JavaScript深有体会,那些是可以被压缩的,特别是那些不能被压缩的,都需要很清楚,这样才能写出来的插件才能保持文件更小,代码更精巧,而且优化的过程中也会发现代码待改良的地方,对以后也有很大帮助。随便在网上找来一篇文章做记录了。
object["property"]
,如果属性名是合法的 JavaScript 标识符(注:合法的 JavaScript 标识符——由一个字母开头,其后选择性地加上一个或者多个字母、数字或下划线)且不是保留字,将优化为: object.property
{"property":123}
,如果属性名是合法的 JavaScript 标识符且不是保留字,将优化为{property:123}
(注:在对象字面量中,如果属性名是一个合法的 JavaScript 标识符且不是保留字,并不强制要求用引号引住属性名)。'abcd\'efgh'
,将优化为 "abcd'efgh"
。"abcd" + "efgh"
,如果是字符串相连接,将优化成 "abcdefgh"
(注:所有在使用 YUI Compressor 的前提下,对于脚本中的字符串连接,使用连接符 “+” 的效率和可维护性最高)。对于 JavaScript 最有效的压缩优化,当属标识符替换。
比如:
1
2
3
4
5
|
(
function
(){
function
add(num1, num2) {
return
num1 + num2;
}
})();
|
进行属标识符替换后:
1
2
3
4
5
|
(
function
(){
function
A(C, B) {
return
C+ B;
}
})();
|
再移除额外的空格,最终成了:
1
|
(function(){function A(C,B){return C+B;}})();
|
对于原始值、全局变量、属性名的优化处理方式大致相同:任何字面量值、全局变量或者属性名被使用超过 2 次(包括2次),都应该用局部变量存储代替。
但有部分情况下是禁止使用标识符替换的:
由于 YUI Compressor 是建立在 rhino interpreter 基础上的,所以上述所有的优化都是安全的。