2014-11-21 5 views
5

Мы используем HATEOAS с большим эффектом, однако мы смотрели на производительность и получать очень плохие результаты из здания ссылки, а именно код, который выглядит как этотHATEOAS Link и метод производительности

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

Результаты (I я не так обеспокоены размером, но в любом случае записано ниже)

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

размер связано с нами тушении 8 ссылок на ресурс, поэтому мы ожидали, что размер, но не скорость замедляется.

Примерно 232ms тратится на строительство ссылки примерно 2 мс на объект I возвращающие (100 объектов в данном тесте)

есть в любом случае, чтобы ускорить этот процесс? Можем ли мы получить URI авансом для всего запроса в вызове toResources, а затем использовать его в toResource?

+0

переключение на не использование методаOn и вместо этого предоставление Controller.class, метод, Params сокращает стоимость до ~ 306ms –

+0

Что именно вы измеряете? – zeroflagL

+0

Я думаю, что это ясно, не так ли? Количество времени для создания ссылки на метод контроллера? –

ответ

1

Я просмотрел код около linkTo(methodOn()), и это похоже на магию AOP. Сгенерированный прокси генерируется каждый раз, когда вы вызываете методOn для целевого интерфейса.

Мое ощущение, что это отлично подходит для тестирования, когда вы хотите избежать жестких кодировок URI. EntityLinks обеспечивает альтернативу, которая должна быть намного более эффективной. Но это не так сильно, как ControllerLinkBuilder.

Альтернативой является использование класса Helper в сочетании с EntityLinks. Проекты spring-restbucks содержат хороший пример - PaymentLinks class.

Но, честно говоря, трудно конкурировать с удобством, предоставляемым ControllerLinkBuiler.

EDIT: См. Мой ответ here для более подробного сравнения производительности компоновщика ссылок.

+0

См. Также http://stackoverflow.com/a/36326559/5371736 –

Смежные вопросы