وقتی صحبت از سرعت سایت و اپلیکیشن میشود، کش میتواند بهترین گزینه باشد. کش کردن تاثیر زیادی در سرعت سایت دارد. خوشبختانه لاراول به صورت از پیش نصب شده درایورهای کش دارد که بدون هیچ زحمتی میتوانید از آنها استفاده کرده و سرعت سایت را بهبود ببخشید. Redis و Memcached یا تنها استفاده از فایلهای لوکال، لاراول همه اینها را دارد.
در این مقاله پیاده سازی کش برای کوئریهای الوکوئنت به صورت مستقیم از لاراول را بررسی میکنیم، که کش در دیتابیس را ساده میسازد.
پکیج را میتوانید از طریق کامپوزر نصب کنید:
composer require rennokki/laravel-eloquent-query-cache
مدلهای شما به تریت QueryCacheable نیاز دارند:
use Rennokki\QueryCache\Traits\QueryCacheable;
class Article extends Model
{
use QueryCacheable;
...
}
پکیج به صورت پیش فرض کش را فعال نمیکند. پراپرتی cacheFor$ را به مدل اضافه کنید:
use Rennokki\QueryCache\Traits\QueryCacheable;
class Article extends Model
{
use QueryCacheable;
protected $cacheFor = 180; // 3 minutes
}
هر وقت که یک کوئری اجرا شود، کش وارد عمل میشود. در صورت خالی بودن کش برای آن کوئری، آن را ذخیره میکند و دفعه بعد آن را از کوئری دیتابیس که کش شده، بازیابی میکند.
در صورت وجود داشتن آن را بازیابی کرده و به کار میگیرد. این عمل را بدون اینکه با دیتابیس کاری داشته باشد انجام میدهد.
// database hit; the query result was stored in the cache
Article::latest()->get();
// database was not hit; the query result was retrieved from the cache
Article::latest()->get();
چنانچه میخواهید از استفاده از کش جلوگیری کنید، از متد ()dontCache-> قبل از تریگر کردن متد آخر استفاده کنید.
Article::latest()->dontCache()->firstOrFail();
اگر فعال کردن کش به صورت پیشفرض، راه حل مناسبی برای شما نیست، روشی جایگزین را انتخاب کنید. فعال کردن کش به صورت کوئری به کوئری یعنی هر بار که کوئری مینویسد باید آن را کش کنید که در مقابل روش اول یعنی کش کردن تمامی کوئریهای مدل است.
اول از همه، متغیر cacheFor$ را از مدل حذف کنید. در هر کوئری با فراخونی (...)cacheFor-> مشخص میکنید که قصد کش کردن آن کوئری را دارید.
Article::cacheFor(now()->addHours(24))->paginate(15);
بعضی از ذخیره سازهای کش مثل Redis یا Memcached از تگ زدن کلیدها پشتیبانی میکنند. این ویژگی از این منظر خیلی مفید است که کوئری کش شده را تگ میزنیم و هر وقت که بخواهیم کش مورد نظرمان را غیرفعال میکنیم.
به عنوان مثال ساده، اگر بخواهیم با آپدیت کردن یک مقاله، کش لیست مقالهها را پاک کنیم، استفاده از تگ روش کارآمدی است.
$articles = Article::cacheFor(60)->cacheTags(['latest:articles'])->latest()->get();
$article = Article::find($id);
$article->update(['title' => 'My new title']);
Article::flushQueryCache(['latest:articles']);
متد flushQueryCache فقط کش تگ شده با latest:articles را پاک می0157کند. اگر کوئریهای دیگر با تگی به جز latest:articles تگ شده باشند در کش نگه داشته میشوند.
مقالههای زیادی درباره مقایسه فریمورک لاراول با سیموفنی یا مواردی از این قبیل در سطح اینترنت یافت میشود. با این حال در این مقاله قصد مقایسه فریمورکها را نداریم. بلکه سعی در توضیح مزایای لاراول و امکانات فریمورک لاراول داریم. امکانات بینظیری که باعث شده است برنامهنویسان زیادی به سمت برنامهنویسی لاراول تغییر مسیر دهند
2 سال پیش
7 دقیقه
قابلیت محلی سازی لاراول روش مناسبی برای بازیابی استرینگها به زبانهای مختلف را برای ما فراهم میکند. در واقع با استفاده از این قابلیت است که میتوانیم با کمترین اتلاف وقت، از چند زبان در وب سایت خود پشتیبانی کنیم.
2 سال پیش
7 دقیقه
Swoole فریمورک برنامهنویسی همگام در سطح تولید برای PHP است. اجرای swoole بر روی لاراول، عملکرد اپلیکیشن لاراولی شما را تقویت میکند.
2 سال پیش
3 دقیقه
دیدگاهها