Sto riscontrando un problema di prestazioni con le richieste ajax JSF/RichFaces/Facelets e da quello che posso dire perché l'intero albero dei componenti viene ricostruito su ogni richiesta Ajax. Ciò accade anche se utilizzo ajaxSingle = true, avvolgo sezioni in a4j: region, dichiaro una singola sezione per il rerendering o nessuna. La nostra pagina è una pagina dinamica con molti livelli nidificati. La pagina può contenere circa 800-900 campi (inputText, rich calendars, selectOneMenus, ecc.). Il tempo di caricamento iniziale è un problema, ma capisco quel problema, è un sacco di campi. Una volta ottenuto il tempo di generazione/rendering iniziale, abbiamo progettato tutte le altre azioni per essere ajax e restituire solo ciò che è necessario. Dai registri di debug facelets vedo messaggi come questo su qualsiasi chiamata AJAX:Visualizzazione JSF durante la ricostruzione di ogni richiesta Ajax
2011-08-24 22:19:03,054 DEBUG [facelets.viewhandler] (http-0.0.0.0-8080-2) Took
24445ms to build view: /oconsole/appfile.xhtml
2011-08-24 22:19:09,377 DEBUG [facelets.viewhandler] (http-0.0.0.0-8080-2) Took
6323ms to render view: /oconsole/appfile.xhtml
non sono sicuro se qualcosa che stiamo facendo sta causando la ricostruzione dell'intero albero componente o facelets sta determinando questo bisogno richiesto per alcune motivo (cache obsoleta?). Ecco il nostro stack: JBoss 5.1 JSF 1.2 RichFaces. 3.3.3.Final Facelets 1.1.15 Seam 2.1.2
Ho provato ad aggiungere alcuni parametri di contesto per vedere se avrebbero aiutare, ma non ha fatto nulla: facelets.BUILD_BEFORE_RESTORE = false facelets.REFRESH_PERIOD = - 1 o 5 (come in 5min)
C'è comunque un modo per dire se le nostre viste vengono memorizzate correttamente nella cache? Noi non consideriamo un metodo di salvataggio dello stato, quindi credo che sia predefinito sul lato server. Tutte le nostre richieste avvengono all'interno di conversazioni a lungo termine. Non ero sicuro che questo abbia un valore, dal momento che pensavo che le visualizzazioni venissero memorizzate nella cache a livello di sessione? Qualsiasi aiuto sarebbe molto apprezzato, grazie.
Aggiornamento dopo più di debug:
L'AjaxViewHandler (che ha una variabile membro della FaceletsViewHandler) ha developmentMode = true set. Non sono sicuro che ciò stia causando il fatto che facelets non memorizzi alcuna vista in modo tale che eventuali modifiche vengano aggiornate durante i cicli di sviluppo ... ?? È stato molto difficile trovare informazioni su facelets/JSF nella cache dei punti di vista e sul comportamento e sul controllo di ciò. Inoltre, quando aggiungo param config:
<context-param>
<param-name>facelets.DEVELOPMENT</param-name>
<param-value>false</param-value>
</context-param>
Questo non ha preso! Nel debugger vedo ancora il vero set. Dato che abbiamo molte sottoview, ho provato anche com.sun.faces.numberOfLogicalViews e com.sun.faces.numberOfViewsInSession a 1000 su da 15 (impostazione predefinita) e ciò non ha avuto alcun effetto.
Ho anche provato a passare al salvataggio dello stato lato client senza alcuna fortuna. A corto di idee .... spero che qualcuno possa aiutare ....
Sembra Seam 2.1 auto-inizializza RichFaces e non sono sicuro se questo ha qualcosa a che fare con esso .....
So che questa è una vecchia domanda ... ma con così tanti campi, puoi prendere in considerazione di fare questo: http://industrieit.com/blog/2011/11/stateless-jsf-high-performance-zero-per -request-memory-overhead/ –