سیستم کش مسیر (Route Cache)
این راهنما شما را با مراحل استفاده از کش (caching) در مسیرهای برنامه Finch آشنا میکند. کش کردن با ذخیره پاسخهای HTTP در حافظه یا سیستم فایل، به طور چشمگیری زمان پاسخدهی به درخواستهای تکراری را کاهش داده و به بهبود عملکرد کمک میکند.
کش مسیر چیست؟
کلاس RouteCache با افزودن قابلیت کش کردن، FinchRoute استاندارد را توسعه میدهد. به جای اجرای پردازشگر مسیر برای هر درخواست، Finch مسیر را رهگیری کرده و پاسخ کش شدهی قبلی را در صورتی که وجود داشته باشد و منقضی نشده باشد، ارائه میدهد.
نحوه استفاده از کش مسیر
فریمورک Finch یک افزونه (extension) راحت روی FinchRoute به نام .cache() ارائه میدهد که به سادگی مسیرهای موجود شما را با قابلیت کش کردن میپوشاند.
نمونهای از کش کردن یک مسیر ساده:
FinchRoute(
path: '/api/data',
index: () async {
// پردازش سنگین یا کوئری دیتابیس
await Future.delayed(Duration(seconds: 2));
return Context.rq.renderJson(data: {'message': 'Heavy data loaded'});
},
).cache(
cacheDuration: Duration(minutes: 5), // اعتبار کش به مدت ۵ دقیقه
cacheSource: CacheSource.memory, // ذخیره کش در حافظه (RAM)
);
گزینههای پیکربندی
هنگامی که .cache() را فراخوانی میکنید (یا به طور مستقیم یک RouteCache ایجاد میکنید)، میتوانید رفتار آن را با این ویژگیها پیکربندی کنید:
cacheDuration: یک شیءDurationکه مدت زمان معتبر بودن کش را مشخص میکند. پس از این زمان، کش منقضی شده و کنترلکننده اصلی برای درخواست بعدی دوباره اجرا میشود. مقدار پیشفرض10 دقیقهاست.cacheSource: محل ذخیرهسازی کش. میتواندCacheSource.memory(پیشفرض) برای کش کردن سریع در رم یاCacheSource.fileبرای کش کردن دائمی در فایل باشد.cacheType: لیستی ازCacheParamکه مشخص میکند چه بخشهایی از درخواست، کلید منحصر به فرد کش را تشکیل میدهند. پیشفرض[CacheParam.method, CacheParam.path]است.
انواع کش (CacheParam)
شما میتوانید با استفاده از CacheParam نحوه ساخت کلید کش را تعریف کنید. این کار اطمینان حاصل میکند که درخواستهای متفاوت، به اشتباه یک پاسخ کش شدهی یکسان را دریافت نمیکنند.
CacheParam.path: (الزامی) مسیر URI درخواست (مثل/api/data).CacheParam.method: متد HTTP (مثلGET،POST).CacheParam.query: پارامترهای پرسوجو در URL (مثل?page=1&limit=10).CacheParam.data: دادههای بدنه (body) درخواست.
نمونه با انواع کش خاص:
اگر یک اندپوینت جستجو دارید که پارامترهای پرسوجو میگیرد، باید CacheParam.query را در cacheType خود بگنجانید تا ?q=apple و ?q=orange کشهای متفاوتی تولید کنند.
FinchRoute(
path: '/search',
index: () async {
final query = Context.rq.getQuery('q');
return Context.rq.renderJson(data: {'results': 'Found results for $query'});
},
).cache(
cacheType: [CacheParam.path, CacheParam.method, CacheParam.query],
);
منابع کش (CacheSource)
CacheSource.memory: کش در یکMapثابت (static) در حافظه ذخیره میشود. این سریعترین روش کش کردن است اما در صورت راهاندازی مجدد سرور پاک میشود.CacheSource.file: کش به صورت فایلهای JSON در دیسک محلی ذخیره میشود. دایرکتوری باFinchApp.config.pathCacheمشخص میشود. این نوع کش پس از راهاندازی مجدد برنامه باقی میماند اما نیاز به خواندن/نوشتن دیسک دارد.
مدیریت کش
شما میتوانید تمام پاسخهای کش شده را به صورت سراسری در کل برنامه خود پاک کنید. این کار به خصوص در زمان بهروزرسانی برنامه یا مهاجرت دادهها مفید است.
import 'package:finch/src/router/route_cache.dart';
void main() async {
// پاک کردن تمام کشها (هم در حافظه و هم در سیستم فایل)
await RouteCache.clearAllCache();
}
با استفاده از RouteCache، میتوانید بدون افزودن وابستگیهای خارجی پیچیده، عملکرد اندپوینتهای برنامه Finch خود را به میزان قابل توجهی ارتقا دهید!