关于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实例教程(19) 使用HoTMetal(7)
Dec 23 Javascript
编写跨浏览器的javascript代码必备[js多浏览器兼容写法]
Oct 29 Javascript
jquery ajax提交表单数据的两种方式
Nov 24 Javascript
JQuery设置文本框和密码框得到焦点时的样式
Aug 30 Javascript
JS &amp; JQuery 动态添加 select option
Jun 08 Javascript
Vue数据驱动模拟实现5
Jan 13 Javascript
jQuery表格的维护和删除操作
Feb 03 Javascript
vue响应式更新机制及不使用框架实现简单的数据双向绑定问题
Jun 27 Javascript
详解解决小程序中webview页面多层history返回问题
Aug 20 Javascript
纯js+css实现仿移动端淘宝网站的弹出详情框功能
Dec 29 Javascript
Vue解析剪切板图片并实现发送功能
Feb 04 Javascript
JavaScript实现商品评价五星好评
Nov 30 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生成Flash动画的实现代码
2010/03/12 PHP
php+redis实现注册、删除、编辑、分页、登录、关注等功能示例
2017/02/15 PHP
Thinkphp页面跳转设置跳转等待时间的操作
2019/10/16 PHP
JQUERY 对象与DOM对象之两者相互间的转换
2009/04/27 Javascript
使用JavaScript switch case 另类写法
2010/03/14 Javascript
js prototype截取字符串函数
2010/04/01 Javascript
ajax java 实现自动完成功能
2012/12/19 Javascript
JavaScript基础篇之变量作用域、传值、传址的简单介绍与实例
2013/06/29 Javascript
iframe窗口高度自适应的又一个巧妙实现思路
2014/04/04 Javascript
通过Jquery的Ajax方法读取将table转换为Json
2014/05/31 Javascript
一个JavaScript函数把URL参数解析成Json对象
2014/09/24 Javascript
JS继承用法实例分析
2015/02/05 Javascript
轻松掌握jQuery中wrap()与unwrap()函数的用法
2016/05/24 Javascript
Angular2生命周期钩子函数的详细介绍
2017/07/10 Javascript
详解如何用webpack打包一个网站应用项目
2017/07/12 Javascript
js实现水平滚动菜单导航
2017/07/21 Javascript
AngularJS基于MVC的复杂操作实例讲解
2017/12/31 Javascript
微信小程序实现自上而下字幕滚动
2018/07/14 Javascript
js实现随机8位验证码
2020/07/24 Javascript
微信小程序学习总结(四)事件与冒泡实例分析
2020/06/04 Javascript
selenium设置proxy、headers的方法(phantomjs、Chrome、Firefox)
2018/11/29 Python
Python os.access()用法实例
2019/02/18 Python
Python使用Tkinter实现滚动抽奖器效果
2020/01/06 Python
Java ExcutorService优雅关闭方式解析
2020/05/30 Python
python 密码学示例——凯撒密码的实现
2020/09/21 Python
澳大利亚制造的蜡烛和扩散器:Glasshouse Fragrances
2018/05/20 全球购物
波兰补充商店:Muscle Power
2018/10/29 全球购物
JavaScript获取当前url根目录(路径)
2014/02/19 面试题
软件专业毕业生个人自我鉴定
2014/04/17 职场文书
中专毕业生的自荐书
2014/07/01 职场文书
员工三分钟演讲稿
2014/08/19 职场文书
校庆团日活动总结
2014/08/28 职场文书
大学生就业协议书范本(适用于公司企业)
2014/10/07 职场文书
python第三方网页解析器 lxml 扩展库与 xpath 的使用方法
2021/04/06 Python
sql通过日期判断年龄函数的示例代码
2021/07/16 SQL Server
Sentry的安装、配置、使用教程(Sentry日志手机系统)
2022/07/23 Python