关于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 相关文章推荐
基于dom编程中 动态创建与删除元素的使用
Apr 17 Javascript
jQuery JSON实现无刷新三级联动实例探讨
May 28 Javascript
javascript setinterval 的正确语法如何书写
Jun 17 Javascript
js中运算符&amp;&amp; 和 || 的使用记录
Aug 21 Javascript
推荐10 个很棒的 jQuery 特效代码
Oct 04 Javascript
js获取Get值的方法
Sep 29 Javascript
详解使用React全家桶搭建一个后台管理系统
Nov 04 Javascript
Jquery和CSS实现选择框重置按钮功能
Nov 08 jQuery
详解js创建对象的几种方法及继承
Apr 12 Javascript
微信小程序上传文件到阿里OSS教程
May 20 Javascript
使用layer弹窗提交表单时判断表单是否输入为空的例子
Sep 26 Javascript
vue 数据双向绑定的实现方法
Mar 04 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
使用Apache的htaccess防止图片被盗链的解决方法
2013/04/27 PHP
使用PHP和JavaScript判断请求是否来自微信内浏览器
2015/08/18 PHP
php HTML无刷新提交表单
2016/04/05 PHP
php str_getcsv把字符串解析为数组的实现方法
2017/04/05 PHP
一个实用的php验证码类
2017/07/06 PHP
PHP实现的函数重载功能示例
2018/08/03 PHP
Mootools 1.2教程 事件处理
2009/09/15 Javascript
JS获取节点的兄弟,父级,子级元素的方法
2014/01/09 Javascript
jquery中子元素和后代元素的区别示例介绍
2014/04/02 Javascript
php和js对数据库图片进行等比缩放示例
2014/04/28 Javascript
jquery实现一个简单好用的弹出框
2014/09/26 Javascript
KnockoutJS 3.X API 第四章之表单textInput、hasFocus、checked绑定
2016/10/11 Javascript
JavaScript 通过Ajax 动态加载CheckBox复选框
2017/08/31 Javascript
解决vue动态下拉菜单 有数据未反应的问题
2020/08/06 Javascript
[58:42]DOTA2上海特级锦标赛C组败者赛 Newbee VS Archon第一局
2016/02/27 DOTA
Python中装饰器的一个妙用
2015/02/08 Python
Python中一行和多行import模块问题
2018/04/01 Python
python 定义n个变量方法 (变量声明自动化)
2018/11/10 Python
Django之使用celery和NGINX生成静态页面实现性能优化
2019/10/08 Python
python实现图片二值化及灰度处理方式
2019/12/07 Python
python路径的写法及目录的获取方式
2019/12/26 Python
Python爬取梨视频的示例
2021/01/29 Python
手把手教你用纯css3实现轮播图效果实例
2017/05/04 HTML / CSS
HTML5是否真的可以取代Flash
2010/02/10 HTML / CSS
mui几种页面跳转方式对比总结概括
2017/08/18 HTML / CSS
Asics日本官网:鬼冢八喜郎创立的跑鞋运动品牌
2017/10/18 全球购物
办公室岗位职责
2014/02/12 职场文书
理工大学毕业生自荐信范文
2014/02/22 职场文书
会计专业求职信范文
2014/03/16 职场文书
yy司仪主持词
2014/03/22 职场文书
2014年清明节网上祭英烈寄语
2014/04/09 职场文书
高二学生评语大全
2014/04/25 职场文书
签约仪式策划方案
2014/06/02 职场文书
销售经理岗位职责范本
2015/04/02 职场文书
Python matplotlib可视化之绘制韦恩图
2022/02/24 Python
一文搞懂Java中的注解和反射
2022/06/21 Java/Android