关于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 判断浏览器类型及版本
Feb 21 Javascript
js DOM 元素ID就是全局变量
Sep 20 Javascript
可恶的ie8提示缺少id未定义
Mar 20 Javascript
深入解析JavaScript中的立即执行函数
May 21 Javascript
js 连续赋值的简单实现
Jun 13 Javascript
详解Vue.use自定义自己的全局组件
Jun 14 Javascript
angular过滤器实现排序功能
Jun 27 Javascript
JavaScript Math对象和调试程序的方法分析
May 13 Javascript
JS实现水平遍历和嵌套递归操作示例
Aug 15 Javascript
在Angular中实现一个级联效果的下拉框的示例代码
May 20 Javascript
Vue $emit()不能触发父组件方法的原因及解决
Jul 28 Javascript
JavaScript实现点击切换验证码及校验
Jan 10 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
Eclipse的PHP插件PHPEclipse安装和使用
2014/07/20 PHP
PHP匿名函数和use子句用法实例
2016/03/16 PHP
浅谈Laravel中的三种中间件的作用
2019/10/13 PHP
php文件上传原理与实现方法详解
2019/12/20 PHP
自己的js工具 Cookie 封装
2009/08/21 Javascript
有关DOM元素与事件的3个谜题
2010/11/11 Javascript
JavaScript中的类继承
2010/11/25 Javascript
基于jquery的网站幻灯片切换效果焦点图代码
2013/09/15 Javascript
Jquery遍历节点的方法小集
2014/01/22 Javascript
禁止iframe脚本弹出的窗口覆盖了父窗口的方法
2014/09/06 Javascript
node.js中的fs.chownSync方法使用说明
2014/12/16 Javascript
javascript内置对象操作详解
2015/02/04 Javascript
javascript判断数组内是否重复的方法
2015/04/21 Javascript
轻松学习jQuery插件EasyUI EasyUI创建菜单与按钮
2015/11/30 Javascript
jQuery validate插件实现ajax验证重复的2种方法
2016/01/22 Javascript
js实现div模拟模态对话框展现URL内容
2016/05/27 Javascript
jquery easyui dataGrid动态改变排序字段名的方法
2017/03/02 Javascript
JS 60秒后重新发送验证码的实例讲解
2017/07/26 Javascript
详解Vue SPA项目优化小记
2018/07/03 Javascript
[jQuery] 事件和动画详解
2019/03/05 jQuery
vue如何使用async、await实现同步请求
2019/12/09 Javascript
vue radio单选框,获取当前项(每一项)的value值操作
2020/09/10 Javascript
详解在Python程序中使用Cookie的教程
2015/04/30 Python
Python 常用模块 re 使用方法详解
2019/06/06 Python
Born鞋子官网:Born Shoes
2017/04/06 全球购物
Funko官方商店:源自美国,畅销全球搪胶收藏玩偶
2018/09/15 全球购物
在家更换处方镜片:Lensabl
2019/05/01 全球购物
班队活动设计方案
2014/01/30 职场文书
先进集体事迹材料
2014/02/17 职场文书
2014年绩效考核工作总结
2014/12/11 职场文书
2016新年慰问信范文
2015/03/25 职场文书
通讯稿范文
2015/07/22 职场文书
python实现进度条的多种实现
2021/04/29 Python
Java实战之课程信息管理系统的实现
2022/04/01 Java/Android
让JavaScript代码更加精简的方法技巧
2022/06/01 Javascript
uniapp开发打包多端应用完整方法指南
2022/12/24 Javascript