关于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 相关文章推荐
ExtJS GTGrid 简单用户管理
Jul 01 Javascript
非常好用的JsonToString 方法 简单实例
Jul 18 Javascript
js 中的switch表达式使用示例
Jun 03 Javascript
关于onchange事件在IE和FF下的表现及解决方法
Mar 08 Javascript
通过$(this)使用jQuery包装后的方法或属性
May 18 Javascript
浅析JS动态创建元素【两种方法】
Apr 20 Javascript
JS 实现可停顿的垂直滚动实例代码
Nov 23 Javascript
js使用Replace结合正则替换重复出现的字符串功能示例
Dec 27 Javascript
前端页面文件拖拽上传模块js代码示例
May 19 Javascript
解决Layui数据表格中checkbox位置不居中的方法
Aug 15 Javascript
Vue中使用sass实现换肤功能
Sep 07 Javascript
关于javascript中的promise的用法和注意事项(推荐)
Jan 15 Javascript
关于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
php daddslashes()和 saddslashes()有哪些区别分析
2012/10/26 PHP
phpStudy访问速度慢和启动失败的解决办法
2015/11/19 PHP
最新版本PHP 7 vs HHVM 多角度比较
2016/02/14 PHP
PHP实现的操作数组类库定义与用法示例
2019/05/24 PHP
Jquery Ajax学习实例4 向WebService发出请求,返回实体对象的异步调用
2010/03/16 Javascript
javascript判断iphone/android手机横竖屏模式的函数
2011/12/20 Javascript
jQuery 自定义函数写法分享
2012/03/30 Javascript
Jquery创建层显示标题和内容且随鼠标移动而移动
2014/01/26 Javascript
js判断当页面无法回退时关闭网页否则就history.go(-1)
2014/08/07 Javascript
JavaScript使用pop方法移除数组最后一个元素用法实例
2015/04/06 Javascript
JS实现网页右侧带动画效果的伸缩窗口代码
2015/10/29 Javascript
浅析jQuery Mobile的初始化事件
2015/12/03 Javascript
js与jQuery实现checkbox复选框全选/全不选的方法
2016/01/05 Javascript
浅谈JavaScript变量的自动转换和语句
2016/06/12 Javascript
微信小程序 摇一摇抽奖简单实例实现代码
2017/01/09 Javascript
vue技术分享之你可能不知道的7个秘密
2018/04/09 Javascript
详解mpvue scroll-view自动回弹bug解决方案
2018/10/01 Javascript
layui导出所有数据的例子
2019/09/10 Javascript
VUE 动态组件的应用案例分析
2019/12/02 Javascript
Python实战购物车项目的实现参考
2019/02/20 Python
Python中使用遍历在列表中添加字典遇到的坑
2019/02/27 Python
python 使用装饰器并记录log的示例代码
2019/07/12 Python
Python 元组拆包示例(Tuple Unpacking)
2019/12/24 Python
Python StringIO及BytesIO包使用方法解析
2020/06/15 Python
html5使用canvas绘制太阳系效果
2014/12/15 HTML / CSS
elf彩妆英国官网:e.l.f. Cosmetics英国(美国平价彩妆品牌)
2017/11/02 全球购物
HOTEL INFO英国:搜索全球酒店
2019/08/08 全球购物
Paradox London官方网站:英国新娘鞋婚礼鞋品牌
2019/08/29 全球购物
房地产广告词大全
2014/03/19 职场文书
公司会议策划方案
2014/05/17 职场文书
乐观自信演讲稿范文
2014/05/21 职场文书
就业导师推荐信范文
2015/03/27 职场文书
工地材料员岗位职责
2015/04/11 职场文书
公路施工安全责任书
2015/05/08 职场文书
详解Python自动化之文件自动化处理
2021/06/21 Python
Java9新特性之Module模块化编程示例演绎
2022/03/16 Java/Android