Php json编码Laravel中的嵌套关系时出现性能问题
我使用Laravel(5.2)雄辩的ORM从数据库中获取数据,如下所示:Php json编码Laravel中的嵌套关系时出现性能问题,php,json,laravel,Php,Json,Laravel,我使用Laravel(5.2)雄辩的ORM从数据库中获取数据,如下所示: $orders = Order::with([ 'customer', 'items', 'items.product', 'items.product.shop' => function ($query) { $query->select(['id', 'title']); } ])->get(); 注意:订单未绑定到单个店铺的原因是订单可能包含
$orders = Order::with([
'customer',
'items',
'items.product',
'items.product.shop' => function ($query) {
$query->select(['id', 'title']);
}
])->get();
注意:订单未绑定到单个店铺的原因是订单可能包含来自多个店铺的项目。每个项目都引用了订购的产品,而订购的产品又引用了它所属的商店
这很好,但是,当我想将结果返回到一个视图并在那里渲染时,对它进行json\u编码需要很长时间
我确认json\u encode
确实是瓶颈,如果我只是执行查询,然后立即死亡,那么响应几乎是即时的。但是,如果在查询后执行$orders->toJson()
(或json\u encode($orders)
),我会遇到与将结果返回到视图相同的响应延迟
显然,问题在于items.product.shop
的嵌套属性(太深了?),如果我删除该属性,调用json\u encode
不会导致任何性能问题
以下是单个订单的示例输出:
{
"id": 71,
"total_sum": "5.88",
"customer": {
"id": 68,
"first_name": "One Large",
"last_name": "Men's"
},
"items": [
{
"id": 105,
"quantity": "1",
"price_single": "1.2",
"price_total": "1.2",
"color_id": "6",
"size_id": "5",
"order_id": "71",
"product": {
"id": 149,
"name": "Men's",
"shop": {
"id": 109,
"title": "general test"
}
}
}
]
}
找到罪魁祸首后,我在我的商店
模型(通过$appends
添加)中有一个附加属性,该属性通过使用嵌套for循环进行计算
显然,在直接处理商店时速度仍然足够快,但由于在上面的示例中,每个订单都有多个项目,并且每个项目都引用了一个商店,因此性能会下降。找到了罪魁祸首,我在我的商店
模型中有一个附加属性(通过$appends
添加)通过使用嵌套for循环计算的
显然,在直接处理商店时,速度仍然足够快,但由于在上面的示例中,每个订单都有多个项目,并且每个项目都引用了一个商店,因此性能会下降。如果从商店
加载中删除自定义选择,是否会加快速度?否,它存在的原因实际上是因为我认为shop
(如description
)中的某些属性可能会导致性能问题,因为它们包含大量文本。但是,只选择两个属性没有帮助。我也可以做dump($orders)代码>很好,性能问题只有在我介绍json\u encode($orders)
时才会出现。您是否尝试过json\u encode($orders->toArray())代码>?我不确定它是否会有很大的不同,但我对使用to array修复的雄辩模型有问题。如果从商店
加载中删除自定义选择,是否会加快加载速度?不,它存在的原因实际上是因为我认为商店
中的某些属性(如description
)可能会导致性能问题,因为它们包含大量文本。但是,仅选择两个属性没有帮助。我还可以执行dump($orders);
很好,只有在我引入json\u encode($orders)
时才会出现性能问题。您是否尝试过json\u encode($orders->toArray())
?我不确定它是否会有很大的不同,但我对使用数组修复的雄辩模型有一些问题。