【发布时间】:2011-06-08 09:59:40
【问题描述】:
我想知道是否有任何关于使用过滤器成本的硬数据? 例如,在 servlet 上使用继承来共享行为还是使用过滤器?
谢谢,
安东尼
【问题讨论】:
标签: java performance servlets servlet-filters
我想知道是否有任何关于使用过滤器成本的硬数据? 例如,在 servlet 上使用继承来共享行为还是使用过滤器?
谢谢,
安东尼
【问题讨论】:
标签: java performance servlets servlet-filters
如果有人可以发布硬数据,我会感到惊讶。即使他们这样做了,也很可能与您无关,因为这些数字将取决于过滤器中正在执行的操作。它也可能属于过早的优化类别——除非你真的把事情搞砸了,否则它可能并不重要。
我假设“遗产”的意思是“继承”,并说过滤器是一个更好的解决方案。您可以选择在配置中关闭和打开它们。
过滤器是 HTTP 请求的装饰器或方面。既然这些都是备受推崇的、久经考验的模式,为什么它们对 servlet 的使用没有用处和安全?
我会说你的担心被夸大了。
话虽如此,我不建议构建如此长而复杂的过滤器链,以至于性能确实会成为问题。如果您进行压缩、日志记录、性能指标等操作,最终可能会遇到问题,并最终得到一打过滤器的链。
【讨论】:
没有什么可衡量的,与您在过滤器中所做的实际工作相比完全相形见绌。甚至每次都不会创建一个新的 Filter 实例,就像它们共享的 Servlet 一样。
相对于继承的最大优势是能够在运行时配置和组合(一个父类被编译进去,并且只能有一个)。
需要考虑的一点是,过滤器只能包装请求:它可以在之前和之后(或相反)添加代码。并且在 Servlet 运行之后,响应可能已经被提交。它不能将代码注入到请求处理的中间,而正确定义的回调到父类(或 Servlet 端的一些其他技术)可以做到这一点。这意味着过滤器可能不适合某些任务。
【讨论】: