2014-11-21 12 views
5

Wir HATEOAS verwenden, um große Wirkung aber wir haben an Leistung und immer sehr schlechte Ergebnisse aus dem Gebäude der Verbindungen, nämlich Code, wie dieseHATEOAS Link- und Leistungsmerkmale der Methode

resource.add(linkTo(methodOn(SomeController.class).findAll())).withSelfRel()); 

Ergebnisse (I sieht suchen bin nicht so besorgt über die Größe, aber unter sowieso)

Enabled links - ~438ms - 201 kb 
Disable links - ~193ms - 84.6 kb 

die Größe gebührt uns Putting out 8 Verbindungen pro Ressource so erwarteten wir die Größe, aber nicht die Geschwindigkeit verlangsamen aufgezeichnet.

Ungefähr 232ms ausgegeben wird auf Links rund 2 ms pro Objekt konstruiert Ich kehre (100 Objekte in diesem speziellen Test)

Gibt es trotzdem, dies zu beschleunigen? Können wir den URI im Voraus für alle Anfragen im toResources Anruf erhalten und ihn dann im toResource bewerten?

+0

Umschalten zu nicht mit methodOn und stattdessen Bereitstellung einer Controller.class, Methode, Params senkt die Kosten auf ~ 306ms –

+0

Was genau messen Sie? – zeroflagL

+0

Ich denke, es ist klar oben, nicht wahr? Wie lange wird eine Verbindung zu einer Controller-Methode hergestellt? –

Antwort

1

Ich habe mir den Code um linkTo(methodOn()) angesehen und es sieht aus wie eine Menge AOP Magie. Wenn Sie methodOn für die Zielschnittstelle aufrufen, wird ein Proxy generiert.

Mein Gefühl ist, dass dies zum Testen hervorragend ist, wenn Sie hart codierende URIs vermeiden wollen. EntityLinks bietet eine Alternative, die viel effizienter sein sollte. Aber es ist nicht so stark wie ControllerLinkBuilder. Eine Alternative ist die Verwendung einer Helper-Klasse in Kombination mit EntityLinks. Die spring-restbucks Projekte enthält ein schönes Beispiel - die PaymentLinks class.

Aber um ehrlich zu sein - es ist schwer, mit dem Komfort von ControllerLinkBuiler zu konkurrieren.

EDIT: Bitte lesen Sie meine Antwort here für einen ausführlicheren Vergleich der Link Builder-Leistung.

+0

Siehe auch http://stackoverflow.com/a/36326559/5371736 –