2014-11-21 15 views
5

Stiamo usando hateoas di grande effetto tuttavia ci sono stati a guardare le prestazioni e ottenere risultati molto scarsi dalla costruzione dei collegamenti, ossia il codice che assomiglia a questohateoas Link e Metodo prestazioni

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

Risultati (I non sono così preoccupato per le dimensioni, ma registrata sotto in ogni caso)

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

la dimensione è dovuta a noi mettere fuori 8 collegamenti per risorsa quindi ci aspettavamo la dimensione, ma non la velocità rallenta.

circa 232ms viene speso per la costruzione di collegamenti circa 2 ms per oggetto torno (100 oggetti in questo particolare test)

Esiste un modo per accelerare questo? È possibile ottenere l'URI in anticipo per tutte le richieste nella chiamata toResources, ad esempio, e quindi incorporarlo nello toResource?

+0

passando a non utilizzare methodOn e invece fornendo un Controller.class, Method, Params riduce il costo a ~ 306ms –

+0

Che cosa state misurando esattamente? – zeroflagL

+0

Penso che sia chiaro sopra non è vero? La quantità di tempo per creare un collegamento a un metodo di controller? –

risposta

1

Ho dato un'occhiata al codice intorno a linkTo(methodOn()) e sembra un sacco di magia AOP. Viene generato un proxy ogni volta che si chiama methodOn per l'interfaccia di destinazione.

La mia sensazione è che questo è ottimo per i test quando si desidera evitare URI hard-coding. EntityLinks fornisce un'alternativa che dovrebbe essere molto più efficiente. Ma non è così potente come lo ControllerLinkBuilder.

Un'alternativa è utilizzare una classe di supporto in combinazione con EntityLinks. I progetti spring-restbucks contengono un bell'esempio: lo PaymentLinks class.

Ma per essere onesti, è difficile competere con la convenienza fornita da ControllerLinkBuiler.

MODIFICA: Vedere la risposta here per un confronto più elaborato delle prestazioni del link builder.

+0

Vedere anche http://stackoverflow.com/a/36326559/5371736 –