关于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 相关文章推荐
javascript 一个函数对同一元素的多个事件响应
Jul 25 Javascript
JavaScript this调用规则说明
Mar 08 Javascript
jQuery中after的两种用法实例
Jul 03 Javascript
Laydate时间组件在火狐浏览器下有多时间输入框时只能给第一个输入框赋值的解决方法
Aug 18 Javascript
JavaScript中最容易混淆的作用域、提升、闭包知识详解(推荐)
Sep 05 Javascript
JS组件系列之MVVM组件 vue 30分钟搞定前端增删改查
Apr 28 Javascript
vue+element-ui动态生成多级表头的方法
Aug 28 Javascript
CSS3 动画卡顿性能优化的完美解决方案
Sep 20 Javascript
vue 实现小程序或商品秒杀倒计时
Apr 14 Javascript
微信小程序 checkbox使用实例解析
Sep 09 Javascript
vue路由缓存的几种实现方式小结
Feb 02 Javascript
我所理解的JavaScript中的this指向
Sep 04 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遍历某个目录下的所有文件和子文件夹的实现代码
2013/06/28 PHP
PHP模板引擎Smarty中变量的使用方法示例
2016/04/11 PHP
基于ThinkPHP5框架使用QueryList爬取并存入mysql数据库操作示例
2019/05/25 PHP
TNC vs BOOM BO3 第一场2.13
2021/03/10 DOTA
使用onbeforeunload属性后的副作用
2007/03/08 Javascript
基于JQuery的6个Tab选项卡插件
2010/09/03 Javascript
javascript中的作用域scope介绍
2010/12/28 Javascript
Ext.get() 和 Ext.query()组合使用实现最灵活的取元素方式
2011/09/26 Javascript
select标记美化--JS式插件、后期加载
2013/04/01 Javascript
jQuery中odd选择器的定义和用法
2014/12/23 Javascript
Bootstrap树形控件使用方法详解
2016/01/27 Javascript
老生常谈Javascript中的原型和this指针
2016/10/09 Javascript
BootStrap 弹出层代码
2017/02/09 Javascript
jQuery tip提示插件(实例分享)
2017/04/28 jQuery
Bootstrap布局之栅格系统学习笔记
2017/05/04 Javascript
微信小程序的分类页面制作
2017/06/27 Javascript
js排序与重组的实例讲解
2017/08/28 Javascript
java遇到微信小程序 &quot;支付验证签名失败&quot; 问题解决
2019/12/22 Javascript
Vue——前端生成二维码的示例
2020/12/19 Vue.js
详解Vue3.0 + TypeScript + Vite初体验
2021/02/22 Vue.js
Python判断文件和文件夹是否存在的方法
2015/05/21 Python
Python+OpenCV实现车牌字符分割和识别
2018/03/31 Python
pycharm运行和调试不显示结果的解决方法
2018/11/30 Python
python批量修改文件夹及其子文件夹下的文件内容
2019/03/15 Python
Python tkinter实现图片标注功能(完整代码)
2019/12/08 Python
基于Python绘制个人足迹地图
2020/06/01 Python
如何用用Python将地址标记在地图上
2021/02/07 Python
什么是唯一索引
2015/07/05 面试题
2014年党员创先争优承诺书
2014/05/29 职场文书
金融与证券专业求职信
2014/06/22 职场文书
在职党员进社区活动总结
2014/07/05 职场文书
优秀党员先进事迹材料
2014/12/18 职场文书
单位租车协议书
2015/01/29 职场文书
python数据分析之用sklearn预测糖尿病
2021/04/22 Python
一文搞懂Golang 时间和日期相关函数
2021/12/06 Golang
Win11 21h2可以升级22h2吗?看看你的电脑符不符合要求
2022/07/07 数码科技