`
yabar
  • 浏览: 29485 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

Javascript压缩(Js压缩)

阅读更多
转载,只作为技术资料收藏:
----------------------------------------------------------------------
怎么压缩Js?为什么要压缩Javascript? Javascript compressed/crunched
开发Ajax除了自己要写js代码外,同样也免不了要使用其它第三方js库,是否该为JavaScript减肥?
当你提高了用户体验,做出了很绚丽的效果而欣喜的时候,是否想过优化一下JS的效率,比如微软的live,其中的js做了压缩处理。JS的速度分为两种,JS下载速度和Js执行速度。

今天就先来说说JS下载速度。要想js的下载速度快,就需要尽量减小js文件的大小。

两种Js压缩工具(Javascript压缩工具)

Javascript compressed - YUI Compressor

According to Yahoo!'s Exceptional Performance Team, 40% to 60% of Yahoo!'s users have an empty cache experience and about 20% of all page views are done with an empty cache。

The goal of JavaScript and CSS minification is always to preserve the operational qualities of the code while reducing its overall byte footprint (both in raw terms and after gzipping, as most JavaScript and CSS served from production web servers is gzipped as part of the HTTP protocol). The YUI Compressor is JavaScript minifier designed to be 100% safe and yield a higher compression ratio than most other tools. Tests on the YUI Library have shown savings of over 20% compared to JSMin (becoming 10% after HTTP compression). Starting with version 2.0, the YUI Compressor is also able to compress CSS files by using a port of Isaac Schlueter's regular-expression-based CSS minifier。

http://developer.yahoo.com/yui/compressor/

Download the YUI Compressor.
http://www.julienlecomte.net/yuicompressor/

YUI Compressor最新版本下载 - YUI Compressor 2.4.1下载地址:
http://www.julienlecomte.net/yuicompressor/yuicompressor-2.4.1.zip

JS和CSS压缩工具图形界面版本下载地址
淘宝团队对YUICompressor做了层简单的封装,称之为TBCompressor.

http://lifesinger.org/blog/wp-content/uploads/2008/10/TBCompressor_v2.4.zip

淘宝是怎么压缩js和css的,淘宝使用的就是YUI Compressor
目前Jquery从1.3版本开始也使用YUICompressor


引用
The YUI Compressor is a JavaScript compressor which, in addition to removing comments and white-spaces, obfuscates local variables using the smallest possible variable name. This obfuscation is safe, even when using constructs such as ‘eval’ or ‘with’ (although the compression is not optimal is those cases) Compared to jsmin, the average savings is around 20%.
The YUI Compressor is also able to safely compress CSS files. The decision on which compressor is being used is made on the file extension (js or css)



Javascript compressed - ESC Introduction

这里我们可以使用一个工具ESC(ECMAScript cruncher)来帮我们完成这个工作,不过这个工具只能在Windows下使用。到http://www.saltstorm.net/depo/esc/introduction.wbm?pod=js下载ESC.zip,解压后看看它的帮助文档。很简单。

ESC is an ECMAScript pre-processor written in JScript, enabling an unlimited number of external scripts to be compressed/crunched into supertight, bandwidth-optimized packages. Featuring several compression-techniques such as comment removal, whitespace stripping, newline stripping and variable substitution ESC can reduce the overall size of your code with up to ~45%. Single, multiple scripts and even directories with scripts can be merged together at the compression level you decide. The processed output can later be appended or written to a file, or piped to another application for further processing via STDOUT.
 
ESC do NOT support crunching of inline scripts. So any attempt passing HTML, ASP, JSP, PHP or other equivalent documents to ESC is done at your own risk. 
 
ESC supports four levels of compression, where a higher level equals higher compression. Beware though that levels >2 requires your code to be syntaxically perfect or ESC will punish you by producing a broken and useless output. 
 
The compression ratio should hit around 25% using the default compression level on a vanilla looking script, but results as high as ~45% can be achieved depending on the script's design / your style of writing code. 
 
压缩级别分为5种,从0到4

Level 0 :: No compression

Level 1 :: Comment removal

Level 2 :: Whitespace removal

Level 3 :: Newline removal

Level 4 :: Variable substitution

在WINDOWS命令行下执行

cscript ESC.wsf -ow menu2.js menu.js将会把menu.js按照js压缩级别2来压缩(默认js压缩级别为2)为menu2.js

cscript ESC.wsf -l 3 -ow menu3.js menu.js将会把menu.js按照js压缩级别3来压缩为menu3.js

需要注意的是,js压缩级别4会把变量名修改,如果你的js中用到了全局变量或者类的话,就不能使用该压缩级别了,否则其它使用你的js的文件可能会无法正常运行。

试了一下,把yui的menu.js压缩了一下,对应的级别和压缩率分别如下:

js压缩级别1:压缩率44.41%

js压缩级别2:压缩率62.82%

js压缩级别1:压缩率64.93%

原来130多K的js文件压缩后也就40多K,看来还是挺有用处的。


另外还有一个小工具jsmin也可以压缩,不过没有ESC的level选项,看了一下好像压缩效果类似于ESC的level3.济南大学的一些老师写了个jsmin的图形界面程序JsMinGUI,使用起来更加方便。:-)

Dojo项目组也提供了一个工具,shrinksafe可以通过http://alex.dojotoolkit.org/shrinksafe/在线的上传要压缩的文件,处理完毕后可以保存到本地,另外shrinksafe还提供了一个本地运行的版本,需要jre1.4的支持。

Ps:对于一些压缩的代码,在阅读时可以用JavaScript Code Improver来进行格式化。看看它主页上的一个例子:
javascript压缩代码示例
原来的代码:


<script language="JavaScript">var i=0,s="",k=0;function foo(){for(j=0;j<10;j++){for(i=0;i<10;i++){s="string1";k=Math.floor(Math.random()*10);}for(i=20;i>9;i--){s="string2";k=I;}}}</script>


格式化后:

<script language="JavaScript">
var I = 0, s = "", k = 0;
function foo()
{
for(j = 0; j < 10; j++)
{
for(I = 0; I < 10; i++)
{
s = "string1";
k = Math.floor( Math.random()*10 );
}
for(I = 20; I > 9; i--)
{
s = "string2";
k = I;
}
}
}
</script>



js压缩,巨NB的dHTML特效. 来自:
http://hometown.aol.de/_ht_a/memtronic/MemTronic_CruncherCompressor_v09g.html

JS压缩示例样本:JS压缩示例样本


更多的JS压缩器以及混淆器

In terms of code minification, the most widely used tools to minify JavaScript code are Douglas Crockford's JSMIN, the Dojo compressor and Dean Edwards' Packer:

Douglas Crockford's JSMIN
http://crockford.com/javascript/jsmin

the Dojo compressor
http://dojotoolkit.org/docs/shrinksafe

Dean Edwards' Packer
http://dean.edwards.name/download/

http://dean.edwards.name/packer/  在线Js压缩
A Online JavaScript Compressor/Obfuscator version 2.0.2
Also available as a .NET application
开源下载:http://dean.edwards.name/download/#packer
JS压缩器帮助:http://dean.edwards.name/packer/usage/
http://dean.edwards.name/packer/usage/sample.html

http://hometown.aol.de/_ht_a/memtronic/

JavaScript Compressor/Obfuscator Demo:
http://www.brainjar.com/js/crunch/demo.html

JavaScript Code Improver:
JavaScript Code Improver Download


前面提到的Javascript压缩,都是采用删除注释,删除多余空格,替换字符等方式进行的,还有一种通过服务器的配置来实现Js静态压缩的方法:
关于JavaScript的gzip静态压缩方法
传统的JS压缩(删除注释,删除多余空格等)提供的压缩率有时还是不尽不意,幸亏现在的浏览器都支持压缩传输(通过设置http header的Content-Encoding=gzip),可以通过服务器的配置(如apache)为你的js提供压缩传输,或是appfuse中使用的GZipFilter使tomcat也提供这种能力

现在的问题是这种动态的压缩会导致服务器CPU占用率过高,现在我想到的解决辨法是通过提供静态压缩(就是将js预先通过gzip.exe压缩好)

一.下面描述在tomcat中的应用

1.将prototype.js通过gzip.exe压缩保存成prototype.gzjs
2.设置header,我编写了一个简单的AddHeadersFilter来将所有以gzjs结尾的文件增加设置header Content-Encoding=gzip
web.xml中的配置

<filter> 
    <filter-name>AddHeaderFilter</filter-name> 
    <filter-class> 
        badqiu.web.filter.AddHeaderFilter  
    </filter-class> 
    <init-param> 
        <param-name>headers</param-name> 
        <param-value>Content-Encoding=gzip</param-value> 
    </init-param> 
</filter> 
 
<filter-mapping> 
    <filter-name>AddHeaderFilter</filter-name> 
    <url-pattern>*.gzjs</url-pattern> 
</filter-mapping>


测试prototype.js是否正常的代码

<html> 
<head> 
<!-- type="text/javascript"不可少,有的浏览器缺少这个不能运行 --> 
<script src="prototype.gzjs" type="text/javascript"></script> 
</head> 
<body > 
    <input id="username" name="username" value="badqiu"/><br /> 
    <input id="email" value="badqiu@gmail.com"/> 
<script> 
    <!-- 测试prototype的方法是否正常--> 
    alert($F('username'))  
</script> 
</body> 
</html>


在Apache httpd中可以直接通过在httpd.conf增加AddEncoding x-gzip .gzjs来映射.gzjs文件的header

二.相关压缩率数据
1. prototype.js 1.5.0_rc0原始大小56KB,未经任何处理直接使用gzip压缩为12KB,总压缩率79%
2. 通过js压缩工具压缩过的protytype.js为20KB,使用gzip压缩为10KB,总压缩率为83%
3. 实际项目中的多个js合并成的文件 439KB,直接通过gzip压缩为85KB,总压缩率81%
4. 439KB经过js压缩为165KB,再经过gzip压缩为65KB,总压缩率86%

基本上你都可以忽略js压缩工具的压缩率,直接使用gzip压缩

gzip下载地址 http://www.gzip.org
tomcat的压缩配置示例下载地址: http://www.blogjava.net/Files/badqiu/gziptest.rar

其主要是利用服务器自带的动态压缩功能 传输时压缩数据流.
分享到:
评论

相关推荐

    Javascript压缩工具,JsMinGUI

    这就引出了JavaScript压缩的必要性。"JsMinGUI"是一款专为此目的设计的工具,它帮助开发者有效地压缩JavaScript代码,减少文件大小,提高网页性能。 JsMinGUI,全称JavaScript Minifier Graphical User Interface,...

    javascript混淆,javascript压缩,javascript加密软件

    "javascript混淆"、"javascript压缩"和"javascript加密"就是针对这一需求的三个关键概念。 **JavaScript混淆**: 混淆JavaScript代码的主要目的是为了增加攻击者逆向工程的难度,防止代码被轻易理解和篡改。混淆...

    javascript压缩混淆工具

    本文将深入探讨JavaScript压缩混淆工具及其在实际开发中的应用。 一、JavaScript压缩 JavaScript压缩的主要目标是减少代码的大小,从而加快网页加载速度。压缩工具通过删除不必要的空白、注释和换行,以及通过变量...

    jsmin js 压缩工具 javascript 压缩工具

    "jsmin"是一个高效的JavaScript压缩工具,其主要目的是通过删除不必要的字符(如空格、注释和换行)以及缩短变量名来减小JS文件的大小,从而提高页面加载速度。这个工具的设计理念是尽可能地保留原始代码的功能,...

    javascript代码压缩工具

    本文将详细介绍一种名为"jsMinifier"的JavaScript压缩工具,它需要在运行时安装JAVA环境。 **JSMinifier简介** JSMinifier是一款基于Java的JavaScript代码压缩工具,它可以有效地减少JavaScript文件的体积。由于它...

    利用JAVASCRIPT即你想那个GZIP压缩与解压缩

    标题中的“利用JAVASCRIPT实现GZIP压缩与解压缩”指的是在JavaScript环境中,我们可以使用原生或第三方库来处理GZIP格式的压缩和解压缩操作。GZIP是一种广泛使用的数据压缩格式,常用于减少网络传输的数据量,尤其是...

    Google的JavaScript压缩工具

    Google的JavaScript压缩工具正是这样一种高效、专业的解决方案,它是由Java语言编写的,旨在提供卓越的压缩效果。 JavaScript压缩的主要目的是减少文件大小,通过删除不必要的空格、换行符、注释,并进行变量名混淆...

    javascript压缩工具

    为何要压缩JS代码: 随着Ajax的应用普及,JavaScript已经得到了越来越多程序员的重视。但JS不好调试,代码多了也会严重影响速度,当你在为提高了用户体验,做出了很绚丽的效果而欣喜的时候,是否想过优化一下JS的...

    java开发中压缩js,css文件

    首先,我们要了解为什么要压缩js和css文件。在Web应用中,每次用户访问页面时,浏览器都需要下载所有的外部资源,包括js和css文件。如果这些文件较大,会延长加载时间,导致用户体验下降。压缩文件可以显著减少网络...

    javascript 压缩和加密工具

    1. **UglifyJS**:这是一个功能强大的JavaScript压缩器,能够处理ES6语法,并可以进行变量重命名,进一步减小文件大小。 2. **Terser**:原名uglify-es,是UglifyJS的后续项目,支持最新的JavaScript语法。 3. **...

    Javascript开发之js压缩篇.pdf

    在压缩js文件时,作者推荐使用以下命令:`java -jar yuicompressor-x.y.z.jar [options] [input file]`。这条命令可以将js文件压缩到原来的1/3左右。 除了使用yui-compressor进行压缩外,作者还推荐使用gzip压缩来...

    压缩加密JS脚本C#源码

    这样的工具在开发Web应用程序时非常有用,因为压缩JS可以减少文件大小,提高网页加载速度,而加密则可以保护代码不被轻易读取或修改。 在描述中提到的“自动压缩JS脚本”,意味着该源码实现了自动化处理功能,能够...

    JavaScript 代码压缩工具

    10. **选择合适的压缩工具**:市面上有许多JavaScript压缩工具,如UglifyJS、Terser、Babel Minify等,它们各有优缺点,选择时应根据项目需求和兼容性来决定。 综上所述,JavaScript代码压缩是一个综合性的过程,...

    javascript 实现压缩文件夹

    综上所述,这段代码实现了使用JavaScript进行文件系统操作、图片浏览以及压缩文件夹的基本功能。需要注意的是,这些操作在现代浏览器环境下可能无法直接运行,因为安全策略限制了脚本对本地文件系统的访问权限。

    优秀的javascript压缩工具

    这就是JavaScript压缩工具的重要性所在。这些工具通过删除不必要的字符,如空格、换行符和注释,以及进行变量名混淆等操作,来减小文件大小,从而提高页面加载速度。 标题提及的“优秀的JavaScript压缩工具”是指...

    JavaScript压缩 Css压缩工具

    压缩,压缩工具,JavaScript压缩工具,Css压缩工具

    JavaScript压缩工具

    为了优化网页性能,加快页面加载速度并节省服务器带宽,开发人员通常会使用JavaScript压缩工具。这些工具通过去除不必要的空白、注释和简化变量名等方式来减小JavaScript文件的大小,有时甚至可以将文件大小减少50%...

    基于javascript的压缩和解压缩以及文件系统的demo

    1. **JavaScript压缩与解压缩**: - **zip.js**: 这个文件可能是实现zip文件读取和写入的库。它可能包含了用于压缩和解压缩数据的算法,如Deflate和Inflate,这些算法通常用于ZIP格式。Deflate是ZIP文件中常用的...

    javascript批量压缩工具(JsBatCompress)

    总的来说,JsBatCompress是前端开发中不可或缺的辅助工具,通过批量压缩JS文件,有效地提升了项目的性能和效率。合理使用这类工具,可以显著改善网站的加载速度,提升用户体验,并且在项目管理上也能带来不少便利。

    JAVA批量压缩JS

    二、JavaScript压缩方法 1. 使用工具:如UglifyJS、Terser等,它们可以解析、优化并压缩JavaScript代码,删除不必要的空格、注释和变量名,实现代码混淆。 2. 自动化构建工具:Webpack、Gulp、Grunt等,它们支持...

Global site tag (gtag.js) - Google Analytics