Ich beobachte wirklich schlechte Leistung, wenn GWT requestfactory verwendet. Zum Beispiel dauert eine Anfrage, die meine Serviceschicht 2 Sekunden dauert, bis sie erfüllt ist, GWT 20 Sekunden zum Serialisieren. Mein Dienst gibt ~ 100 zurück, was EntityProxies sein wird. Jedes dieser Objekte verfügt über 4 ValueProxies und 2 EntityProxies (100 EntityProxies auf Root-Ebene, 400 ValueProxies und 200 zusätzliche EntityProxies). Ich sehe jedoch die gleiche 10fache Leistungsverschlechterung bei viel kleineren Datensätzen.GWT Requestfactory Leistungsvorschläge
Beispiel log-Schnipsel:
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
Ich habe einige Profilierungs Code dem ServiceLayerDecorator#invoke
Methode zugegeben und das gesamte Servlet in einem Zeitgeber gewickelt. Ich habe den Dienst selbst profiliert, und er liefert Ergebnisse in ~ 2s.
Ich verwende GWT 2.4, aber habe dies auf GWT 2.5rc1 und GWT 2.5rc2 getestet. Mein Backend ist auf GAE, aber ich denke nicht, dass das hier eine Rolle spielt.
Ich fand this bug eingereicht gegen 2.4, die sehr ähnlich zu sein scheint. Ich habe den Patch manuell von this google group ohne Glück angewendet.
Meine Domain-Modelle wie folgt aussehen:
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;
}
Meine Frage ist:
- Habe ich den Code richtig profiliert und das Problem auf die GWT Serialisierung isoliert?
- Könnte ich etwas falsch machen, das dieses Verhalten verursachen würde?
- Wie kann ich den GWT-Serialisierungscode besser profilieren, um die Ursache herauszufinden?
Ich denke, Sie haben eine zu komplexe Datenstruktur. Versuche es zu reduzieren. Kannst du etwas mehr erklären, wie dein DTO aussieht? Verwenden Sie AutoBean? –
Ich habe der Frage einen Teil des Domänenmodells hinzugefügt. In einigen der teureren ist dies der Graph, der geladen wird. Haben Sie Hinweise darauf, dass die Datenstruktur zu komplex ist? Was ist daran komplex (die Größe oder die Beziehungen)? Für mich scheint es ziemlich vernünftig für jede Geschäftsanwendung. Ich habe begonnen, AutoBean zu betrachten und denke darüber nach, JSON stattdessen vom Server zurückzugeben. – Brad
Ich profilierte gerade eine Anfrage, die ~ 10 EntityProxies (keine ValueProxy oder verschachtelte Assoziationen) lädt. Die Service-Schicht dauerte ~ 1s, aber die GWT-Serialisierung dauerte etwas mehr als 3 Sekunden. – Brad