JSF-Cache Statische Ressourcen-Filter
Wie Schreibe ich einen filter, der eine entsprechende cache-statische Ressourcen, wie von Google empfohlen (https://developers.google.com/speed/docs/best-practices/caching).
Ist es ausreichend, um einen filter zu erstellen, die setzt das Datum der letzten änderung, um etwas statisches Datum (wird sich ändern, jedes mal, wenn der server neu gestartet)?
Es ist wichtig, geben Sie eine Abläuft oder Cache-Control max-age,
und ein Last-Modified-oder ETag, für alle cacheable resources. Es ist
redundante beides angeben Expires und Cache-Control: max-age, oder
geben Sie sowohl Last-Modified und ETag.
Den link oben zu zeigen scheint, müssen Sie angeben, Expires oder Cache-Control. Warum ist das notwendig?
InformationsquelleAutor der Frage DD. | 2013-02-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn du meinst mit JSF-Ressourcen die Dateien in
/resources
Ordner, die vollständig behandelt von JSF-builtin-Ressource-handler (und damit alle referenzierten über<h:outputStylesheet>
<h:outputScript>
<h:graphicImage>
#{resource}
und daher nicht über den HTML-Weg), dann brauchen Sie nicht zu homegrow einen filter für den job. Die einzige Sache, die Sie tun müssen, um zu befriedigen Google-Empfehlungen ist, um dieExpires
Datum ein bisschen weiter in die Zukunft. Es nämlich standardmäßig auf 7 Tage (604800000 Millisekunden), während der performance-Test-tools wie Google Page Speed und Yahoo YSlow empfiehlt ein minimum von 30 Tagen (2592000000 Millisekunden).In Mojarra, können Sie es mit den folgenden context-parameter in
web.xml
:Und in MyFaces mit den folgenden ein:
Nicht, und sollte nicht nötig, um die
Last-Modified
. Die JSF-resource handler bereits erfolgt automatisch. Wenn Sie möchten, um zu erzwingen, Neuladen von Ressourcen, weil Sie diese geändert haben, dann verwenden Sie Ressourcen-Bibliothek die Versionsverwaltung. Siehe auch Was ist der JSF resource-library-und wie sollte es verwendet werden?Beachten Sie, ändern Sie es jedes mal wenn der server neu gestartet wird, macht das keinen Sinn, da die
Expires
header würde noch immer sagen, der browser, um re-test der Gültigkeit der cache nach einer gewissen Zeit nur. Bis der browser tatsächlich fordert die Ressource an, der browser würde nie bemerken die Veränderung in derLast-Modified
einer Ressource. Das einzige, was, das zwingt den browser, die schwer zu re-Anfrage die Ressource voll ist, eine änderung in der URL, in der Regel erreicht durch eine geänderte query-string-parameter-Wert. Die JSF-Ressourcen-Bibliothek die Versionsverwaltung macht genau das.Beachten Sie auch, dass die OmniFaces
CombinedResourceHandler
verwendet die Ressource zuletzt geändert Zeitstempel als "Ressourcen-version" in der Abfrage-string anstelle des resource-library-version. Also, wenn Sie verwenden, müssen Sie nicht unbedingt benötigen, resource-library-Mechanismus Versionierung.Den
Expires
header teilt dem browser mit, Wann wieder testen Sie die Gültigkeit der Cache-resource durch eine bedingte GET-Anfrage. So, bis die Zeit, die der browser nicht tun, und halten Sie mit der einen in den cache. DieCache-Control
sagt dem browser das caching-Strategie zu verwenden. Beachten Sie, dass, wenn es gesetzt wird, um z.B.no-cache
stattpublic
dann dieExpires
header würde keine Wirkung haben. Beachten Sie auch, dass die Abwesenheit vonCache-Control
header impliziertpublic
(erledigt von JSF-Ressourcen).InformationsquelleAutor der Antwort BalusC
Hier ist, wie ich schrieb meine cache-filter. funktioniert wie ein Charme.
Schreiben einer cache-filter zum verbessern der Leistung von der statischen Inhalte von JSF/Servlet-Bildschirme
Fügen Sie Folgendes in Ihre web.xml
In Ihrem au.com.webapp.config-Paket erstellen Sie eine Klasse CacheFilter wie folgt:
Wie um zu überprüfen, ob mein Bildschirm ist mit cache
Um zu sehen, ob Ihr Inhalt bereits usign gzip und cache In Ihrem Google Chrome Browser -> Rechtsklick auf dein Bildschirm -> prüfen -> klicken Sie auf Registerkarte "Netzwerk" - > aktualisieren Sie Ihren Bildschirm.
Klicken Sie auf die Bilder, icons, stylesheets und sehen, wenn Sie sehen Folgendes in response-header
Cache-Control:max-age=2592000
Auch wenn Sie die Seite aktualisieren, wenn sich der status eines Elements 304, in der anstelle von 200 (aus dem cache), sind Sie fertig.
Andere performance-Verbesserungen wie gzip
Siehe folgenden link für weitere einfache performance-Verbesserungen, die sich ändern können Sie Ihre webapp oder website-performance deutlich wie gzip oder JQuery-UI-Komponenten.
https://stackoverflow.com/a/35567464/5076414
InformationsquelleAutor der Antwort Sacky San
Keine Notwendigkeit zu schreiben, ein Filter, Tomcat 7 hat bereits ExpiryFilter das hinzufügen der Cache-Control auf Ihre Ressourcen. Es kann auf die änderung oder den Zugang zu unterbrechen. Finden Sie in diesem blog:
http://kahimyang.info/kauswagan/howto_blogs/1574-improving_page_load_with_mod_expires_and_expiresfilter_in_jsf_applications
InformationsquelleAutor der Antwort Omirp