-
-
Notifications
You must be signed in to change notification settings - Fork 1.3k
[QUESTION] hyperf/resource组件性能拉垮,有没有什么优化思路? #7541
Copy link
Copy link
Open
Labels
questionFurther information is requestedFurther information is requested
Description
组件文档:https://hyperf.wiki/3.1/#/zh-cn/db/resource
resource 组件在解耦控制器层和渲染层有很大的作用,但是因为resource会创建大量对象,特别在渲染长列表的时候,性能及其拉垮,实际测试发现,在渲染100条列表的时候,直接json响应和通过resource响应,性能差了有3倍以上。
直接json响应:
$map = $rank->map(function ($item) {
return [
'user_id' => $item->user_id,
'correct_count' => $item->correct_count,
'duration_seconds' => $item->duration_seconds,
'paper_period_count' => $item->paper_period_count,
'user' => $item->user->only(['id', 'nickname', 'avatar'])
];
});
return $this->success($map);resource响应:
class PaperPeriodRankCollectionResource extends ApiJsonResource
{
public function toArray(): array
{
return [
'user_id' => $this->user_id,
'correct_count' => $this->correct_count,
'duration_seconds' => $this->duration_seconds,
'paper_period_count' => $this->paper_period_count,
'user' => new SimpleUserResource($this->whenLoaded('user'))
];
}
}以上代码可以排除在resource做复杂加工,排除n+1问题,但是直接响应性能在100ms以内,通过resource响应基本都在350ms以上,差异巨大。
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
questionFurther information is requestedFurther information is requested