یک صفحه که پنجاه سفارش را فهرست میکند و برای هر سفارش نام مشتری را نشان میدهد. کوئری اول سفارشها را میگیرد و بعد، داخل حلقه نمایش، هر بار که نام مشتری خوانده میشود یک کوئری تازه زده میشود. جمعش میشود پنجاهویک کوئری، و در هیچ سطری از کد شما نوشته نشده.
اسم این مسئله بارگذاری تنبل است و راهحلش یک متد است که رابطهها را از پیش میگیرد. با آن، همان صفحه دو کوئری میزند: یکی برای سفارشها و یکی برای همه مشتریهای مربوط. تفاوت روی صفحه اول یک لپتاپ دیده نمیشود و روی سرور اشتراکی همان چیزی است که صفحه را کند میکند.
سه چیز که باید بلد باشید تا این را ببینید: نمایش تعداد کوئریهای هر درخواست در نوار اشکالزدایی، فعال کردن حالتی که بارگذاری تنبل را به خطا تبدیل میکند، و خواندن خود کوئریها. اولی نشان میدهد که مسئله هست و دومی نمیگذارد دوباره برگردد.
یک درخواست، از مسیر تا پاسخ
مسیر با Route::get('/sefareshha/{sefaresh}', ...) اعلام میشود و بخش داخل آکولاد یک پارامتر است. پیش از رسیدن به متد شما، زنجیرهای از میانافزارها اجرا میشود: نشست بارگذاری میشود، توکن ضدجعل بررسی میشود، و اگر مسیر محافظتشده باشد ورود کاربر هم بررسی میشود.
و یک رفتار که وقت زیادی صرفهجویی میکند: اگر پارامتر متد را با نوع مدل اعلام کنید، فریمورک خودش سطر را با کلید اصلی پیدا میکند و به شما میدهد، و اگر سطری نباشد پیش از اجرای اولین سطر بدنه متد، پاسخ نبودن منبع را برمیگرداند. یعنی بررسی وجود، اصلا در کد شما نوشته نمیشود.
سه جایی که نظر فریمورک را باید پذیرفت
مهاجرتها تنها منبع حقیقت ساختار پایگاه دادهاند و تغییر دستی جدول روی سرور، همان چیزی است که استقرار بعدی را میشکند. صف برای هر کاری است که کاربر لازم نیست منتظرش بماند، مثل فرستادن پیامک یا ساختن گزارش. و اعتبارسنجی در کلاس درخواست جدا مینشیند و نه داخل کنترلر، چون همانجاست که هم قابل آزمون است و هم قابل استفاده دوباره.
پذیرفتن این سه چیز کد را کوتاه میکند و مقاومت در برابرشان یعنی نوشتن دوباره چیزی که فریمورک دارد، معمولا با کیفیت کمتر. همان مرزی که در کار با داده در کد مستقل از فریمورک بررسی میشود.
جایی که کار گیر میکند، هاست اشتراکی است
بیشتر پروژههای لاراول در ایران روی هاست اشتراکی مستقر میشوند و همان جا با سه مسئله روبهرو میشوند که در هیچ آموزشی نیست. اول، ریشه وب باید به پوشه عمومی پروژه اشاره کند و نه به ریشه پروژه؛ نکردنش یعنی فایل تنظیمات محیط از اینترنت قابل خواندن است، که جدیترین اشتباه ممکن است. دوم، صف بدون یک فرایند دائمی کار نمیکند و روی هاست اشتراکی معمولا چنین چیزی ندارید، پس تنها راه یک کار زمانبندیشده است. سوم، دستورهای کش پیکربندی و مسیر باید در استقرار اجرا شوند، وگرنه هر درخواست کل پیکربندی را از نو میخواند.
ابزار، و سالی که این حرف درست است
در سال ۲۰۲۶ لاراول ۱۲ نسخهای است که یک پروژه تازه رویش ساخته میشود و روی PHP 8.4 اجرا میشود؛ متنباز و رایگان است. برای دیدن کوئریهای هر درخواست، Laravel Debugbar ابزار جاافتاده است و جای گذاشتن دستی شنونده روی رویدادهای کوئری را گرفته؛ متنباز است و فقط در محیط توسعه نصب میشود. برای اینکه بارگذاری تنبل اصلا ممکن نباشد، خود فریمورک یک تنظیم دارد که آن را به استثنا تبدیل میکند و بهترین جایش محیط توسعه است.
پرسش بعدی این است که آن کوئریها وقتی نوشته میشوند چه شکلی دارند و چطور خوانده میشوند، که خواندن پلن، و درست کردن کوئریای که توصیفش میکند است. و مسیر کامل یک درخواست، مستقل از فریمورک، در درخواست میآید، پاسخ میرود، و هرچه میان این دو است باز میشود.