关于JavaScript的gzip静态压缩方法


Posted in Javascript onJanuary 05, 2007

一个页面减少10KB对于一个小网站来说,算不上什么,但对于大型站点来说,累计起来却是一个很大的流量......gzip压缩是一个有效可行的方法,但需要Apache的支持(Apache与IIS共用一个端口解决方法)。

传统的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.conf增加AddEncoding x-gzip .gzjs来映射.gzjs文件的header

二.压缩率 

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 相关文章推荐
jquery 实现上下滚动效果示例代码
Aug 09 Javascript
js中函数声明与函数表达式
Jun 03 Javascript
AngularJS监听路由的变化示例代码
Sep 23 Javascript
JavaScript实现瀑布流以及加载效果
Feb 11 Javascript
微信小程序使用checkbox显示多项选择框功能【附源码下载】
Dec 11 Javascript
vue用递归组件写树形控件的实例代码
Jul 19 Javascript
js继承的这6种方式!(上)
Apr 23 Javascript
js+HTML5 canvas 实现简单的加载条(进度条)功能示例
Jul 16 Javascript
Vue实现数据表格合并列rowspan效果
Nov 30 Javascript
js实现打字小游戏
Dec 17 Javascript
JavaScript 俄罗斯方块游戏实现方法与代码解释
Apr 08 Javascript
一起来看看Vue的核心原理剖析
Mar 24 Vue.js
关于Javascript 的 prototype问题。
Jan 03 #Javascript
彻底搞懂JS无缝滚动代码
Jan 03 #Javascript
经典的解除许多网站无法复制文字的绝招
Dec 31 #Javascript
对象的类型:本地对象(1)
Dec 29 #Javascript
JavaScript高级程序设计
Dec 29 #Javascript
JavaScript 参考教程
Dec 29 #Javascript
js自带函数备忘 数组
Dec 29 #Javascript
You might like
JpGraph php柱状图使用介绍
2011/08/23 PHP
php+iframe实现隐藏无刷新上传文件
2012/02/10 PHP
深入php list()函数的详解
2013/06/05 PHP
PHP判断当前使用的是什么浏览器(推荐)
2019/10/27 PHP
php实现记事本案例
2020/10/20 PHP
使用Json比用string返回数据更友好,也更面向对象一些
2011/09/13 Javascript
js中 关于undefined和null的区别介绍
2013/04/16 Javascript
只需20行代码就可以写出CSS覆盖率测试脚本
2013/04/24 Javascript
使用JavaScript脚本无法直接改变Asp.net中Checkbox控件的Enable属性的解决方法
2015/09/16 Javascript
Angularjs的ng-repeat中去除重复数据的方法
2016/08/05 Javascript
js实现tab切换效果
2017/02/16 Javascript
bootstrap轮播模板使用方法详解
2017/11/17 Javascript
Vue+axios+WebApi+NPOI导出Excel文件实例方法
2019/06/05 Javascript
nodejs一个简单的文件服务器的创建方法
2019/09/13 NodeJs
Postman无法正常返回结果问题解决
2020/08/28 Javascript
jQuery实现推拉门效果
2020/10/19 jQuery
[01:03:27]NAVI vs EG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
对python中if语句的真假判断实例详解
2019/02/18 Python
Python3.4学习笔记之类型判断,异常处理,终止程序操作小结
2019/03/01 Python
Python字符串对象实现原理详解
2019/07/01 Python
Python 经典算法100及解析(小结)
2019/09/13 Python
python关闭占用端口方式
2019/12/17 Python
python匿名函数lambda原理及实例解析
2020/02/07 Python
英国内衣连锁店:Boux Avenue
2018/01/24 全球购物
BASIC HOUSE官方旗舰店:韩国著名的服装品牌
2018/09/27 全球购物
Ajax主要包含了哪些技术
2014/06/12 面试题
编辑个人求职信范文
2013/09/21 职场文书
大学毕业生工作的自我评价
2013/10/01 职场文书
生物制药专业自我鉴定
2014/02/19 职场文书
机关党员公开承诺书
2014/08/30 职场文书
收款委托书范本
2014/09/11 职场文书
2014年绩效考核工作总结
2014/12/11 职场文书
实习计划书范文
2015/01/16 职场文书
详解MySQL事务的隔离级别与MVCC
2021/04/22 MySQL
与Windows10相比Windows11有哪些改进?值不值得升级?
2021/11/21 数码科技
Python可视化神器pyecharts之绘制地理图表练习
2022/07/07 Python