我们正在使用HATEOAS产生很好的效果,但是我们一直在关注性能并从链接的构建中获得非常差的结果,即看起来像这样的代码
resource.add(linkTo(methodOn(SomeController.class).findAll())).withSelfRel());
结果(我不关心尺寸,但无论如何都记录在下面)
Enabled links - ~438ms - 201 kb
Disable links - ~193ms - 84.6 kb
尺寸是由于我们为每个资源分配了8个链接,所以我们预计尺寸,但速度不会减慢。
我返回的每个对象大约2ms用于构建链接大约需要232ms(在此特定测试中有100个对象)
反正有加速吗?我们可以在toResources
调用中为所有请求预先获取URI,然后在toResource
中对其进行调整吗?
答案 0 :(得分:1)
我查看了linkTo(methodOn())
周围的代码,它看起来像很多AOP魔法。每次为目标接口调用methodOn时,都会生成代理。
我的感觉是,当您想要避免硬编码URI时,这非常适合测试。 EntityLinks
提供了一种更有效的替代方案。但它没有ControllerLinkBuilder
那么强大。
另一种方法是将Helper类与EntityLinks
结合使用。 spring-restbucks项目包含一个很好的示例 - PaymentLinks class。
但说实话 - 很难与ControllerLinkBuiler提供的便利性竞争。
编辑:请参阅我的回答here,以便更详细地比较链接构建器的效果。