6

我们使用 HATEOAS 取得了很好的效果,但是我们一直在关注性能,并且从链接的构建中得到了非常糟糕的结果,即看起来像这样的代码

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

结果(我不关心大小,但无论如何都记录在下面)

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

大小是由于我们为每个资源提供了 8 个链接,所以我们预计大小,但速度不会减慢。

大约 232 毫秒用于构建链接,每个我返回的对象大约 2 毫秒(这个特定测试中的 100 个对象)

有没有办法加快这个速度?例如,我们能否在调用中为所有请求预先获取 URI toResources,然后在toResource?

4

1 回答 1

1

我看了一下周围的代码linkTo(methodOn()),它看起来像很多 AOP 魔法。每次为目标接口调用 methodOn 时都会生成一个代理。

我的感觉是,当您想避免硬编码 URI 时,这非常适合测试。EntityLinks提供了一种更有效的替代方案。但它的威力不如ControllerLinkBuilder

另一种方法是将 Helper 类与EntityLinks. spring-restbucks项目包含一个很好的示例 - PaymentLinks

但说实话 - 很难与 ControllerLinkBuiler 提供的便利性竞争。

编辑:在此处查看我的答案,以更详细地比较链接构建器的性能。

于 2015-10-24T18:55:16.997 回答