влияние javax.servlet.Filter на производительность? - PullRequest
4 голосов
/ 13 января 2011

Хотелось бы узнать, существуют ли какие-либо достоверные данные о стоимости использования фильтра? Например, между использованием наследия в сервлете для обмена поведением или использованием фильтра?

Спасибо

Antoine

Ответы [ 2 ]

13 голосов
/ 13 января 2011

Я буду удивлен, если кто-то сможет опубликовать достоверные данные. И даже если они это сделают, это, скорее всего, не будет иметь отношение к вам, потому что цифры будут зависеть от того, что делается в фильтре. Это также, вероятно, попадет в категорию преждевременной оптимизации - вряд ли это будет иметь значение, если вы действительно ничего не испортите.

Я буду считать, что «наследие» означает «наследование», и скажу, что фильтры - гораздо лучшее решение. У вас есть возможность выключить и включить их в конфигурации.

Фильтры являются декораторами или аспектами для HTTP-запросов. Так как это уважаемые, проверенные временем шаблоны, почему они не будут полезны и безопасны для использования сервлетами?

Я бы сказал, что ваши проблемы преувеличены.

С учетом вышесказанного я бы не рекомендовал создавать такую ​​длинную и сложную цепочку фильтров, чтобы производительность становилась проблемой. Вы можете столкнуться с проблемой, если выполните сжатие, ведение журнала, показатели производительности и т. Д. И получите цепочку из дюжины фильтров.

3 голосов
/ 13 января 2011

Ничего не измеримое, полностью затмеваемое фактической работой, которую вы выполняете в Фильтре.Даже новый экземпляр фильтра не создается каждый раз, как и сервлеты, к которым они совместно используются.

Большим преимуществом по сравнению с наследованием является возможность настройки и компоновки во время выполнения (родительский класс компилируется вможет быть только один).

Следует учитывать, что Фильтр может только переносить запрос: он может добавлять код до и после (или вместо).А после запуска сервлета ответ может быть уже принят.Он не может внедрить код в середину обработки запроса, что может сделать правильно определенный обратный вызов в родительский класс (или какой-либо другой метод на стороне сервлетов).Это означает, что фильтр может не подходить для определенных задач.

...