自己来盖楼 http://www.hetaoblog.com/javascript-js-css-minifier-microsoft-ajax-minifier/ 在性能测试工具-利用FireBug做前端性能测试一文中已经提到前端性能对最终用户的体验,之前也介绍了网站性能优化工具-无损图片压缩工具Smush.it作为图片压缩工具,这里,再介绍另外一款js压缩工具,JSMin,可以对网站中大量使用的javascript进行压缩;由于通常网站开发过程中会引入大量的js文件,包括库文件和自己写的大量js,js文件的数量和大小通常也对网站的性能产生了较大的影响。对js文件进行压缩可以减少js文件的大小,提高网站的性能。当然,另外一个影响就是在生产环境下的js文件是经过压缩的,如果有啥js问题,调试起来会更加麻烦。JSMin的基本原理是去除javascript中的空格、回车、注释,作为javascript压缩工具,JSMin没有做混淆。混淆是指进一步的压缩,通常的做法是将较长的变量名和函数名替换成更短的。通常而言,在压缩基础上进一步混淆的改进不是那么明显,而且由于混淆的复杂性,有可能会带来一些错误,所以,如果不是为了抵制逆向工程,通常建议做压缩就够了。 1.使用方法:在下载JSMin后,, 假设原始文件为before.js,那么输入如下命令后,就得到after.js在命令行下输入jsmin <before.js> after.js 2.注意a. JSMin建议js文件是以ASCII或者UTF-8的编码方式保存的。其他方式的js文件处理后有可能会带来问题b. JSMin不是可逆的,需要保存要原始文件;另外一个方面,一些模糊的表达式,有可能会在去除空格后发生错误,比如a + ++b压缩后会变成a+++b,然后被解析成a++ + b,所以,建议在之前先使用JSLint检查下Javascript文件, 3.例子未压缩代码:// is.js// (c) 2001 Douglas Crockford// 2001 June 3// is// The -is- object is used to identify the browser. Every browser edition// identifies itself, but there is no standard way of doing it, and some of// the identification is deceptive. This is because the authors of web// browsers are liars. For example, Microsoft’s IE browsers claim to be// Mozilla 4. Netscape 6 claims to be version 5.var is = {ie: navigator.appName == ‘Microsoft Internet Explorer’,java: navigator.javaEnabled(),ns: navigator.appName == ‘Netscape’,ua: navigator.userAgent.toLowerCase(),version: parseFloat(navigator.appVersion.substr(21)) ||parseFloat(navigator.appVersion),win: navigator.platform == ‘Win32′}is.mac = is.ua.indexOf(‘mac’) >= 0;if (is.ua.indexOf(‘opera’) >= 0) {is.ie = is.ns = false;is.opera = true;}if (is.ua.indexOf(‘gecko’) >= 0) {is.ie = is.ns = false;is.gecko = true;}压缩后的代码:var is={ie:navigator.appName==’Microsoft Internet Explorer’,java:navigator.javaEnabled(),ns:navigator.appName==’Netscape’,ua:navigator.userAgent. toLowerCase(),version:parseFloat(navigator.appVersion.substr(21))||parseFloat(navigator.appVersion), win:navigator.platform==’Win32′}is.mac=is.ua.indexOf(‘mac’)>=0;if(is.ua.indexOf(‘opera’)>=0){is.ie=is.ns=false;is.opera=true;}if(is.ua.indexOf(‘gecko’)>=0){is.ie=is.ns=false;is.gecko=true;} 4.效果当js文件较多较大时,压缩的改进是较大的;现在主流的js框架,比如JQuery等,基本都在下载时提供了经过压缩的版本。
不过可以试下压缩效果,基于google的,主要给英文不方便的同学,
可以和yui/ms ajax minifier/dojo compressor/jsmin/ECMAScript cruncher这些比较下,这些我都在我的博客http://www.hetaoblog.com里写了相关介绍了,
yui 压缩率胜过jsmin,
http://www.hetaoblog.com/javascript-compressor-yui-compressor/
微软的又胜过yui
http://www.hetaoblog.com/javascript-js-css-minifier-microsoft-ajax-minifier/
http://www.hetaoblog.com/javascript-js-css-minifier-microsoft-ajax-minifier/
在性能测试工具-利用FireBug做前端性能测试一文中已经提到前端性能对最终用户的体验,之前也介绍了网站性能优化工具-无损图片压缩工具Smush.it作为图片压缩工具,这里,再介绍另外一款js压缩工具,JSMin,可以对网站中大量使用的javascript进行压缩;由于通常网站开发过程中会引入大量的js文件,包括库文件和自己写的大量js,js文件的数量和大小通常也对网站的性能产生了较大的影响。对js文件进行压缩可以减少js文件的大小,提高网站的性能。当然,另外一个影响就是在生产环境下的js文件是经过压缩的,如果有啥js问题,调试起来会更加麻烦。JSMin的基本原理是去除javascript中的空格、回车、注释,作为javascript压缩工具,JSMin没有做混淆。混淆是指进一步的压缩,通常的做法是将较长的变量名和函数名替换成更短的。通常而言,在压缩基础上进一步混淆的改进不是那么明显,而且由于混淆的复杂性,有可能会带来一些错误,所以,如果不是为了抵制逆向工程,通常建议做压缩就够了。
1.使用方法:在下载JSMin后,, 假设原始文件为before.js,那么输入如下命令后,就得到after.js在命令行下输入jsmin <before.js> after.js
2.注意a. JSMin建议js文件是以ASCII或者UTF-8的编码方式保存的。其他方式的js文件处理后有可能会带来问题b. JSMin不是可逆的,需要保存要原始文件;另外一个方面,一些模糊的表达式,有可能会在去除空格后发生错误,比如a + ++b压缩后会变成a+++b,然后被解析成a++ + b,所以,建议在之前先使用JSLint检查下Javascript文件,
3.例子未压缩代码:// is.js// (c) 2001 Douglas Crockford// 2001 June 3// is// The -is- object is used to identify the browser. Every browser edition// identifies itself, but there is no standard way of doing it, and some of// the identification is deceptive. This is because the authors of web// browsers are liars. For example, Microsoft’s IE browsers claim to be// Mozilla 4. Netscape 6 claims to be version 5.var is = {ie: navigator.appName == ‘Microsoft Internet Explorer’,java: navigator.javaEnabled(),ns: navigator.appName == ‘Netscape’,ua: navigator.userAgent.toLowerCase(),version: parseFloat(navigator.appVersion.substr(21)) ||parseFloat(navigator.appVersion),win: navigator.platform == ‘Win32′}is.mac = is.ua.indexOf(‘mac’) >= 0;if (is.ua.indexOf(‘opera’) >= 0) {is.ie = is.ns = false;is.opera = true;}if (is.ua.indexOf(‘gecko’) >= 0) {is.ie = is.ns = false;is.gecko = true;}压缩后的代码:var is={ie:navigator.appName==’Microsoft Internet Explorer’,java:navigator.javaEnabled(),ns:navigator.appName==’Netscape’,ua:navigator.userAgent.
toLowerCase(),version:parseFloat(navigator.appVersion.substr(21))||parseFloat(navigator.appVersion),
win:navigator.platform==’Win32′}is.mac=is.ua.indexOf(‘mac’)>=0;if(is.ua.indexOf(‘opera’)>=0){is.ie=is.ns=false;is.opera=true;}if(is.ua.indexOf(‘gecko’)>=0){is.ie=is.ns=false;is.gecko=true;}
4.效果当js文件较多较大时,压缩的改进是较大的;现在主流的js框架,比如JQuery等,基本都在下载时提供了经过压缩的版本。
javascript压缩工具-YUI-compressor
关于javascript压缩工具,在之前的网站性能优化工具-javascript压缩工具JSMin中介绍过一个javascript压缩工具JSMin,今天,再介绍一个非常流行的javascript压缩工具YUI compressor,可以提供更好的压缩效率;该工具由著名的Yahoo Exceptional Performance项目组出品;JSMin非常流行,简单,不过根据YUI compressor的说明,JSMin的压缩算法较为简单,可能会流下很多换行; Yahoo的工程师那YUI库做测试,发现YUI compressor的压缩效果比JSMin好20%;当然,YUI compressor的一个缺点是基于java,首先你需要有一个JRE才可以运行,JSMin在windows下直接提供exe下载,同时也提供 c/java/c#/perl/php/甚至javascript版本J方便各个环境下的各类程序员使用;
到这个地址下载YUI compressorhttp://yuilibrary.com/downloads/#yuicompressor当前最新的版本是2.4.2下载后,解压,到build目录下,在安装好JRE环境后,在命令行下输入:java -jar yuicompressor-2.4.2.jar input.js -o output.jsinput.js就是你需要压缩的js源文件,output.js就是需要的输出文件,这时,就会输出output.js;我以在之前网站性能优化工具-javascript压缩工具JSMin中使用的JSMin的官方网站的样本程序作为input.jsvar is = {ie: navigator.appName == ‘Microsoft Internet Explorer’,java: navigator.javaEnabled(),ns: navigator.appName == ‘Netscape’,ua: navigator.userAgent.toLowerCase(),version: parseFloat(navigator.appVersion.substr(21)) ||parseFloat(navigator.appVersion),win: navigator.platform == ‘Win32′}is.mac = is.ua.indexOf(‘mac’) >= 0;if (is.ua.indexOf(‘opera’) >= 0) {is.ie = is.ns = false;is.opera = true;}if (is.ua.indexOf(‘gecko’) >= 0) {is.ie = is.ns = false;is.gecko = true;}使用YUI compressor压缩后,输出的output.js是var is={ie:navigator.appName==”Microsoft Internet Explorer”,java:navigator.javaEnabled(),ns:navigator.appName==”Netscape”,ua:navigator.userAgent.toLowerCase(),version:parseFloat(navigator.appVersion.substr(21))||parseFloat(navigator.appVersion),win:navigator.platform==”Win32″};is.mac=is.ua.indexOf(“mac”)>=0;if(is.ua.indexOf(“opera”)>=0){is.ie=is.ns=false;is.opera=true}if(is.ua.indexOf(“gecko”)>=0){is.ie=is.ns=false;is.gecko=true};对比JSMin的输出,用UltraEdit打开可以看到,YUI Compressor压缩后只有1行,JSMin压缩后仍然有4行, 看来YUI Compressor说的压缩率更高是可信的;