5

Mam dwa pytania. Pierwszym z nich jest to, że Filtry dodają wiele narzutów do żądania. Mamy filtr i jest uruchamiany na wzorcu adresu URL/*. Oznacza to, że działa również na wszystkich żądaniach obrazu. Myślę, że to nie jest dobre dla wydajności, ale moi współpracownicy uważają, że nie ma znaczenia, czy filtr działa 5 lub 6 razy na żądanie, ponieważ filtr ma tylko kilka instrukcji if.Filtry Java Performance Question

Czy istnieje sposób, aby filtr był uruchamiany raz na żądanie, ignorując żądanie obrazu.

Dzięki Doug

+0

Sprawdza, czy hasło użytkownika wygasło. Ta informacja pochodzi z sesji – Doug

+0

Filtry z definicji są uruchamiane tylko raz lub dwa razy na żądanie. Potencjalnie przed serwerem i po nim siedzą przed nim. Obrazy są wyświetlane w odpowiedzi na oddzielne żądanie od klienta. –

+0

@Ian: ich "" można skonfigurować tak, aby działał na każdym "ŻĄDANIU" i/lub "DO PRZODU" i/lub "ZAWIERA". Domyślnie jest to TYCZENIE. – BalusC

Odpowiedz

0

Prawie nigdy nie jest użyteczne spekulowanie na temat wpływu kodu na wydajność, bez uprzedniego profilowania go. O ile kod proponowany w filtrach nie wykonuje niektórych operacji, o których wiesz, że są wolne, najpierw zmierz przed optymalizacją.

Pamiętaj, chociaż kiedy piszesz aplet może się wydawać, że jedyną rzeczą, która się dzieje, jest kod w swoim doGet() lub doPost() metod wiele innych rzeczy zdarzyć przed kodem servlet/filtra zostanie wywołany. Kontener serwletu przetwarza żądanie HTTP i pakuje je w obiekty Java, a następnie przetwarza je w inny sposób, zanim przejdzie do twojego kodu.

Jeśli twoje filtry serwletów to tylko kilka instrukcji if działających na danych, które są tanie w zakupie (takich jak samo żądanie), jest mało prawdopodobne, że będzie to dla ciebie problem.

4

Pomiar to wiedza. Jeśli dobrze napisane, powiedziałbym, to jest znikome. Ale jeśli jest to na przykład pobieranie sesji bez względu na to, czy została utworzona (a zatem istnieje ryzyko, że zostanie ona niepotrzebnie utworzona), może to mieć zauważalny wpływ na wydajność i/lub zużycie pamięci, ponieważ tworzenie sesji nie jest se tanie, a sesje są przechowywane w pamięci serwera przez dłuższy czas niż żądania.

Może chcesz zastąpić url-pattern z /* przez *.jsp lub przenieść ograniczone strony do określonego folderu, np. /secured, /private, /pages, itp. I zmień url-pattern zgodnie z /secured/*, /private/*, /pages/* itd. I umieść całą statyczną zawartość w innym miejscu, np. /static. W ten sposób filtr nie będzie już wywoływany dla zawartości statycznej.

+1

Zgoda na pomiar. Podchodzimy bardzo blisko do przedwczesnej optymalizacji z tym pytaniem. –

1

Po pierwsze, zgadzam się z podejściem opartym na profilu.

Po drugie, o ile mi wiadomo, serwer WWW stosuje tę samą technikę, aby wywołać określoną servelt (/ JSP), ponieważ używają one filtrów.

W przypadku, gdy filtr jest filtrowanie statyczny zasób (np plik jpg), to trochę odpadów, W przypadku, gdy filtr jest filtrowanie dynamiczny zasób (np Servlet), jest znikome .. (Większość Java struktury sieciowe takie jak rozpórki i Jboss-seam intensywnie używają filtrów).