web系统js、css文件终极提速之gzip静态压缩+动态压缩

简介: 首先转载一个静态方法web系统中免不了要使用大量的javascript和css文件,如开源的javascript框架prototype、jquery、extjs-core等等,这些js框架,少都有几百K,我曾经做过不少项目,都用了大量的js。特别是extjs,功能实在是强大,却也是体积最大的一个js框架。使用中稍不留神很容易导致你的系统反映缓慢。为了提高js、css文件的下载速度,从而提高页

首先转载一个静态方法

web系统中免不了要使用大量的javascript和css文件,如开源的javascript框架prototype、jquery、extjs-core等等,这些js框架,少都有几百K,我曾经做过不少项目,都用了大量的js。特别是extjs,功能实在是强大,却也是体积最大的一个js框架。使用中稍不留神很容易导致你的系统反映缓慢。为了提高js、css文件的下载速度,从而提高页面的响应速度,减小文件的大小才是终极之道。减少这些文件的大小已经有了不少的js压缩工具可以做到,。在这里重提gzip静态压缩的技术,是由于在项目中经过实践的检验,证实是可行、高效而且低风险的做法。

    如果使用js压缩工具压缩js、css文件,会存在不少的问题,而要解决这些问题,必须付出不少的人力资源。因为通常一些旧的项目,或者一些只考虑在IE中使用的web系统,在写js代码的时候,有不少不规范的地方,如在语句后忘了打“;”号,ie可以通过,其它一些浏览器却不认;js压缩后,会导致甚至在ie里面也无法运行。要解决这些js压缩后的问题,必须进行严格的测试,而往往都很难发现具体错在哪里,最终很有可能花费了大量的时间去排错。
    而使用gzip静态压缩技术,却绝对不会存在这些问题,而且压缩率比js压缩还要高许多。你唯一要担心的是浏览器是否支持gzip。而现在的浏览器却都已经完全支持gzip技术了(如微软的IE、火狐firefox、苹果的safari、谷歌的chrome等),所以就不用担心了。这里有个小小的特殊,就是微软的IE必须是要在IE6SP1或以上的版本才能很好的支持gzip,有些精间版的windows系统,就算是升级到IE6SP1或IE7都不能很好的支持gzip,这也没关系,打上几个关于gzip的微软补丁就行了(后面有相关说明)。
    以下为我在实际项目中使用的gzip静态压缩技术的所有细节,提供给大家参考。
    对原有web系统的gzip静态压缩处理主要方法为: 
1.将web系统中的*.js、*.css文件预先通过gzip.exe压缩保存成*.jsgz 、*.cssgz 文件;
2.将web系统中引用js、css文件的地方转换为引用jsgz 、cssgz文件 ;
3.客户端请求jsgz、cssgz文件时,服务器通过过滤器设置header,将所有以jsgz、cssgz结尾的文件的请求增加设置“header Content-Encoding=gzip”的响应头。

下面为详细的处理脚本及相关配置文件的修改:
一)将web系统转换为使用gzip静态压缩的web系统的ant脚本


二)修改web.xml配置文件
  
gzipFileFilter   
com.dragon.web.AddHeaderFilter   
  
headers   
Content-Encoding=gzip   
  
  
......
gzipFileFilter
*.jsgz
gzipFileFilter
*.cssgz
......

三)过滤器源代码
package com.dragon.web;

import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

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;

/**
* 给请求文件添加额外Header的过滤器
* @author dragon rongjih@163.com
* @since 2009-01-08
*/
public class AddHeaderFilter implements Filter {
Map headers = new HashMap();
public void init(FilterConfig config) throws ServletException {
//获取额外配置的header
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());
}
}
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
if(req instanceof HttpServletRequest) {
//仅对Http请求添加该过滤器的处理
doFilter((HttpServletRequest)req, (HttpServletResponse)res, chain);
}else {
chain.doFilter(req, res);
}
}
public void doFilter(HttpServletRequest request,
HttpServletResponse response, FilterChain chain)
throws IOException, ServletException {
//将额外配置的header添加到当前Response
for(Iterator it = headers.entrySet().iterator();it.hasNext();) {
Map.Entry entry = (Map.Entry)it.next();
response.addHeader((String)entry.getKey(),(String)entry.getValue());
}
chain.doFilter(request, response);
}
}

关于IE浏览器的gzip支持补充:
    IE必须是要在IE6SP1或以上的版本才能很好的支持gzip,有些精间版的windows系统,就算是升级到IE6SP1或IE7都不能很好的支持gzip,这时就必须给系统安装如下几个补丁:
"_blank">q831167 其中q822002是必须的,而Q831167和Q832894我没试过不打会不会有影响,因为我在项目中碰到打开gzip的网页有问题时都把这三个补丁打上了,当时出现过问题的系统有windows 2000、windows XP SP0、windows XP SP1、windows XP SP2、一些被精简过的windows XP系统。
 
 
 
 
 
=====================
以下附上动态压缩方法
    简单到没什么可说的,使用nginx的配置文件nginx.conf打开压缩功能即可
http {
    include       mime.types;
    default_type  application/octet-stream;
	server_tokens off;                         ##禁止显示nginx软件的版本号
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

   gzip  on;
   gzip_min_length  1000;
   gzip_buffers     4 8k;

   gzip_comp_level 9; 				#0-9 默认值为1,值越大压缩率越高,消耗的cpu资源越多,传输量减小。
   gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;


	### nginx做非80端口转发
	server {
        listen       82;
        server_name  localhost; 
        location / {
			proxy_pass  http://127.0.0.1:7001;
			proxy_set_header	Host             	$host:82;
			proxy_set_header	X-Real-IP        	$remote_addr;
			proxy_set_header	X-Forwarded-For		$proxy_add_x_forwarded_for;
			proxy_set_header 	Via    				"nginx"; 
        }
	} 
}

相关文章
|
11月前
|
前端开发 JavaScript 开发者
JavaScript:无处不在的Web语言
JavaScript:无处不在的Web语言
|
11月前
|
前端开发 JavaScript 开发者
JavaScript:构建动态Web的核心力量
JavaScript:构建动态Web的核心力量
|
前端开发 算法 API
构建高性能图像处理Web应用:Next.js与TailwindCSS实践
本文分享了构建在线图像黑白转换工具的技术实践,涵盖技术栈选择、架构设计与性能优化。项目采用Next.js提供优秀的SSR性能和SEO支持,TailwindCSS加速UI开发,WebAssembly实现高性能图像处理算法。通过渐进式处理、WebWorker隔离及内存管理等策略,解决大图像处理性能瓶颈,并确保跨浏览器兼容性和移动设备优化。实际应用案例展示了其即时处理、高质量输出和客户端隐私保护等特点。未来计划引入WebGPU加速、AI增强等功能,进一步提升用户体验。此技术栈为Web图像处理应用提供了高效可行的解决方案。
|
11月前
|
JavaScript 前端开发 开发者
JavaScript:驱动现代Web的核心引擎
JavaScript:驱动现代Web的核心引擎
|
11月前
|
JavaScript 前端开发 物联网
JavaScript:驱动现代Web的核心引擎
JavaScript:驱动现代Web的核心引擎
|
存储 前端开发 JavaScript
仿真银行app下载安装, 银行卡虚拟余额制作app,用html+css+js实现逼真娱乐工具
这是一个简单的银行账户模拟器项目,用于学习前端开发基础。用户可进行存款、取款操作,所有数据存储于浏览器内存中
|
JSON JavaScript 前端开发
JavaScript入门干货:蓝桥杯Web组分章学习笔记(基于蓝桥云课《JavaScript基础入门》)
这是一份详尽的JavaScript学习笔记,涵盖基础到进阶内容。包括变量、运算符、数组、字符串操作,DOM/BOM事件处理,内置对象(如Array、Date、Math)用法,JSON格式解析,以及函数作用域与闭包等核心概念。同时深入探讨值类型和引用类型的差异、异常处理机制,并介绍函数高级特性如call/apply/bind方法、递归及arguments对象。代码按章节分点整理,注释细致,适合初学者系统掌握JavaScript编程知识。
262 2
|
前端开发
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
1293 1
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
html+js+css实现的建筑方块立体数字时钟源码
html+js+css实现的建筑方块立体数字时钟源码
732 33
|
开发框架 前端开发 开发者
04-Bootstrap 全局 css 样式_栅格系统 1|学习笔记
快速学习04-Bootstrap 全局 css 样式_栅格系统 1
279 0
04-Bootstrap 全局 css 样式_栅格系统 1|学习笔记