关于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获取CSS样式中的颜色值的问题,不同浏览器格式不同的解决办法
May 13 Javascript
Document:getElementsByName()使用方法及示例
Oct 28 Javascript
JS取request值以及自动执行使用示例
Feb 24 Javascript
JavaScript实现简单图片滚动附源码下载
Jun 17 Javascript
基于jquery实现人物头像跟随鼠标转动
Aug 23 Javascript
详解jQuery UI库中文本输入自动补全功能的用法
Apr 23 Javascript
基于HTML5+JS实现本地图片裁剪并上传功能
Mar 24 Javascript
详解webpack es6 to es5支持配置
May 04 Javascript
es7学习教程之fetch解决异步嵌套问题的方法示例
Jul 21 Javascript
Vue.js进行查询操作的实例详解
Aug 25 Javascript
深入理解基于vue-cli的webpack打包优化实践及探索
Oct 14 Javascript
Vue父组件向子组件传值以及data和props的区别详解
Mar 02 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
自己做矿石收音机
2021/03/02 无线电
十天学会php之第五天
2006/10/09 PHP
php 防止单引号,双引号在接受页面转义
2008/07/10 PHP
PHP+MySQL插入操作实例
2015/01/21 PHP
PHP数学运算与数据处理实例分析
2016/04/01 PHP
Laravel框架表单验证操作实例分析
2019/09/30 PHP
javascript实现的listview效果
2007/04/28 Javascript
JavaScript中的稀疏数组与密集数组[译]
2012/09/17 Javascript
jquery制作弹窗提示窗口代码分享
2014/03/02 Javascript
JavaScript判断是否为数字的4种方法及效率比较
2015/04/01 Javascript
AngularJS实用开发技巧(推荐)
2016/07/13 Javascript
jQuery延迟执行的实现方法
2016/12/21 Javascript
Thinkphp5微信小程序获取用户信息接口的实例详解
2017/09/26 Javascript
关于react-router/react-router-dom v4 history不能访问问题的解决
2018/01/08 Javascript
vue新vue-cli3环境配置和模拟json数据的实例
2018/09/19 Javascript
Vue js 的生命周期(看了就懂)(推荐)
2019/03/29 Javascript
JavaScript中Dom操作实例详解
2019/07/08 Javascript
微信小程序在其他页面监听globalData中值的变化
2019/07/15 Javascript
基于vue项目设置resolves.alias: '@'路径并适配webstorm
2020/12/02 Vue.js
浅析Python中的join()方法的使用
2015/05/19 Python
基于python的七种经典排序算法(推荐)
2016/12/08 Python
基于Python的XSS测试工具XSStrike使用方法
2017/07/29 Python
python跨文件使用全局变量的实现
2020/11/17 Python
使用bandit对目标python代码进行安全函数扫描的案例分析
2021/01/27 Python
新英格兰最大的特色礼品连锁店:The Paper Store
2018/07/23 全球购物
Dr. Martens马汀博士澳大利亚官网:马丁靴鼻祖
2019/07/02 全球购物
托管代码(Managed Code)和非托管代码(Unmanaged Code)有什么区别
2014/09/29 面试题
机械化及自动化毕业生的自我评价分享
2013/11/06 职场文书
品质主管的岗位职责
2013/12/04 职场文书
大学生演讲稿范文
2014/01/11 职场文书
小学毕业寄语大全
2014/04/03 职场文书
创先争优个人承诺书
2014/08/30 职场文书
不尊敬老师的检讨书
2014/12/21 职场文书
各类场合主持词开场白范文集锦
2019/08/16 职场文书
Go 语言结构实例分析
2021/07/04 Golang
利用js实现简单开关灯代码
2021/11/23 Javascript