مدیریت بهینه داده‌های حجیم در لاراول با استفاده از streamJson

لاراول یه راه‌حل خیلی جالب برای این کار پیشنهاد می‌ده به اسم *streamJson*.
این قابلیت زمانی به‌ کمک شما میاد که نیاز دارید به تدریج دیتاها رو در قالب *json* به کاربر ارائه بدید 😁.

> این قالبت توی **Laravel 10.43** ارائه شده و باید قبل از هرکاری پروژه خودتون رو آپدیت کنید!

## درک streamJson

متد *streamJson* توی لاراول، که از طریق **Response** قابل دسترسیه، بهت این امکان رو می‌ده که داده‌های **JSON** رو مرحله‌به‌مرحله استریم کنی. این روش باعث می‌شه برنامه سریع‌تر و
کم‌مصرف‌تر از نظر حافظه کار کنه و برای کار با دیتاست‌های بزرگ یه گزینه‌ی عالی باشه.

“`php
response()->streamJson([‘data’ => $yourDataset]);
“`

## مثال واقعی

بیاید یه مثال واقعی بزنیم، فرض کنید قراره یه لیست خیلی بزرگ از محصولات پروژه رو به کاربر نشون بدید با بعضی از رابطه‌هاش.

“`php
streamJson([
‘inventory’ => Inventory::with(‘supplier’, ‘variants’)->cursor()->map(function ($item) {
return [
‘id’ => $item->id,
‘sku’ => $item->sku,
‘quantity’ => $item->quantity,
‘supplier’ => $item->supplier->name,
‘variants’ => $item->variants->pluck(‘name’),
];
}),
]);
}
}
“`

توی این مثال، ما از **eager loading** استفاده کردیم که از درخواست اضافه به دیتابیس جلوگیری کنیم.
از متد *cursor* هم استفاده کردیم که نیاز نباشه داده‌ها رو یکجا از دیتابیس بگیرم.

> در واقع متد **cursor** یه connection با دیتابیس برقرار می‌کنه و ایتم هارو یک به یک از دیتابیس می‌خونه و **stream** می‌کنه و با کمبود حافظه مواجه نمی‌شیم.

خروجی کد بالا میشه

“`json
{
\”inventory\”: [
{
\”id\”: 1,
\”sku\”: \”INV-001\”,
\”quantity\”: 150,
\”supplier\”: \”Global Supplies Inc\”,
\”variants\”: [\”red\”, \”blue\”, \”green\”]
},
{
\”id\”: 2,
\”sku\”: \”INV-002\”,
\”quantity\”: 75,
\”supplier\”: \”Quality Goods Ltd\”,
\”variants\”: [\”small\”, \”medium\”]
},
// … other inventories
]
}
“`

متد **streamJson** این امکان رو به پروژه شما اضافه می‌کنه که داده هارو به تدریج ارسال کنه و به مرورگر امکان نمایش دیتاها قبل از کامل شدنشون رو میده.

این متد یک راه حل خیلی عالی و ارزشمند برای کار با دیتاهای بزرگ به شما ارائه میده 😁

امیدوارم از این مقاله خوشتون آمده باشه 👋

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *