Sto osservando prestazioni davvero brutte quando si utilizza GWT requestfactory. Ad esempio, una richiesta che richiede il mio livello di servizio 2 secondi a fullfil sta prendendo GWT 20 secondi per serializzare. Il mio servizio restituisce ~ 100 ciò che sarà EntityProxies. Ognuno di questi oggetti ha quello che diventerà 4 ValueProxies e altri 2 EntityProxies (100 EntityProxies di livello root, 400 ValueProxies e 200 EntityProxies aggiuntivi). Tuttavia, vedo lo stesso degrado delle prestazioni 10 volte su dataset molto più piccoli.GWT Suggerimenti sulla prestazione della richiesta
Esempio di registro frammento:
D 2012-10-18 22:42:39.546 ServiceLayerDecorator invoke: Inoking service layer took 2265 ms
D 2012-10-18 22:42:58.957 RequestFactoryServlet doPost: Entire request took 22870 ms
ho aggiunto del codice profiling al metodo ServiceLayerDecorator#invoke
e avvolto tutta servlet in un timer. Ho profilato il servizio da solo, e in effetti restituisco risultati in ~ 2s.
Sto usando GWT 2.4, ma ho provato questo su GWT 2.5rc1 e GWT 2.5rc2. Il mio back-end è GAE, ma non penso che stia giocando un ruolo qui.
Ho trovato this bug archiviato contro 2,4, che sembra essere molto correlato. Ho applicato manualmente la patch da this google group senza fortuna.
I miei modelli di dominio assomigliano:
class Trip {
protected Address origin; // becomes ValueProxy
protected Address destination; becomes ValueProxy
protected Set<TripPassenger> tripPassengers; // Set of ValueProxies
}
class TripPassenger {
protected Passenger passenger;
}
class Passenger {
protected Account account;
}
La mia domanda è:
- Avere ho fatto il profilo il codice corretto e isolato il problema alla serializzazione GWT?
- Posso fare qualcosa di sbagliato che potrebbe causare questo comportamento?
- Come è possibile ottenere un profilo migliore del codice di serializzazione GWT per cercare di individuare la causa?
Penso che tu abbia un datastructure troppo complesso. Cerca di appiattirlo. Puoi spiegare un po 'di più, com'è il tuo DTO? Usi AutoBean? –
Ho aggiunto una parte del modello di dominio alla domanda. In alcuni dei più costosi, questo è il grafico che viene caricato. Hai qualche riferimento per dire che la struttura dei dati è troppo complessa? Che cosa è complesso (dimensioni o relazioni)? Per me, sembra abbastanza ragionevole per qualsiasi applicazione commerciale. Ho iniziato a guardare AutoBean e sto pensando di restituire JSON dal server. – Brad
Ho appena profilato una richiesta che carica fino a 10 EntityProxies (nessun ValueProxy o associazioni nidificate). Il livello di servizio richiedeva ~ 1 s, ma la serializzazione GWT impiegava poco più di 3 secondi. – Brad