1
JSON編碼的嵌套關係
我從數據庫中使用Laravel的(5.2)雄辯ORM像這樣獲取數據:性能問題,當在Laravel
$orders = Order::with([
'customer',
'items',
'items.product',
'items.product.shop' => function ($query) {
$query->select(['id', 'title']);
}
])->get();
注:爲什麼訂單不依賴於一個理由單店是訂單可能包含來自多個商店的物品。每個項目都會引用訂購的產品,而這些產品又參考了其所屬的商店。
這工作得很好,但是,當我想要返回結果到視圖並呈現它時,它需要很長時間json_encode
它。
我確認json_encode
確實是瓶頸,如果我只是執行查詢並立即死亡,響應幾乎是即時的。但是,如果我在查詢後執行了$orders->toJson()
(或json_encode($orders)
),則我將遇到與將結果返回給視圖相同的延遲響應。
顯然問題在於items.product.shop
的(太深?)嵌套屬性,如果我刪除它,則調用json_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"
}
}
}
]
}
如果您從「商店」加載中刪除自定義選擇,它是否會使事情更快? – apokryfos
不,它存在的原因實際上是因爲我認爲'shop'中的某些屬性(如'description')可能會導致性能問題,因爲它們包含大量文本。但是,只選擇兩個屬性並沒有幫助。 – falloutghst
我也可以做'dump($ orders);'很好,性能問題只會在我引入json_encode($ orders)時出現' – falloutghst