【发布时间】:2013-03-30 20:14:55
【问题描述】:
我刚刚完成了一个过滤器,以 gzip 压缩我的回复,结果令人惊叹。我最大的 JSP 页面已从 80K 变为 5.7K。但是,过滤器我已经编写了 gzip 来自服务器的所有响应,包括图像。但是,Yahoo 表示这是一种非常糟糕的做法。
Image and PDF files should not be gzipped because they are already compressed.
Trying to gzip them not only wastes CPU but can potentially increase file sizes.
这是我编写的过滤器的 web.xml 足迹
<!-- THIS FILTER WILL TAKE MY OUTPUT AND GZIP IT TO LESSEN MY BANDWIDTH FOOTPRINT -->
<filter>
<filter-name>GZip</filter-name>
<filter-class>org.instride.gzip.GZIPFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>GZip</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
因此,您可以看到所有响应都被压缩了。但是,我只想 gzip css js 和 jsp 页面。所以你会认为我可以添加这些人
<url-pattern>*.jsp</url-pattern>
<url-pattern>*.css</url-pattern>
<url-pattern>*.js</url-pattern>
但这会给我一个问题 b/c 我所有的 jsp 页面都隐藏了扩展 b/c 它们是 servlet,而且我还使用tuckey's URL 重写。例如,我想要压缩的页面的 URL 如下所示。
https://example.com/user/1/admin
因此 servlet (user) 在 web.xml 文件中没有可精确定位的扩展名,并且 servlet 后跟正斜杠参数。所以我正在考虑两种可能的解决方案。
- 我不包含我想要 gzip 压缩的文件类型,而是包含我想要跳过的文件类型,例如 jpeg 或 gif。
- 我指定仅基于 gzip 文件的内容类型,例如
text/html;charset=UTF-8。
任何关于我如何做这些事情的指导,或者更好地解决我的问题的方法将不胜感激。感谢大家阅读本文。
【问题讨论】:
-
文件 sie 增加并不是什么大问题(23 字节 + ~0.03%)。花费的 CPU 时间可能很明显。无缘无故在另一端解压是浪费时间。
-
如何将过滤器映射到所有请求,但将其扩展为仅压缩某些内容类型?
-
谢谢罗杰,我刚刚实现了一个解决方案,可以做这样的事情。
标签: java jsp optimization gzip web.xml