- 浏览: 930612 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (423)
- mysql (37)
- hibernate (3)
- struts (9)
- spring (33)
- dom4j (2)
- junit (0)
- exception (1)
- 随笔杂谈 (12)
- google app engine (1)
- XMPP (1)
- OAuth安全授权 (1)
- 版本控制 (8)
- 心情感悟 (0)
- core java (19)
- log4j (7)
- jquery (12)
- javascript (10)
- 网站性能优化及工具 (11)
- 服务器架设配置等 (38)
- EXT (4)
- 正则表达式 (5)
- 日志统计分析 (2)
- htmlparse (4)
- httpclient (5)
- java随笔 (5)
- dhtmlxtree (1)
- freemarke (5)
- memcached (6)
- javamail (5)
- Linux命令 (10)
- 应用监控cpu web jdbc等 (4)
- jmagick (9)
- 第三方缓存策略 (9)
- ORM (2)
- hadoop (2)
- 大数据量处理 (8)
- 经典 (1)
- 权限设计 (1)
- andriod (1)
- mybatis (12)
- redis (24)
- 数据结构_算法 (5)
- 分布式系统 (1)
- php (1)
- 网络编程 (3)
- 服务器部署 (3)
- ios (2)
- IM (23)
- mina (1)
- 视讯和语音 (1)
- 代码生成 (1)
- 架构 (4)
- 建模工具 (1)
- oracle (4)
- solr (10)
- 构建工具 (7)
- html5 (1)
- nginx (5)
- css (1)
- 大数据-分布式 (2)
- 设计模式 (2)
- mq (2)
- jvm调优 (8)
- 并发编程 (2)
- 搜索引擎 (1)
- UML (2)
最新评论
-
天使建站:
jquery获取网页里多选框checkbox选中项的值的方法及 ...
JS jQuery分别获取选中的复选框值 -
abao1:
发现一个小问题 sortAndSave方法中的for循环 第二 ...
完整java实现外部排序 -
西巴拉古呀那:
Kafka分布式消息系统实战(与JavaScalaHadoop ...
消息系统kafka介绍 -
kafodaote:
Kafka分布式消息系统实战(与JavaScalaHadoop ...
消息系统kafka介绍 -
成大大的:
Kafka分布式消息系统实 ...
消息系统kafka介绍
Extjs可以说是目前最优秀的js开发库了。除了那个蹩脚的GPLV3授权。
但是使用中遇到的第一个问题就是,Extjs那庞大的个头。想办法压缩ExtJS的大小成了首先要解决的问题。
谈谈我的解决方法,欢迎拍砖。突然发现前面那个广告贴被锁了
1、压缩混淆
除了ExtJS的大个子以外,引用的很多其他的js库,项目中自己的js文件等等。采用OPOA组件式开发最后一定会增大js文件的总量。所以项目后期要
对这些文件进行压缩合并。现在流行的js压缩工具有很多,如packer,jsMin,Esc,JSA,yui-compressor等等。经过实际使用
我选的是yui-compressor.
yui-compressor项目地址:http://developer.yahoo.com/yui/compressor/
下载后得到一个java开发的jar包。使用方法基于命令行:
java -jar yuicompressor-x.y.z.jar [options] [input file]
开发中的js文件不可能一个个的手动压缩,这里用到了ANT。在项目构建中可以替你完成以上任务。
1. <property name="yuicompressor" value="${tools}/yuicompressor-2.3.6.jar" /> 2. <apply executable="java" parallel="false" verbose="true" dest="${dist}/WebRoot"> 3. <fileset dir="${dist}/WebRoot"> 4. <include name="modules/*.js" /> 5. <include name="js/*.js" /> 6. </fileset> 7. <arg line="-jar" /> 8. <arg path="${yuicompressor}" /> 9. <arg line="--type js --charset UTF-8 -o" /> 10. <targetfile /> 11. <mapper type="glob" from="*.js" to="*-m.js" /> 12. </apply> 13. <concat destfile="${dist}/WebRoot/js/base.js" encoding="UTF-8" > 14. <fileset dir="${dist}/WebRoot/js"> 15. <include name="*-m.js" /> 16. </fileset> 17. </concat> 18. <concat destfile="${dist}/WebRoot/modules/modules.js" encoding="UTF-8" > 19. <fileset dir="${dist}/WebRoot/modules"> 20. <include name="*-m.js" /> 21. </fileset> 22. </concat> 23. <delete> 24. <fileset dir="${dist}/WebRoot"> 25. <include name="js/*.js"/> 26. <include name="modules/*.js"/> 27. <exclude name="modules/modules.js" /> 28. <exclude name="js/base.js" /> 29. </fileset> 30. </delete>
2、gzip压缩。
坛子里讨论的gzip压缩有2种,
一是有的容器(服务器)提供的功能,但这个局限于特定容器。比如apache+tomcat或者resin-pro版。
二是部署前手动gzip压缩,配合servlet过滤器使用,这个能实现gzip功能,但是降低了灵活性。
我自己用的是自己的实现,采用gzip servlet filter实现。下面是我的代码参考网上内容.
1. package sh.blog.util.web.filter; 2. 3. import java.io.IOException; 4. 5. import java.util.zip.GZIPOutputStream; 6. 7. import javax.servlet.ServletOutputStream; 8. 9. public class CompressedStream extends ServletOutputStream { 10. 11. private ServletOutputStream out; 12. private GZIPOutputStream gzip; 13. 14. /** 15. * 指定压缩缓冲流 16. * @param 输出流到压缩 17. * @throws IOException if an error occurs with the {@link GZIPOutputStream}. 18. */ 19. public CompressedStream(ServletOutputStream out) throws IOException { 20. this.out = out; 21. reset(); 22. } 23. 24. /** @see ServletOutputStream * */ 25. public void close() throws IOException { 26. gzip.close(); 27. } 28. 29. /** @see ServletOutputStream * */ 30. public void flush() throws IOException { 31. gzip.flush(); 32. } 33. 34. /** @see ServletOutputStream * */ 35. public void write(byte[] b) throws IOException { 36. write(b, 0, b.length); 37. } 38. 39. /** @see ServletOutputStream * */ 40. public void write(byte[] b, int off, int len) throws IOException { 41. gzip.write(b, off, len); 42. } 43. 44. /** @see ServletOutputStream * */ 45. public void write(int b) throws IOException { 46. gzip.write(b); 47. } 48. 49. /** 50. * Resets the stream. 51. * 52. * @throws IOException if an I/O error occurs. 53. */ 54. public void reset() throws IOException { 55. gzip = new GZIPOutputStream(out); 56. } 57. }
1. package sh.blog.util.web.filter; 2. 3. import java.io.IOException; 4. import java.io.PrintWriter; 5. 6. import javax.servlet.ServletOutputStream; 7. 8. import javax.servlet.http.HttpServletResponse; 9. import javax.servlet.http.HttpServletResponseWrapper; 10. 11. public class CompressionResponse extends HttpServletResponseWrapper { 12. 13. protected HttpServletResponse response; 14. private ServletOutputStream out; 15. private CompressedStream compressedOut; 16. private PrintWriter writer; 17. protected int contentLength; 18. 19. /** 20. * 创建一个新的被压缩响应给HTTP 21. * 22. * @param response the HTTP response to wrap. 23. * @throws IOException if an I/O error occurs. 24. */ 25. public CompressionResponse(HttpServletResponse response) throws IOException { 26. super(response); 27. this.response = response; 28. compressedOut = new CompressedStream(response.getOutputStream()); 29. } 30. 31. /** 32. * Ignore attempts to set the content length since the actual content length 33. * will be determined by the GZIP compression. 34. * 35. * @param len the content length 36. */ 37. public void setContentLength(int len) { 38. contentLength = len; 39. } 40. 41. /** @see HttpServletResponse * */ 42. public ServletOutputStream getOutputStream() throws IOException { 43. if (null == out) { 44. if (null != writer) { 45. throw new IllegalStateException("getWriter() has already been called on this response."); 46. } 47. out = compressedOut; 48. } 49. return out; 50. } 51. 52. /** @see HttpServletResponse * */ 53. public PrintWriter getWriter() throws IOException { 54. if (null == writer) { 55. if (null != out) { 56. throw new IllegalStateException("getOutputStream() has already been called on this response."); 57. } 58. writer = new PrintWriter(compressedOut); 59. } 60. return writer; 61. } 62. 63. /** @see HttpServletResponse * */ 64. public void flushBuffer() { 65. try { 66. if (writer != null) { 67. writer.flush(); 68. } else if (out != null) { 69. out.flush(); 70. } 71. } catch (IOException e) { 72. e.printStackTrace(); 73. } 74. } 75. 76. /** @see HttpServletResponse * */ 77. public void reset() { 78. super.reset(); 79. try { 80. compressedOut.reset(); 81. } catch (IOException e) { 82. throw new RuntimeException(e); 83. } 84. } 85. 86. /** @see HttpServletResponse * */ 87. public void resetBuffer() { 88. super.resetBuffer(); 89. try { 90. compressedOut.reset(); 91. } catch (IOException e) { 92. throw new RuntimeException(e); 93. } 94. } 95. 96. /** 97. * Finishes writing the compressed data to the output stream. Note: this 98. * closes the underlying output stream. 99. * 100. * @throws IOException if an I/O error occurs. 101. */ 102. public void close() throws IOException { 103. compressedOut.close(); 104. } 105. }
1. /** 2. * 如果浏览器支持解压缩,则压缩该代码 3. * @throws IOException ServletException if an error occurs with the {@link GZIPOutputStream}. 4. * 如果需要开启该过滤器,在web.xml中加入此代码 5. <filter> 6. <filter-name>gzip</filter-name> 7. <filter-class>com.strongit.finance.gzip</filter-class> 8. </filter> 9. <filter-mapping> 10. <filter-name>gzip</filter-name> 11. <url-pattern>*.jsp</url-pattern> 12. </filter-mapping> 13. */ 14. 15. package sh.blog.util.web.filter; 16. 17. import java.io.IOException; 18. 19. import java.util.Enumeration; 20. 21. import javax.servlet.Filter; 22. import javax.servlet.FilterChain; 23. import javax.servlet.FilterConfig; 24. import javax.servlet.ServletException; 25. import javax.servlet.ServletRequest; 26. import javax.servlet.ServletResponse; 27. 28. import javax.servlet.http.HttpServletRequest; 29. import javax.servlet.http.HttpServletResponse; 30. 31. import org.apache.commons.logging.Log; 32. import org.apache.commons.logging.LogFactory; 33. 34. 35. public class CompressionFilter implements Filter { 36. 37. protected Log log = LogFactory.getFactory().getInstance(this.getClass().getName()); 38. 39. @SuppressWarnings("unchecked") 40. public void doFilter(ServletRequest request, ServletResponse response, 41. FilterChain chain) throws IOException, ServletException { 42. 43. boolean compress = false; 44. if (request instanceof HttpServletRequest){ 45. HttpServletRequest httpRequest = (HttpServletRequest) request; 46. Enumeration headers = httpRequest.getHeaders("Accept-Encoding"); 47. while (headers.hasMoreElements()){ 48. String value = (String) headers.nextElement(); 49. if (value.indexOf("gzip") != -1){ 50. compress = true; 51. } 52. } 53. } 54. 55. if (compress){//如果浏览器支持则压缩 56. HttpServletResponse httpResponse = (HttpServletResponse) response; 57. httpResponse.addHeader("Content-Encoding", "gzip"); 58. CompressionResponse compressionResponse= new CompressionResponse(httpResponse); 59. chain.doFilter(request, compressionResponse); 60. compressionResponse.close(); 61. } 62. else{//如果浏览器不支持则不压缩 63. chain.doFilter(request, response); 64. } 65. } 66. 67. 68. public void init(FilterConfig config) throws ServletException { 69. 70. } 71. 72. public void destroy(){ 73. 74. } 75. }
实际使用的效果以http://demo.slivercrm.cn:8084
为例
发表评论
-
简单瀑布流布局实现
2012-12-17 18:17 2190因为工作上的需要,skidu最近这几周都在折腾瀑布流 ... -
花瓣网方砖布局 图片内容无限加载
2012-12-08 17:47 1295jquery特效制作目前用户体验设计比较受欢迎的pinte ... -
仿花瓣网浮动在顶层的导航菜单代码
2012-12-08 17:14 1177<!DOCTYPE html PUBLIC " ... -
ext4.1 spket 1.6.23 Myeclipse10.5 开发环境 extjs代码提示
2012-10-31 15:17 1879用于在spket中进行提醒时的筛选。以下是具体的操作 ... -
jsonObject 转化 bean list map array
2010-12-12 14:47 3041package com.json; ... -
jsonObject 转化使用
2010-12-12 14:44 4464JSON 即 JavaScript Object Natati ... -
dhtmlxtree 节点超链功能
2010-08-04 12:53 2651关于dhtmlxtree 节点实现超链接功 ... -
MooTools资源大集合1
2009-08-14 16:46 2030MooTools资源大集合1 MooTool是一 ... -
八款Js框架介绍及比较,Dojo 、Scriptaculous 、Prototype 、yui-ext 、Jquery 、Mochikit、mootools 、
2009-08-14 16:34 4751八款Js框架介绍及比较,D ...
相关推荐
Javascript开发之js压缩篇.pdf
Javascript开发之js压缩篇.docx
聚问网络开发的js压缩专家(JsPacker)v1.0 是同功能的桌面程序,并且是绿色软件,使用起来更加方便。 软件名称:js压缩专家 v1.0 (英文名称:JsPacker) 软件简介:可以高效的压缩Javascript脚本文件缩短网页显示...
聚问网络开发的js压缩专家(JsPacker)v1.0 是同功能的桌面程序,并且是绿色软件,使用起来更加方便。 软件名称:js压缩专家 v1.0 (英文名称:JsPacker) 软件简介:可以高效的压缩Javascript脚本文件缩短网页显示...
如果再对test.js文件执行一次压缩,会生成test-min.js文件。css文件的压缩方式和js一样 注意事项: 1. 需要安装JDK >= 1.4, 并设置环境变量 JAVA_HOME 2. css和js文件编码必须是GB2312, GBK或GB18030. 如果要...
java开发中压缩js,css文件 给定js或css文件 直接输出压缩后的内容或文件.有注释,易操作.
JavaScript解析器,用于ES6 的压缩器/优化器和美化工具包
前端开发js静态资源压缩文件
HDS JSObfuscator是HDS通过对当前市面上的同类工具分析和总结后而开发的Javascript压缩混淆加密器。与同类工具相比,它是当前市面上功能较强,使用约束较小的工具之一。它兼顾了压缩、混淆和加密三大功能,用户可以...
Compressor.js一个JavaScript图像压缩器。 使用浏览器的原生canvas.toBlob API来执行压缩工作,这意味着它是有损压缩。 一般使用此方法在客户端上传图像文件之前对其进行预压缩。
JavaScript凌厉开发——Ext详解与实践 源码 源代码 part3 因为源代码比较大,压缩后76M左右 所以分为四个包上传
聚问网络开发的js压缩专家(JsPacker)v1.0 是同功能的桌面程序,并且是绿色软件,使用起来更加方便。 软件名称:js压缩专家 v1.0 (英文名称:JsPacker) 软件简介:可以高效的压缩Javascript脚本文件缩短网页显示...
基于java的开发源码-JS和CSS压缩混淆 JsCompressor.zip 基于java的开发源码-JS和CSS压缩混淆 JsCompressor.zip 基于java的开发源码-JS和CSS压缩混淆 JsCompressor.zip 基于java的开发源码-JS和CSS压缩混淆 ...
聚问网络开发的js压缩专家(JsPacker)v1.0 是同功能的桌面程序,并且是绿色软件,使用起来更加方便。 软件名称:js压缩专家 v1.0 (英文名称:JsPacker) 软件简介:可以高效的压缩Javascript脚本文件缩短网页显示...
开发Ajax除了自己要写js代码外,同样也免不了要使用其它第三方js库,是否该为JavaScript减肥? 当你提高了用户体验,做出了很绚丽的效果而欣喜的时候,是否想过优化一下JS的效率,比如微软的live,其中的js做了压缩...
该软件是一款由java语言开发的专门用来压缩js的工具,压缩效果极佳,下载后里面包含原件和解压后的文件,以及个人搜索到的相关的使用指南网址。
通过由浅入深的讲解,你将学会如何构建具有丰富交互以及优雅体验的JavaScript应用,书中同样提供了大量的示例代码,可以帮助你更深入的理解很多重要的概念。 揭开MVC的神秘面纱,教你如何设计合理的架构以及处理...
自己收集的javascript效果集(超多)适合网站开发人员用,以前发的有问题解压缩不了,现在更正。
HDS JSObfuscator是HDS通过对当前市面上的同类工具分析和总结后而开发的Javascript压缩混淆加密器。与同类工具相比,它是当前市面上功能较强,使用约束较小的工具之一。它兼顾了压缩、混淆和加密三大功能,用户可以...
图灵程序设计丛书 Web开发系列 精通JavaScript(Pro JavaScript Techniques) [美] John Resig 著 陈贤安 江疆 译 人民邮电出版社 本书分六个部分共十四章 大小为71.6M,因上传资源限制为20M,所以只能分卷压缩,共4...