日期:2014-05-17  浏览次数:20643 次

转—— JS、CSS的合并、压缩、缓存管理

http://www.blogjava.net/BearRui/archive/2010/05/04/js_css_merge_compress_cache.html

存在的问题: ? ?

?

?? ? 合并、压缩文件主要有2方面的问题:
?? ? ? 1. 每次发布的时候需要运行一下自己写的bat文件或者其他程序把文件按照自己的配置合并和压缩。
?
?? ? ? 2. 因生产环境和开发环境需要加载的文件不一样,生产环境为了需要加载合并、压缩后的文件,而开发环境为了修改、调试方便,需要加载非合并、压缩的文件,所以我们常常需要在JSP中类似与下面的判断代码:
<c:if test="${env=='prod'}">
?? <script type="text/javascript" src="/js/all.js"></script>
</c:if>
<c:if test="${env=='dev'}">
?? <script type="text/javascript" src="/js/1.js"></script>
?? <script type="text/javascript" src="/js/2.js"></script>
???<script type="text/javascript" src="/js/3.js"></script>
</c:if>

?? ??

?? ?缓存问题:在现在JS满天飞的时代,大家都知道缓存能带来的巨大好处,但缓存确实非常麻烦的一个问题,相信很多人曾经历过下面的情况:为了让程序更快,在服务器上为JS加上缓冲5天的代码,但产品更新后第二天就接到电话说系统出错,详细了解后就发现是缓存引起的,让用户删除缓存后就会OK。原因很简单,就是你JS已经修改了,但用户还在使用缓存中的老JS。在经历几次这种情况,被领导数落了几次后。没办法只能把JS的缓冲去掉,或者改成8个小时。可这样就完全失去了缓存的优势了,哪我们到底需要解决哪些问题才能让我们使用缓冲顺心如意了?
?? ?1. 如何在修改了某个JS后,自动把所有引用该JS页面的代码中加上1个版本号?

?

?? ?2. 该如何生成版本号,根据什么来产生这个版本号。

?

?? ?可能有人为了解决上面的缓存问题,写了个JSP标签,通过标签读取JS、css文件的修改时间来作为版本号,从而来解决上面2个问题。但这种方法有下面几个缺点:
?? ?1. 每次请求都要通过标签读取读取文件的修改时间,速度慢。当然你可以把文件的修改时间放到缓存中,这样也会加到了内存使用量。

?

?? ?2. 在HTML静态页面中用不了

?

?? ?3. 如果你们公司是如下的部署发布方式(我们公司就是这样),则会失效。每次发布,不是直接覆盖之前的WEB目录,运维的为的发布方便,要求每次发布直接给他们1个war包,他们会把之前WEB目录整个删除,然后上传现在的war包,这样就导致程序运行后,所有文件的最后修改时间都是解压war的时间。



分享自己项目中的处理方案:

?? ? ?