- 浏览: 1659247 次
- 性别:
文章分类
- 全部博客 (2929)
- 非技术 (18)
- Eclipse (11)
- JAVA (31)
- 正则表达式 (0)
- J2EE (4)
- DOS命令 (2)
- WEB前端 (52)
- JavaScript (69)
- 数据库 (8)
- 设计模式 (0)
- JFreechart (1)
- 操作系统 (1)
- 互联网 (10)
- EasyMock (1)
- jQuery (5)
- Struts2 (12)
- Spring (24)
- 浏览器 (16)
- OGNL (1)
- WebService (12)
- OSGi (14)
- 软件 (10)
- Tomcat (2)
- Ext (3)
- SiteMesh (2)
- 开源软件 (2)
- Hibernate (2)
- Quartz (6)
- iBatis (2)
最新评论
怎么压缩Js?为什么要压缩Javascript? Javascript compressed/crunched
开发Ajax除了自己要写js代码外,同样也免不了要使用其它第三方js库,是否该为JavaScript减肥?
当
你提高了用户体验,做出了很绚丽的效果而欣喜的时候,是否想过优化一下JS的效率,比如微软的live,其中的js做了压缩处理。JS的速度分为两种,下
载速度和执行速度。今天就先来说说下载速度。要想js的下载速度快,就需要尽量减小js文件的大小。这里我们可以使用一个工具
ESC(ECMAScript cruncher)来帮我们完成这个工作,不过这个工具只能在Windows下使用。到
http://www.saltstorm.net/depo/esc/introduction.wbm?pod=js
下载
ESC.zip
,解压后看看它的帮助文档。很简单。
ESC Introduction
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.
ESC's compression engine is intelligent in the meaning
that it has language syntax, statement and keyword awareness and it
*knows* about native objects and members provided by the most common
scripting hosts. This knowledgebase can easily be extended by pluggin
in userdefined maps with additional information to further gain control
of the crunching procedure. During processing following things are
taken into account :
String and RegExpression read-ahead
Jscript Conditional compilation statements and variables
ECMA-262 Core language definitions (ECMAScript)
Intermediate DOM's (level 0) and DOM level 1
MS Jscript specific objects/methods
Netscape/Mozilla/Opera specific objects/methods/properties
MS WSH (Windows Scripting Host) 1+ native objects
压缩级别分为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压缩代码示例
原来的代码:
格式化后:
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压缩器以及混淆器
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-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是否正常的代码
<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评估用户输入密码的强度的方法 代码
2009-07-28 17:50 713用Javascript评估用户输入密码的强度密码已经是我们生活 ... -
图片和文字放一起,不能居中的解决方法
2009-07-29 14:47 956<td align="center" ... -
解开JavaScript生命的达芬奇密码
2009-08-05 17:56 760解开JavaScript生命的达芬奇密码 ——如何使用Jav ... -
掌控上传进度的AJAX Upload(转贴)
2009-08-05 17:59 721掌控上传进度的AJAX Uploa ... -
Javascript跨域访问解决方案
2009-08-11 20:11 637由于安全方面的考虑,Javascript被限制了跨域访问的能力 ... -
不唐突的JavaScript的七条准则(转载)
2009-08-12 13:18 638经过多年的开发、教学 ... -
浅谈Javascript中的事件流和事件绑定
2009-08-13 16:31 803事件流 浏览器中的事 ... -
JavaScript继承详解(二)
2009-08-17 17:04 626转自:http://www.cnblogs.com/sansh ... -
JavaScript继承详解(一)
2009-08-17 17:04 701转自:http://www.cnblogs.com/sansh ... -
javascript实用技巧--数组.
2009-08-17 17:08 666数组和字符串类型对象的方法我特容易搞混淆,所以把他列出来,免得 ... -
IE和Firefox之间的JavaScript差异
2009-08-17 17:18 589尽管 JavaScript 历史上使用冗长而令人生厌的代码块来 ... -
常见的JavaScript错误
2009-08-17 17:19 742作者: Richardy, 出处:IT ... -
JS获取浏览器窗口大小 获取屏幕,浏览器,网页高度宽度
2009-08-17 17:19 667网页可见区域宽:document.body.clientWid ... -
Javascript的Defer属性
2009-08-17 17:48 721Script中的Defer属性 ... -
最佳的"addEvent"是怎样诞生的
2009-08-18 13:47 645IE的 JScript 存在内存泄露的bug 想必大家都清楚或 ... -
值得推荐的事件捕获函数AddEvent()
2009-08-18 13:56 7801, 下面是JQuery之父推荐的添加移除事件方法。 ... -
随滚动条移动的层
2009-08-20 15:55 734<!DOCTYPE html PUBLIC &qu ... -
javascript 获取滚动条高度
2009-08-20 16:02 789/******************** * 取窗口滚动 ... -
如何去掉ie里面的关闭按钮,和屏蔽ALT+F4 (转载)
2009-09-01 17:46 797去掉关闭按钮可以使用无边框窗口设计,不过IE6中已经不支持了。 ... -
(window.onunload)只有点击浏览器右上角关闭按钮才执行
2009-09-01 18:31 875<html> <head> &l ...
相关推荐
"js压缩工具"主要关注如何通过特定的工具来优化和压缩JS代码,从而提升网站性能。在这个过程中,我们可以使用如`yuicompressor`这样的工具,下面将详细介绍其操作流程。 `yuicompressor`是由YUI团队开发的一款开源...
为什么要压缩Javascript? Javascript compressed/crunched 开发Ajax除了自己要写js代码外,同样也免不了要使用其它第三方js库,是否该为JavaScript减肥? 当你提高了用户体验,做出了很绚丽的效果而欣喜的时候,...
综上所述,`YUI Compressor 2.4.2` 是一款强大的JavaScript和CSS压缩工具,对于前端性能优化具有重要的意义。虽然它是一个较老的版本,但在很多情况下仍然能够胜任代码压缩的工作,帮助开发者实现更快、更轻量级的...
为了解决这个问题,开发者通常会使用图像压缩工具,其中,“imagecompressor”是一个基于JavaScript的轻量级图像压缩库,它利用了浏览器的本机`canvas.toBlob` API来进行图像压缩。 一、核心原理 1. `canvas`: ...
为了解决这个问题,可以采用数据压缩技术,如gzip,配合JavaScript库pako.js来压缩数据,然后再通过Ajax发送。以下将详细讲解如何利用ajax和pako.js实现gzip数据压缩上传。 首先,理解gzip压缩原理。gzip是一种广泛...
JavaScript中的zip_deflate和zip_inflate是用于数据压缩和解压缩的算法,它们在Web开发中扮演着重要的角色,尤其是在处理大量数据传输时。这里我们将深入探讨这两个概念以及如何在JavaScript环境中实现它们。 首先...
"前端pako压缩与解压缩"这个主题主要关注如何在JavaScript环境下利用pako库来实现这一功能。Pako是一个高效的,开源的Gzip/Deflate库,它允许开发者在浏览器端进行数据压缩和解压缩,从而提高网页性能。 首先,我们...
PNGOO是一个在线的PNG图像压缩工具,而要寻找类似的Node.js库,我们可以考虑`node-pngquant-native`。这个库是PNGQuant的Node.js绑定,PNGQuant是一款高效的命令行工具,用于将24位和32位PNG图像转换为8位彩色,同时...
pako是一个高效的JavaScript库,提供了对多种压缩算法的支持,包括gzip。在本项目中,我们将关注如何使用pako库进行gzip压缩和解压缩,并解决在处理中英文内容时可能出现的乱码问题。 首先,让我们详细了解pako库。...
JavaScript图像压缩器。 使用浏览器的本机 API进行压缩工作,这意味着它是有损压缩。 通常使用此方法在上载客户端映像文件之前对其进行预压缩。 目录 主要 dist/ ├── compressor.js (UMD) ├── compressor.min...
JavaScript 图片压缩插件是一种用于优化用户在网页上上传大尺寸图片体验的工具。随着智能手机摄像头的不断提升,拍摄的照片质量越来越高,相应的文件大小也越来越大。这可能会导致在上传到网站时速度变慢,消耗大量...
3. **JavaScript压缩**:对于JavaScript文件,只需将.css替换为.js即可。例如,`java -jar yuicompressor.jar script.js -o compressed_script.js`。 4. **配置参数**:YUI Compressor提供了一些可选参数,如设置...
在JavaScript的世界里,图片压缩和上传是Web应用中常见的需求,尤其在用户需要上传大量或大尺寸图片时,为了提高加载速度和节省服务器存储空间,压缩图片变得至关重要。本项目提供的"localResizeIMG3-3.0.20"是一个...
总的来说,FileSaver.js是JavaScript开发中处理文件保存的一个实用工具,特别是在需要用户下载数据或压缩文件的场景下。它与文件压缩库(如JSZip)结合使用,可以提供完整的文件压缩和下载功能。虽然它不直接处理...
其中,`Yuicompressor`是一款广泛使用的开源压缩工具,它由雅虎公司开发,能够有效地对JS和CSS进行压缩,降低文件体积,从而提升网页的加载速度。 `Yuicompressor`的优势在于其强大的代码压缩能力,特别是对于JS...
实现Js/Css/Images的压缩,可以使用Node.js的第三方库,例如`uglify-js`用于JavaScript压缩,`clean-css`处理CSS压缩,`imagemin`处理图片压缩。首先,你需要全局安装这些库: ```bash npm install -g uglify-js ...
`sizeType`属性用于选择图片的原始尺寸或压缩尺寸,其中`original`代表原始尺寸,`compressed`代表压缩过的尺寸。 在图片成功选择后,通过`drawImage`方法将图片绘制到canvas上。`ctx.drawImage`方法的参数定义了...
在JavaScript前端开发中,处理图片上传、压缩以及旋转并生成base64数据是常见的需求,尤其是在Web应用中实现用户上传照片的功能。以下是对这个主题的详细解析。 首先,我们需要了解前端图片上传的基本流程。当用户...
总之,`zlib.js`是微信小程序开发中的一个重要工具,它使得开发者能够在小程序环境中轻松地进行数据压缩和解压缩,从而提高数据处理的效率和节省资源。通过理解和熟练使用`zlib.js`,你可以为微信小程序开发带来更优...
然而,JavaScript原生并不支持GZIP压缩,但可以通过第三方库如`pako.js`实现。需要注意的是,GZIP对于非ASCII字符(如中文)的压缩效果可能不佳,因为它是基于字节的压缩。压缩和解压缩过程如下: ```javascript ...