`
laodaobazi
  • 浏览: 277443 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

gzip压缩JavaScript

阅读更多

      为了提高客户端的体验效果,RIA开发逐渐兴起。这样会项目中会充斥的大量的JavaScript代码,与此同时会消耗客户端浏览器性能。对于 Ext 实现的 one page one application ,对于外网访问也就产生了噩梦似的加载(除非你的网速足够快)。为了缓解(不是解决,从代码加载方面考虑)加载慢的问题可以对JavaScript进行压缩。

 

 

JavaScript的gzip静态压缩方法

 

一、将js格式文件压缩成gzjs格式。使用gzip.exe打包压缩后的JS文件,最后生成xx.js.gz,把xx.js.gz文件改成xx.gzjs。压缩实例: ext-all.js (610KB), gzip.exe压缩后为ext-all.gzjs(168KB)。
附:gzip使用方法,在命令行下输入: gzip -9 ext-all.js ext-all.js.gz
修改ext-all.js.gz的后缀名ext-all.gzjs(注:也可以通过gzip -h命令查看帮助)
下载地址:http://www.gzip.org

 

 

二、在项目web.xml中加入过滤器。
代码如下:

<filter> <filter-name>GzipJsFilter</filter-name> <filter-class>net.kangsoft.util.GzipJsFilter</filter-class> <init-param> <param-name>headers</param-name> <param-value>Content-Encoding=gzip</param-value> </init-param> </filter> <filter-mapping> <filter-name>GzipJsFilter</filter-name> <url-pattern>*.gzjs</url-pattern> </filter-mapping>


 

三、加入过滤类

package net.kangsoft.util; import java.io.IOException; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class GzipJsFilter implements Filter { Map headers = new HashMap(); public void destroy() { } public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { if (req instanceof HttpServletRequest) doFilter((HttpServletRequest)req, (HttpServletResponse)res, chain); else chain.doFilter(req, res); } public void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException { request.setCharacterEncoding("UTF-8"); for (Iterator it = this.headers.entrySet().iterator(); it.hasNext(); ) { Map.Entry entry = (Map.Entry)it.next(); response.addHeader((String)entry.getKey(), (String)entry.getValue()); } chain.doFilter(request, response); } public void init(FilterConfig config) throws ServletException { String headersStr = config.getInitParameter("headers"); String[] headers = headersStr.split(","); for (int i = 0; i < headers.length; ++i) { String[] temp = headers[i].split("="); this.headers.put(temp[0].trim(), temp[1].trim()); } } }


 

四、在需导入js的页面head里面添加导入文件,如:<script type="text/javascript"

src="js/ext3/ext-all.gzjs"></script> 

 


 配置Apache,Tomcat的gzip压缩功能

 

       HTTP 压缩可以大大提高浏览网站的速度,它的原理是,在客户端请求网页后,从服务器端将网页文件压缩,再下载到客户端,由客户端的浏览器负责解 压缩并浏览。相对于普通的浏览过程HTML ,CSS,Javascript , Text ,它可以节省40%左右的流量。更为重要的是,它可以对动态生成的,包括CGI、PHP , JSP , ASP , Servlet,SHTML等输出的网页也能进行压缩,压缩效率惊人

对于Tomcat5.0以后的版本是支持对输出内容进行压缩的。使用的是gzip压缩格式

对于Tomcat5.0以后的版本是支持对输出内容进行压缩的. 使用的是gzip压缩格式
下面是tomcat5.5.20 中的$tomcat_home$/conf/server.xml的原内容
< Connector port ="80" maxHttpHeaderSize ="8192" maxThreads ="150" minSpareThreads ="25" maxSpareThreads ="75" enableLookups ="false" redirectPort ="8443" acceptCount ="100" connectionTimeout ="20000" disableUploadTimeout ="true" URIEncoding ="utf-8" /> <!-- Note : To disable connection timeouts, set connectionTimeout value to 0 --> <!-- Note : To use gzip compression you could set the following properties : compression="on" compressionMinSize="2048" noCompressionUserAgents="gozilla, traviata" compressableMimeType="text/html,text/xml" -->


 从上面的第8行内容可以看出,要使用gzip压缩功能,你可以在Connector实例中加上如下 属性即可
1) compression="on" 打开压缩功能
2) compressionMinSize="2048" 启用压缩的输出内容大小,这里面默认为2KB
3) noCompressionUserAgents="gozilla, traviata" 对于以下的浏览器,不启用压缩 
4) compressableMimeType="text/html,text/xml" 压缩类型

我这里的配置内容为:

<Connector port="80" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="utf-8" compression="on" compressionMinSize="2048" noCompressionUserAgents="gozilla, traviata" compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" /> <!-- Note : To disable connection timeouts, set connectionTimeout value to 0 --> <!-- Note : To use gzip compression you could set the following properties : compression="on" compressionMinSize="2048" noCompressionUserAgents="gozilla, traviata" compressableMimeType="text/html,text/xml" -->

 

tomcat 开启Gzip :

1.找到Tomcat 目录下的conf下的server.xml,并找到如下信息

Connector port="8080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true"

 将它改成如下的形式(其实在上面代码的下面已经有了,将他们打开而已。)

<!-- Define a non-SSL HTTP/1.1 Connector on port 8080 --> <Connector port="8080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" compression="on" compressionMinSize="2048" noCompressionUserAgents="gozilla, traviata" compressableMimeType="text/html,text/xml" >

这样,就能够对html和xml进行压缩了,如果要压缩css 和 js,那么需要

 

<Connector port="8080" ......... compressableMimeType="text/html,text/xml,text/css,text/javascript" >

 甚至可以压缩图片:

<Connector port="8080" ......... compressableMimeType="text/html,text/xml,text/css,text/javascript,image/gif,image/jpg" >

 

一旦启用了这个压缩功能后,我们怎么来测试压缩是否有效呢?首先Tomcat是根据浏览器请求头中的accept-encoding来判断浏览器是否支持压缩功能,如果这个值包含有gzip,就表明浏览器支持gzip压缩内容的浏览,所以我们可以用httpclient来写一个这样的简单测试程序.

 

import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.methods.GetMethod; public class HttpTester { public static void main(String[] args) throws Exception{ HttpClient http = new HttpClient(); GetMethod get = new GetMethod("http://www.dlog.cn/js/prototype.js"); try{ get.addRequestHeader("accept-encoding", "gzip,deflate"); get.addRequestHeader("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Alexa Toolbar; Maxthon 2.0)"); int er = http.executeMethod(get); if(er==200){ System.out.println(get.getResponseContentLength()); String html = get.getResponseBodyAsString(); System.out.println(html); System.out.println(html.getBytes().length); } }finally{ get.releaseConnection(); } } }


 

执行这个测试程序,看看它所输出的是什么内容,如果输出的是一些乱码,以及打印内容的长度远小于实际的长度,那么恭喜你,你的配置生效了,你会发现你网站的浏览速度比以前快多了。

对于Apache而言,有两种情况
1)针对Apache2.0之前的版本,它原本是不支持 的,不过可以通过添加第三方的module_gzip模块来启用
2)针对Apache2.0及之后的版本,Apache提供支持, 不过不叫gzip,而叫mod_deflate
下面就对Apache2.0及之后的版本作一个说明
1) 去掉#LoadModule headers_module modules/mod_headers.so前面的注释#,
2) 添加LoadModule deflate_module modules/mod_deflate.so
3) 在VirtualHost中添加

<Location "/"> SetOutputFilter DEFLATE BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary Header append Vary User-Agent env=!dont-vary </Location>

 我这里面有一个完整的演示

# 加载deflate模块 LoadModule headers_module modules/mod_headers.so LoadModule deflate_module modules/mod_deflate.so <VirtualHost *:80> DocumentRoot f:/apacheTest <Location "/"> SetOutputFilter DEFLATE BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary Header append Vary User-Agent env=!dont-vary </Location> </VirtualHost>

 

 

分享到:
评论
1 楼 walker2009 2012-03-06  

相关推荐

    利用JAVASCRIPT即你想那个GZIP压缩与解压缩

    标题中的“利用JAVASCRIPT实现GZIP压缩与解压缩”指的是在JavaScript环境中,我们可以使用原生或第三方库来处理GZIP格式的压缩和解压缩操作。GZIP是一种广泛使用的数据压缩格式,常用于减少网络传输的数据量,尤其是...

    gzip批量压缩js为gzjs文件

    总之,批量使用Gzip压缩JavaScript文件可以有效地减小文件体积,提高网站加载速度,同时通过编写批处理脚本,可以自动化这个过程,节省时间和资源。理解这个过程和相关工具的使用,对优化Web应用性能和提升用户体验...

    pako gzip 压缩和解压缩(支持中文)

    在JavaScript中,使用pako库进行gzip压缩和解压缩非常简单: 1. **压缩**:使用`pako.gzip()`方法,将未压缩的数据作为输入,它会返回一个已压缩的二进制字符串或Buffer(在Node.js环境下)。例如: ```javascript...

    apache开启gzip压缩网络传输减少带宽

    * AddOutputFilterByType DEFLATE application/ms* application/vnd* application/postscript application/javascript application/x-javascript:这是一个设置,对 javascript 文件进行压缩。 结论 本文介绍了...

    最简单的gzip压缩

    标题中的“最简单的gzip压缩”可能是指使用gzip命令行工具进行压缩的过程。在命令行界面,用户只需要输入`gzip 文件名`就能压缩指定的文件。解压gzip压缩文件同样简单,使用`gunzip 压缩文件名.gz`即可。 描述中...

    pako gzip 压缩和解压缩(支持中文).rar

    总的来说,pako库为JavaScript开发者提供了一个强大且易用的工具,用于处理gzip压缩和解压缩任务,特别是对于包含非ASCII字符的数据。其对UTF-8编码的支持使得处理中文字符成为可能,大大拓宽了其在Web开发中的应用...

    ajax+pako.js实现gzip数据压缩上传,解决post数据过长问题

    在Web应用中,服务器通常支持gzip压缩,但客户端到服务器的数据传输默认不进行gzip压缩,需要我们手动处理。 接着,介绍pako.js。pako.js是一个JavaScript实现的压缩库,提供了gzip和deflate等算法的压缩与解压功能...

    gzip 压缩 三种方法

    在IT行业中,压缩技术是数据传输和存储时不可或缺的一部分,特别是在网络环境中,为了减少带宽消耗和加快网页加载速度,gzip压缩被广泛使用。本文将详细介绍如何在PHP环境中利用gzip进行数据压缩,涵盖两种服务器端...

    IIS启用GZIP压缩js、css无效的原因及解决方法.docx

    本文主要探讨的是在IIS服务器上启用GZIP压缩针对JavaScript(js)和CSS文件无效的问题及其解决方案。 IIS(Internet Information Services)是微软提供的一个Web服务器,支持多种功能,包括GZIP压缩。当用户发现IIS...

    gzip压缩js,csss文件

    在Web服务器上启用gzip压缩,可以显著降低页面的加载时间,尤其是在带宽有限的情况下,效果尤为明显。 首先,我们要准备要压缩的js和css文件,并将它们放入一个名为“gzip”的文件夹下。这样做是为了方便管理和操作...

    nginx-1.18.0已开启gzip压缩优化vue项目大小.zip

    在这个场景中,我们看到一个关于“nginx-1.18.0已开启gzip压缩优化vue项目大小.zip”的压缩包,它涉及到三个主要的技术领域:Nginx、gzip压缩以及Vue Element Admin。下面我们将详细探讨这些知识点。 首先,Nginx是...

    Gzip压缩软件(gz文件压缩)

    Gzip压缩软件是一种广泛使用的数据压缩工具,尤其在Unix-like操作系统和Linux系统中非常常见。它的主要功能是将文件进行压缩,生成后缀为.gz的压缩文件,从而节省存储空间和提高传输效率。Gzip软件的全名是GNU zip,...

    java实现gzip ajax请求gzip压缩

    Java作为后端开发的重要语言,支持处理gzip压缩,而Ajax(Asynchronous JavaScript and XML)则是前端进行异步数据交互的技术。本文将深入探讨如何在Java后端实现对gzip压缩的处理,以便于Ajax请求能够正确地进行...

    js压缩gzip格式

    gzip压缩的工作原理基于LZ77算法,它通过查找文本中的重复模式并创建一个索引来实现压缩。在服务器端,gzip可以与HTTP响应头的"Content-Encoding"字段一起使用,告知浏览器接收到的数据是经过gzip压缩的。浏览器则会...

    关于Gzip压缩js文件提高网站运行速度

    其中,通过使用Gzip压缩技术来减小JavaScript文件的大小,能够显著提升网站的加载速度,从而改善用户体验。Gzip是一种广泛使用的数据压缩算法,尤其适用于HTTP传输,因为它可以有效减少网络带宽的消耗。 **Gzip压缩...

    php gzip 压缩js或css

    `Gzip`是一种广泛使用的数据压缩算法,通过在服务器端压缩文件后再传输到浏览器,可以显著减少网络带宽的使用,加快网页加载速度。 首先,我们需要理解`Gzip`的工作原理。`Gzip`基于`DEFLATE`算法,它结合了LZ77...

    javascript的gzip静态解压

    服务器在响应中设置`Content-Encoding: gzip`,告知浏览器返回的内容是GZIP压缩过的。同时,浏览器可以通过发送`Accept-Encoding: gzip, deflate`请求头来告诉服务器它支持GZIP压缩。 2. **浏览器内置支持**: ...

    Net的Gzip压缩类 compressionmodule ,解决js中文压缩问题

    在ASP.NET中,`compressionmodule`是一个专门用于实现HTTP压缩的模块,它能够帮助开发者有效地处理包括JavaScript(js)、CSS、ASPX以及AXD等文件的压缩问题,特别是对于包含中文字符的js文件,Gzip压缩能有效解决...

    php gzip压缩输出的实现方法

    gzip压缩在Unix系统上非常常见,它通过压缩算法减少文件的大小,对于纯文本文件来说,尤其是HTML、CSS、JavaScript等网页内容文件,压缩后通常可以缩减到原来大小的40%甚至更小。这种压缩技术有助于降低网络传输的...

    WIN2003下IIS6.0环境设置页面Gzip压缩.pdf

    标题提到的"WIN2003下IIS6.0环境设置页面Gzip压缩"是一个关于如何在Windows Server 2003上的Internet Information Services (IIS) 6.0中启用HTTP压缩,特别是使用Gzip算法来减小网页传输大小的技术主题。HTTP压缩是...

Global site tag (gtag.js) - Google Analytics