`
badqiu
  • 浏览: 674433 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

关于JavaScript的gzip静态压缩方法

    博客分类:
  • AJAX
阅读更多
传统的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中可以直接通过在httpd.conf增加AddEncoding x-gzip .gzjs来映射.gzjs文件的header

二.相关压缩率数据
1. 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

分享到:
评论
12 楼 叶子 2006-12-05  
比live和google map好多了

记得之前这两个的js...压缩后的还有500多k的..

特别是google map,3个js,每个接近200k
11 楼 badqiu 2006-12-05  
fins 写道
哦 那可能是我理解错了你的初衷
我们没有使用过 服务器端缓存压缩结果的方式
我们核心思想还是在客户端缓存
因为最终目的是为了减少对js文件的请求时间和请求次数
在js没有变化的情况下 没有比在客户端缓存更好的方法了


呵,我这里主要解决的是首次js加载的问题(因为我经过的项目中一个页面所有的js总和有439KB),
而你提供的是服务器的通用的性能优化
10 楼 fins 2006-12-05  
哦 那可能是我理解错了你的初衷
我们没有使用过 服务器端缓存压缩结果的方式
我们核心思想还是在客户端缓存
因为最终目的是为了减少对js文件的请求时间和请求次数
在js没有变化的情况下 没有比在客户端缓存更好的方法了
9 楼 badqiu 2006-12-05  
fins 写道
这个工作不是我做的 我还真不知道怎么配的

我们本机开发环境就是普通的 tomcat
tomcat下开启动态压缩是

   compression="on" 
   compressionMinSize="2048" 
   noCompressionUserAgents="gozilla, traviata" 
   compressableMimeType="text/html,text/xml,text/javascript"


给文件加失效我们用的是应用服务器里设置的(我不知道怎么设置 我们服务器用的websphere) tomcat如果不结合apache好像不支持

自己做也可以 做过滤
然后对所有 *.js的请求 加header

response.setDateHeader("Expires", (System.currentTimeMillis() + 一很长很长的long型));


你这个设置Expires并不是在服务器端缓存js压缩后的内容,而是控制客户端浏览器的缓存使用,而我查看apache的文档没有看到mod_deflate与mod_cache结合的样例,

上面静态压缩要解决的就是动态压缩导致服务器CPU占用率太高的问题,并不是客户端的文件过期设置
8 楼 daoger 2006-12-05  
http://ajax.org/space/start
2006-12-04 Monday
7 楼 fins 2006-12-05  
这个工作不是我做的 我还真不知道怎么配的

我们本机开发环境就是普通的 tomcat
tomcat下开启动态压缩是

   compression="on" 
   compressionMinSize="2048" 
   noCompressionUserAgents="gozilla, traviata" 
   compressableMimeType="text/html,text/xml,text/javascript"


给文件加失效我们用的是应用服务器里设置的(我不知道怎么设置 我们服务器用的websphere) tomcat如果不结合apache好像不支持

自己做也可以 做过滤
然后对所有 *.js的请求 加header

response.setDateHeader("Expires", (System.currentTimeMillis() + 一很长很长的long型));
6 楼 badqiu 2006-12-05  
fins 写道
我们的做法是
利用服务器自带的动态压缩功能 传输时压缩数据流
然后设置一个失效期

这样只有第一次的时候慢 以后就不慢了

因为我们的系统js一旦写好 不会轻易变动 所以这种方法一直沿用至今


不知可否共享一下你的服务器配置,这种静态压缩入侵性太强
5 楼 fins 2006-12-05  
我们的做法是
利用服务器自带的动态压缩功能 传输时压缩数据流
然后设置一个失效期

这样只有第一次的时候慢 以后就不慢了

因为我们的系统js一旦写好 不会轻易变动 所以这种方法一直沿用至今
4 楼 badqiu 2006-12-05  
叶子 写道
这样的如果客户端不支持gzip会出问题的吧

个人觉得还是交给apache自动做好了.HOHO..


我测试过的在IE5上是没有问题的,再低版本没有试过(希望有人可以列出gzip的浏览器支持情况),其它firefox等也都是支持的,如果你的客户端不支持gzip,我觉得你可能也没有支持他的必要了,因为现在的大部分js框架都需要IE5及其以上版本

并且你可以根据客户端浏览器提交的Http Header判断浏览器是否支持gzip传输
3 楼 叶子 2006-12-05  
这样的如果客户端不支持gzip会出问题的吧

个人觉得还是交给apache自动做好了.HOHO..
2 楼 together 2006-12-05  
还是很有用的。尤其对于用户访问量非常大的网站,以免因网络速度过慢而造成页面无法完全加载。
1 楼 oznyang 2006-12-05  
客户端脚本都是缓存起来的,除了第一次慢点,以后基本可以忽略不计

相关推荐

    javascript的gzip静态解压

    JavaScript的GZIP静态解压是Web开发中一个重要的技术话题,特别是在优化网页加载速度和减少网络传输数据量方面。GZIP是一种广泛使用的数据压缩算法,它可以在服务器端对HTML、CSS、JavaScript等文件进行压缩,然后在...

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

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

    gzip 压缩 三种方法

    - **缓存策略**:开启gzip压缩后,应考虑对静态资源设置合适的缓存策略,以减少不必要的压缩计算。 - **文件大小阈值**:对于非常小的文件,压缩可能并不能带来显著的优化,甚至可能因额外的压缩和解压过程而降低...

    js压缩gzip格式

    它可能涵盖了在不同操作系统(如Linux、Windows和macOS)上安装gzip的方法,以及如何使用gzip命令行工具对文件进行压缩和解压缩。此外,它可能还包含了如何在服务器配置文件中启用gzip的示例,帮助开发者更好地理解...

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

    在开发环境中,gzip也常用于HTTP压缩,服务器可以根据浏览器的支持情况发送gz压缩过的HTML、CSS、JavaScript等静态资源,减少网络传输的数据量,提高页面加载速度。此外,许多版本控制系统如Git也支持对提交的文件...

    页面gzip压缩、加快页面显示

    1. **IIS配置:** 在IIS管理器中,选择目标网站,双击“压缩”功能,勾选“静态内容”和“动态内容”的“启用压缩”,然后重启网站应用池使设置生效。 2. **Web.config配置:** 可以通过修改`web.config`文件来开启...

    php gzip压缩输出的实现方法

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

    JavaScript 代码压缩工具

    5. **GZIP压缩**:除了JavaScript代码本身的压缩,服务器端还可以开启GZIP压缩,对发送到客户端的文件进行进一步压缩,这在所有类型的文件上都能有效减小传输数据量。 6. **延迟加载(Lazy Loading)**:对于非首屏...

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

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

    Gzip压缩.docx

    3. 编辑MetaBase.xml配置文件,根据需求调整动态文件和静态文件的压缩设置,如开启动态压缩(设置HcDoDynamicCompression为"TRUE")和静态压缩(设置HcDoStaticCompression和HcDoOnDemandCompression为"TRUE"),并...

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

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

    IIS上启用Gzip压缩(HTTP压缩)

    HTTP压缩是一种在Web服务器和浏览器之间传输压缩文本内容的技术手段,通过采用诸如Gzip这样的通用压缩算法对HTML、JavaScript或CSS等文件进行压缩,能够有效降低数据传输量,加快客户端浏览器的加载速度。...

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

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

    【ASP.NET编程知识】ASP.NET Core中预压缩静态文件的方法步骤.docx

    ASP.NET Core 中预压缩静态文件的方法步骤 ASP.NET Core 中预压缩静态文件的方法步骤是指在 ASP.NET Core 应用程序中,如何将静态文件预压缩,以减少网络带宽和服务器 CPU 负载。预压缩静态文件可以在服务器端完成...

    Nginx服务器实现数据静态压缩的方法

    本篇知识点将详细介绍如何在Nginx服务器上实现数据静态压缩的方法。 首先需要了解的是,Nginx服务器的静态压缩功能与Apache服务器的Gzip压缩功能类似。通过压缩静态文件,可以减少网络传输的数据量,降低服务器带宽...

    在Apache服务器上启用GZip压缩静态内容的方法

    ### 在Apache服务器上启用GZip压缩静态内容的方法 #### 一、引言 随着互联网的发展,用户对于网页加载速度的要求越来越高。为了提升用户体验并减轻服务器带宽压力,开发者们经常采用压缩技术来减小文件传输量。...

    gziptest压缩JS

    在描述中提到,通过这种压缩方法,可以实现超过50%的压缩比例,这意味着原始JS文件可以显著瘦身,而不会牺牲功能完整性。 "gzip" 是一种广泛使用的数据压缩算法,尤其适用于在网络上传输大量数据时。在Web开发中,...

    一键开启Windows IIS GZIP压缩工具

    Windows IIS(Internet ...总的来说,Windows IIS GZIP压缩工具提供了便捷的方法来优化网站性能,通过减少数据传输量,提升用户体验。但同时也需要考虑服务器性能和缓存策略等因素,确保最佳的系统运行状态。

    windowsphone Gzip 压缩

    在Web开发中,Gzip通常被服务器用于对HTML、CSS、JavaScript等静态资源进行压缩,然后再发送到客户端(如Windows Phone设备),从而降低网络带宽消耗,加快页面加载速度。 在Windows Phone平台上,开发人员可能需要...

Global site tag (gtag.js) - Google Analytics