5

Ho due domande. Il primo è fare i filtri aggiungere un sacco di spese generali da richiedere. Abbiamo un filtro ed è impostato per l'esecuzione sul pattern URL/*. Ciò significa che viene eseguito anche su tutte le richieste di immagini. Penso che ciò non sia positivo per le prestazioni, ma i miei colleghi pensano che non importa se il filtro viene eseguito 5 o 6 volte per richiesta perché il filtro ha solo un paio di istruzioni if.Prestazioni dei filtri Java Domanda

C'è un modo per far eseguire il filtro una volta per richiesta, ignorando la richiesta di immagine.

Grazie Doug

+0

Controlla se una password utente è scaduta. Ottieni queste informazioni dalla sessione – Doug

+0

I filtri per definizione vengono eseguiti una o due volte per richiesta. Potenzialmente prima e dopo il servlet sono seduti di fronte. Le immagini vengono pubblicate in risposta a una richiesta separata dal client. –

+0

@Ian: il loro '' può essere configato per essere eseguito su ogni 'RICHIESTA' e/o' FORWARD' e/o 'INCLUDE'. Il valore predefinito è solo su "RICHIESTA". – BalusC

risposta

0

Non è quasi mai utile speculare sulle implicazioni di prestazioni del codice senza prima profilarlo. A meno che il codice proposto nei filtri non stia eseguendo alcune operazioni che si sa essere lente, misurare prima prima di ottimizzare.

Ricordate, anche se quando si scrive una servlet può sembrare l'unica cosa che accade è il codice nelle vostre doGet() o doPost() metodi un sacco di altre cose accadere prima il codice servlet/filtro viene invocata. Il contenitore servlet elabora la richiesta HTTP lo impacchetta in oggetti Java e esegue tutti i tipi di altre elaborazioni prima di passare al codice.

Se i filtri di servlet in realtà sono solo un paio di istruzioni if ​​che operano su dati a basso costo (come la richiesta stessa), è improbabile che questo sia un problema per voi.

4

Misurare è sapere. Se ben scritto, direi, è trascurabile. Ma se per esempio cattura la sessione indipendentemente da come è stata creata (e quindi c'è la possibilità che venga creata inutilmente), allora potrebbe avere un impatto notevole sulle prestazioni e/o sull'utilizzo della memoria perché la creazione di sessioni non è per- Se economico e le sessioni vengono archiviate nella memoria di sever per un periodo più lungo rispetto alle richieste.

È possibile sostituire lo url-pattern di /* entro il *.jsp o spostare le pagine riservate in una cartella specifica, ad es. /secured, /private, /pages, ecc. E modificare lo url-pattern in base a /secured/*, /private/*, /pages/*, ecc. E inserire tutto il contenuto statico in un altro luogo, ad es. /static. In questo modo il filtro non sarà più invocato per il contenuto statico.

+1

Concordato sulla misurazione. Stiamo tracciando un'ottimizzazione prematura molto vicina a questa domanda. –

1

Innanzitutto, sono d'accordo con l'approccio Profile-first.

In secondo luogo, per quanto ne so, il server Web utilizza la stessa tecnica per invocare un servelt specifico (/ JSP) come viene utilizzato per i filtri.

Nel caso in cui il filtro sta filtrando una risorsa statica (ad esempio, file jpg), è un po 'uno spreco, Nel caso in cui il filtro sta filtrando una risorsa dinamica (ad esempio, Servlet) è trascurabile .. (La maggior parte del Java i framework web come struts e Jboss-seam utilizzano i filtri pesantemente ..)