使用Cache-Control和gzip提升tomcat应用性能(整理)

这个其实应该是常识,只不过以前做的J2EE应用大部分是内网里跑的东西,所以性能上没什么问题。这次APIS由于有在外面用的可能,加上使用了一些比较大的javascript框架(Ext),所以性能问题瞬间窜了上来。
以前做的J2EE应用没有使用上达500K的框架,最多就是几十K的Prototype,所以没什么问题。一个页面一般也就几十K最多了。但这次还在开发中的APIS,由于还在用debug版本的库,所以单单Ext就膨胀到了一个多M,加上不知道是Struts还是Tomcat默认写入Response的cache-control: no cache,在远程用起来就很慢,一般一个页面需要十多秒种甚至更久,实在无法忍受。前几天集中解决了问题。
首先是Cache-Control的问题,Google了好一阵,没有什么直接配置的方法,只好自己抄了一个一个Filter,通过和web.xml里配置的配合勉强凑合着用。一般就是对*.do实施no-cache政策,其他需要缓存的img, js文件,统统加上长达两周的缓存期限。ETag实在不会用,就先用这个缓存策略吧。
Filter的代码:

  1. public class ResponseHeaderFilter implements Filter {
  2. FilterConfig fc;
  3. public void doFilter(ServletRequest req, ServletResponse res,
  4. FilterChain chain) throws IOException, ServletException {
  5. HttpServletResponse response = (HttpServletResponse) res;
  6. // set the provided HTTP response parameters
  7. for (Enumeration e = fc.getInitParameterNames(); e.hasMoreElements();) {
  8. String headerName = (String) e.nextElement();
  9. response.addHeader(headerName, fc.getInitParameter(headerName));
  10. }
  11. // pass the request/response on
  12. chain.doFilter(req, response);
  13. }
  14. public void init(FilterConfig filterConfig) {
  15. this.fc = filterConfig;
  16. }
  17. public void destroy() {
  18. this.fc = null;
  19. }
  20. }

web.xml里的巧妙配置:

  1. <filter>
  2. <filter-name>NoCache</filter-name>
  3. <filter-class>apis.server.common.util.ResponseHeaderFilter</filter-class>
  4. <init-param>
  5. <param-name>Cache-Control</param-name>
  6. <param-value>no-cache, must-revalidate</param-value>
  7. </init-param>
  8. </filter>
  9. <filter>
  10. <filter-name>CacheForWeek</filter-name>
  11. <filter-class>apis.server.common.util.ResponseHeaderFilter</filter-class>
  12. <init-param>
  13. <param-name>Cache-Control</param-name>
  14. <param-value>max-age=604800, public</param-value>
  15. </init-param>
  16. </filter>
  17. <filter-mapping>
  18. <filter-name>NoCache</filter-name>
  19. <url-pattern>*.do</url-pattern>
  20. </filter-mapping>
  21. <filter-mapping>
  22. <filter-name>CacheForWeek</filter-name>
  23. <url-pattern>/images/*</url-pattern>
  24. </filter-mapping>
  25. <filter-mapping>
  26. <filter-name>CacheForWeek</filter-name>
  27. <url-pattern>/img/*</url-pattern>
  28. </filter-mapping>
  29. <filter-mapping>
  30. <filter-name>CacheForWeek</filter-name>
  31. <url-pattern>/icons/*</url-pattern>
  32. </filter-mapping>
  33. <filter-mapping>
  34. <filter-name>CacheForWeek</filter-name>
  35. <url-pattern>/ext/*</url-pattern>
  36. </filter-mapping>
  37. <filter-mapping>
  38. <filter-name>CacheForWeek</filter-name>
  39. <url-pattern>*.js</url-pattern>
  40. </filter-mapping>
  41. <filter-mapping>
  42. <filter-name>CacheForWeek</filter-name>
  43. <url-pattern>*.css</url-pattern>
  44. </filter-mapping>

(插入一段:在探测这些性能问题的时候,我使用的是一个Firebug的插件,也就是Firefox插件的插件-YSlow,好像是Yahoo的,结合Firebug里XHR的Net这块做Profiling,效果很不错,很容易就知道瓶颈)
还有一个gzip的办法,就是在服务器压缩内容,再传给浏览器。现在主流的浏览器都支持gzip压缩,而且这些html和js文本压缩起来很厉害,基本上可以有40%的压缩率。办法在servel.xml的注释里也有写,就是在Connector元素里加上
compression=”on”
compressionMinSize=”2048″
noCompressionUserAgents=”gozilla,traviata”
compressableMimeType=”text/html,text/xml,text/javascript,text/css,text/plain”
以上的内容大部分都是Google得来,我自己做了一下整理

PSP使用小记

    回家前两天入手了PSP一台,包括全套装备1610。不凑巧赶上了PSP涨价(新版主机无法破解+奥运),隔了一天就多花了50大洋,不过LP还是帮我刀了15的运费(淘宝南京实体店,感觉还行,至少电池是正品)。

    平时没怎么观察,回家那天发现PSP的普及。先是在候机厅里发现对面一MM正用PSP打游戏,上了飞机以后,邻座一男人也掏出PSP和他老婆看美剧。之所以这些娱乐设备中挑中了PSP也是因为它的普及,所以第三方应用多,除了打游戏,还可以干很多事情。26号晚上在标标家借宿时,得知原来很多人和我一样,买PSP不是为了打游戏,而是为了听音乐、看电影和看电子书方便,当一个超豪华版的MP4用。屏幕大,音质好,软件多,还能玩不少游戏,的确是随身电子设备中的最佳选择。

    4G的闪存听上去不小,不过现在游戏、电影都身形非凡,其实很快就用完了,比如最火的战神,居然要1.1G。里面的游戏最吸引我的反而是NES模拟器,打打魂斗罗、赤色要塞这些童年的游戏,弥补弥补小时候在家无法打游戏的缺憾(俺家里虽然有一台可以玩FC的学习机,不过只有两张卡带,一个是坦克,一个是N多游戏的合集,玩得煞是不爽)。前天装了无双大蛇,玩得有点晕~~

   电子书的阅读倒是很不错,bookr+eReader,对付PDF和TXT,手里的大量电子书就可以阅读了。这几天花在PSP上最多的时间不是打游戏,不是看电影,而是看武侠小说。到现在俺也没有看过射雕英雄传和倚天屠龙记,这两天趁放假看看。eReader黑底白字,看得很清楚。bookr看的PDF要看质量了,有些对比度太低的PDF,看起来也是比较费劲的。不过大部分的还是可以看得比较清楚的,换了黑底白字,不仅省电,看得也舒服点。

终于可以喘口气了

    最近两个星期,事情比较多。虽然是小学期,又名暑期学校,但各种事务集中爆发,搞得焦头烂额。工头那里的培训项目开始了,给三个小孩(其实最大的也是86年的了)培训Hibernate。除去上个月准备的几百页PPT,每次上课前还是要好好备课的。在参看了一些机构的培训视频之后,我发现之前PPT的内容太多太深了,缺少实训的东西,所以除了把内容过一遍以外,还要斟酌内容的取舍;最耗时间和精力的还是视频的制作,用麦克风和屏幕录像软件把课程预录下来。不过预录的内容都是前一次讲过的内容。现在一共录过三次,加起来大概也就一个多小时,感觉还行,就是讲久了以后口干舌燥得厉害。

  月初拼凑完了Software Evolution的论文,然后专心上Data Quality。本来以为来的是个二流教授,后来Google了一下周晓方,还是挺牛的,毕竟也是一个学院的老大了。每天早上7点半起床上课,晚上可能还要做作业。周四的Presentation,小组里想套辞的ZBJ上去讲,很成功,算是没白费我把VeryFTP给贡献出来。

  老板的项目最近催得紧,还要申请什么著作权,让我们准备文档。我不懂软件的著作权有什么好申请的,几乎就是天赋的权利,自证的。

  不过最痛苦的还属这个星期感冒了。夏天感冒是很不爽很不爽的。现在好多了,还好。

  倒完了苦水,就是好消息了。投出去的水文通过了评审,准备交版面费咯!!和萝卜同一个时候投的,同一家期刊(我们可没有事先串通),说不定很可能出现在同一期杂志上,嘿嘿。嗯,下学期奖学金有希望咯~~

  最后预告一把,27号中午的飞机回厦门~~争取回来陪LP过生日~~

有关投资资金配置的两条

    第一,如果你打算20年后养老或者子女上大学,投资股票基金;如果打算3-5年内结婚,投资债券基金;如果半年一年内就要用钱,还是货币基金吧

    第二,再平衡原则。如果你打算你的股票基金和债券基金的组合为7:3,牛市比例涨到了8:2,就卖掉股票基金买债券基金,恢复到7:3;熊市反之亦然

我喜欢的球队

    这篇博客应该是在两年前的现在——06世界杯的时候就想写了。那时候刚在IBM实习,写的Space频率还可以,看着这么多国家队,想想9年的球迷史,也该有一些故事了。这两年来,关注的足球甚至相比以前高中一周只能看一次德甲的时候还低。欧洲杯之前,完整看过的比赛几乎就是中国队的比赛了,甚至寒假在家也懒得看意甲比赛,平时上网看看体育新闻,基本堕落为伪球迷。知道最近,天天一场欧洲杯,才渐渐找回球迷的感觉,却发现场上的人虽然名字有些耳熟,但是面貌却有些生疏,明显看多了新闻看少了比赛(比如梅策尔德猛然发现是个胡子拉扎的大叔,和我想象的完全不一样;范德法特、埃弗拉、范佩西就根本没见过长什么样)。

    接触足球(不是踢足球)在小学,90年代初,央视偶尔有意甲的转播和新闻。比赛是9点的,那时9点多基本也睡觉了,都没怎么看,看大概知道了AC米兰。看看积分榜,AC米兰一般都是第一,自然和很多国内球迷一样皈依了米兰,同时看着国际米兰在中游徘徊就有一种莫名的幸灾乐祸。后来渐渐又知道了德甲、西甲、法甲和英超,分别支持拜仁、圣日耳曼、巴萨和曼联,也没别的原因,这些是我知道的第一支这些个联赛的球队(发现只要是欧宝就支持)。

    上中学以后开始踢球,看球也多了,就是每周六的德甲。那会儿上课无聊,有时就在默写18支德甲和18支意甲球队。英超和西甲估计各能默写出10支。德甲有不好的习惯,冬歇期特长,搞得寒假基本没啥球看,还有最后几轮关键的大战都是0点开球,家里管得严没法看,只好第二天周日看体育新闻,但周日都有拳击比赛,经常挤占中午的体育新闻,有时只好周日晚上到学校以后看滨北车站育兴门口的厦门日报阅报栏,要是到得晚就看得费劲,天黑光线不够。

    德甲一直支持拜仁,自然是沙尔克04和多特蒙德的死敌。这些年不来梅和斯图加特上来了,倒也感觉还行。法兰克福自然有感情,可那会儿老降级,打了两年就沉下去没影了,这些年才又爬上来,战绩也只是中游,严重不符合城市的地位啊,哈哈。

    初中的班队买了帕尔马的球衣,这队一直中不溜秋,当年意甲战国七雄,两米尤文罗马拉齐奥佛罗伦萨,就它垫底。这些球队除了米兰,尤文因为和米兰走得近会比较关注。这些年最让我开心的米兰新闻不是两夺冠军杯,而是98-99赛季,从落后拉齐奥7分,最后10轮10连胜最终大逆转夺冠那一回。扎切罗尼也就那次牛B了一把,后来很快就下台了。这些年虽然米兰不是在巅峰时期,但欧冠成绩总是令人侧目。上次这么牛的欧冠成绩还要算90年代末那会儿的皇马吧。不过最近还是难挽颓势,搞得还要去打联盟杯。卡卡也放话了,不能连续两年都打联盟杯吧。米兰缺乏重建的勇气,不敢抛弃一些原来的班底。而这些班底的高工资让米兰难以购买新的球员。很好的例子就是加图索,本来去年拜仁要的,结果没卖。这些老球员,基本该拿的冠军全都拿过了,像02年世界杯时的法国,缺少新鲜的气氛。

    前面的大部分文字,差不多在10天前写的。昨天晚上起来看了决赛,德国的确输得心服口服。04年06年之后,技术流终于又占了上风,像黄健翔每次转播时总挂在嘴边的那句话,“高技术就是第一生产力!”。

清理出一张书桌

    前几天突发奇想,加上软院又要拆掉一间自习室,决定把宿舍的一张空桌子清理出来,当作书桌。

    像是有人住的地方吧?呵呵,旁边是我的坑,比较不像有人的位子,倒像杂物堆了。

P1020219

  可惜好日子没几天了,要么搬鼓楼(更好的日子),留守浦口肯定是4人间了。唉。。。南大。。。