فریم‌ورک لاراول نسخه ۶ منتشر شد

لاراول نسخه ۶
لاراول نسخه ۶

طی چند روز گذشته تیم لاراول،‌ نسخه ۶ این فریم‌ورک را منتشر کرد و اکنون در دسترس همگان است. پکیج‌های لاراول از این نسخه به بعد از سیستم نسخه‌دهی مفهومی (Semantic Versioning) استفاده می‌کنند. این نسخه همچنین شامل سازگاری با سیستم لاراول ویپر (Laravel Vapor)، ریسپانس‌ های مُجازسازی بهینه‌ شده، جاب میدلور یا میان افزارهای کاری (job middleware)، لیزی کالکشن‌ها یا مجموعه‌های تنبل (lazy collections)، بهبود ساب کوئری ها و چند مورد دیگر است.

نسخه ۶ جدیدترین نسخه پشتیبانی بلندمدت، لاراول است

با انتشار نسخه ۶، نسخه پشتیبانی بلند مدت (Long Term Support) لاراول از نسخه ۵.۵ به ۶ تغییر کرد. تیم لاراول تا تاریخ ۳ سپتامبر ۲۰۲۱ به دیباگ و تا تاریخ ۳ سپتامبر ۲۰۲۲ به رفع مشکلات امنیتی این نسخه خواهند پرداخت. در جدول زیر فهرستی از نسخه‌ها و تاریخ‌های مربوط به پشتیبانی آنها آورده شده است:



نسخه‌دهی مفهومی

در دنیای مدیریت نرم‌افزار مکان مخوفی به نام «جهنم وابستگی» (dependency hell) وجود دارد. هر چه سیستم شما بزرگتر باشد و بسته‌های (package) بیشتری با نرم‌افزار شما یکپارچه شده باشند، احتمال بیشتری وجود دارد که روزی خود را دراین گودال ناامیدی بیابید.

در سیستم‌هایی با وابستگی‌های زیاد، انتشار بستهٔ جدید به زودی می‌تواند تبدیل به یک کابوس شود. اگر ویژگی‌های وابستگی‌ها بسیار جزئی‌نگرانه باشد، در خطر قفل نسخه (version lock) خواهید بود (ناتوانی برای بروزرسانی یک بسته، بدون اجبار جهت انتشار نسخه‌های جدید همهٔ بسته‌های وابسته). اگر وابستگی‌ها بسیار ضعیف مشخص شده باشند، به ناچار زخم بی‌قاعدگی نسخه را خواهید خورد (به فرض سازگاری بیش از حد معقول با نسخه‌های آتی‌تر). جهنم وابستگی آنجایی است که قفل نسخه و یا بی‌قاعدگی نسخه از پیشرفت رو به جلوی آسان و امن پروژهٔ شما جلوگیری می‌کند.

برای پاسخگویی به این مشکل، من یکسری قوانین و پیش‌نیازهای ساده را پیشنهاد میدهم که نحوهٔ تخصیص و افزایش شماره‌های نسخه را دیکته میکند. این قوانین برپایهٔ شیوه‌های موجود رایج و گستردهٔ در حال استفاده، هم در نرم‌افزارهای متن‌باز و غیر متن‌باز است، اگرچه لزوماً محدود به آن نیست. برای آنکه این سیستم کار کند نخست لازم است یک API عمومی (public) تعریف کنید. این امر ممکن است شامل مستندسازی، یا بوسیلهٔ خود کد مقید شده باشد. صرف نظر از این موضوع، مهم است که این API دقیق و واضح باشد. زمانیکه API عمومی خود را مشخص کردید، تغییرات آن را با افزایش معین شمارهٔ نسخهٔ خود مرتبط می‌سازید. قالب نسخهای به صورت X.Y.Z را در نظر بگیرید. خطاهایی که تاثیری بر API ندارند، نسخهٔ وصله (Patch) را افزایش می‌دهند، افزایش یا تغییر API که با نسخه‌های قبلی سازگار است، نسخهٔ جزیی (Minor) را افزایش میدهند، و تغییرات API که با نسخه‌های قبل ناسازگار هستند، نسخهٔ اصلی (Major) را افزایش می‌دهند.

این سیستم را «نسخه‌بندی معنایی» می‌نامند. بر اساس این طرح، شماره‌های نسخه و روشی که تغییر می‌کنند، معنی و مفهومی را دربارهٔ کد تحت آن نسخه، و آنچه که از یک نسخه تا نسخه‌ای دیگر ویرایش شده است، انتقال می‌دهد.

به فرض اینکه نسخهٔ MAJOR.MINOR.PATCH یا اصلی.جزیی.وصله داده شده است:

  1. شمارهٔ نسخهٔ اصلی (MAJOR) را زمانی افزایش دهید که تغییرات API ناسازگار اعمال کرده‌اید،
  2. شمارهٔ نسخهٔ جزیی (MINOR) را زمانی افزایش دهید که قابلیت‌هایی اضافه کرده‌اید که با نسخه‌های قبل سازگار هستند،
  3. شمارهٔ نسخهٔ وصله (PATCH) را زمانی افزایش دهید که تصحیح خطاهایی (bug) اعمال کرده‌اید که با نسخه‌های قبل سازگار هستند.

برچسب‌های اضافی برای پیش‌نشر و ساختن فراداده به صورت پسوندهایی برای قالب MAJOR MINOR PATCH فراهم است.



بهینه شدن ریسپانس‌ های مُجازسازی

پیش از این تهیه پیام های خطای سفارشی پیرامون مجوز ها برای کاربران دشوار بود. لاراول ۶ متد جدیدی به نام Gate::inspect را معرفی‌ می‌کند ، که پاسخ های مربوط به مُجازسازی را فراهم می‌کند.

استفاده از Gate::inspect
استفاده از Gate::inspect

میان افزارهای کاری

جاب میدلورها یا همان میان‌افزارهای کاری، ویژگی جدیدی است که Taylor Otwell سازنده لاراول در ارائه آن مشارکت داشته است و به جاب ها این اجازه را می‌دهد که از طریق میان افزارها اجرا شوند. میان افزار به شما کمک می‌کند تا از منطق سفارشی در بدنه متد handle جاب جلوگیری کنید.

جاب میدلورها
جاب میدلورها



مجموعه‌های تنبل

لِیزی کالکشن یا مجموعه‌ تنبل گزینه بسیار مناسبی ، برای کار کردن با مجموعه‌های وسیع داده هاست، که شامل مجموعه‌های مدل های الکوئنت نیز می‌شود. کلاس Illuminate\Support\LazyCollection با بهره‌ گیری از مولد‌ها (generators) در PHP کمک می‌کند تا هنگام کار با داده های حجیم، استفاده از حافظه را در کمترین حد ممکن نگه داشت.

به عنوان مثال ، تصور کنید نیاز داریم یک فایل لاگ چند گیگابایتی را در کنار بهره‌گیری از متدهای کالکشن لاراول (برای پارس کردن لاگ ها) پردازش کنیم. به جای خواندن یکباره کل فایل در حافظه می‌توان از لِیزی کالکشن بهره برد و در یک زمان معین تنها بخش کوچکی از فایل را در حافظه نگه داشت.

مثال لِیزی کالکشن
مثال لِیزی کالکشن

بهبود ساب کوئری ها

با انجام کار بیشتر در لایه دیتابیس، می‌توانیم تعداد کوئری های دیتابیس را کاهش دهیم که موجب می‌شود ; مقدار حافظه‌ای که برنامه ما استفاده میکند به همراه مدت زمانی که الکوئنت نیاز دارد تا مدل‌ها را پردازش کند، کاهش یابد.

این قضیه موجب بهبود در عملکرد برنامه، به صورت قابل توجهی می‌شود.

یکی از راه های عالی برای کار بیشتر با پایگاه داده، استفاده از ساب کوئری هاست. ساب کوئری ها به شما امکان می دهند تا کوئری های تو در تو را در یک جستجوی پایگاه داده اجرا کنید. این امر می تواند یک روش قدرتمند برای بازیابی داده های مدل، بدون استفاده از کوئری‌های اضافه و بدون استفاده از روابط بین جداول باشد...

هم اکنون در متدهای select ، addSelect ، orderBy ، from که مربوط به کوئری بیلدر هستند، می‌توان از ساب کوئری ها استفاده کرد.

به عنوان مثال، فرض کنید یک جدول پروازها و یک جدول پرواز به مقصد را داریم. جدول پروازها یک فیلد arrived_at دارد که مشخص میکند، پرواز چه زمانی به مقصد رسیده است. با استفاده از ساب کوئری در لاراول ۶ میتوانیم تمام مقصدها و نام پروازی که اخیرا به اون مقصد رسیده رو ، تنها با یک کوئری دریافت کنیم:

ساب کوئری با الکوئنت
ساب کوئری با الکوئنت

توجه داشته باشید که در بالا ما با استفاده از الکوئنت ساب کوئری رو به وجود میاریم. در حالی که میشه از خود کوئری بیلدر هم استفاده کرد:

ساب کوئری با کوئری بیلدر
ساب کوئری با کوئری بیلدر

پکیج Laravel UI

شاید بعد از نصب نسخه جدید لاراول متوجه شده باشید که دستور make:auth دیگر وجود ندارد. این گزینه و تنظیمات پیش فرض مربوط به کارهای فرانت، حال در قالب پکیجی به نام laravel/ui ارائه می‌شود. چنانچه مایلید به حالت قبل از بوت‌استرپ و یا ویو در پروژه‌تان استفاده کنید.. به شکل زیر عمل کنید:

laravel/ui
laravel/ui

برای کسب اطلاعات بیشتر در مورد احراز هویت و پکیج جدید UI ، مستندات رسمی احراز هویت لاراول را بررسی کنید.



در پایان چند منبع مرتبط با لاراول نسخه ۶ وجود دارد که می‌توانید آنها را بررسی کنید: