الرئيسية / مكتبة الشروحات / شروحات و دروس تطوير مواقع / 6 طرق سريعة وسهلة لتسريع مواقع Laravel

6 طرق سريعة وسهلة لتسريع مواقع Laravel

79
6 طرق سريعة وسهلة لتسريع مواقع Laravel

6 طرق سريعة وسهلة لتسريع مواقع Laravel

6 طرق سريعة وسهلة لتسريع مواقع Laravel

6 طرق سريعة وسهلة لتسريع مواقع Laravel

تشير التقديرات إلى أن 40٪ من الأشخاص سيغادرون موقع الويب عندما يستغرق تحميله أكثر من 3 ثوانٍ! لذلك ، من المهم جدًا من وجهة نظر العمل التأكد من أنه يمكنك عرض موقع الويب الخاص بك على الأشخاص الذين تقل أعمارهم عن 3 ثوانٍ.

HDegy | 6 طرق سريعة وسهلة لتسريع مواقع Laravel

لذلك ، عندما أكتب كودًا لمشروعات Laravel الجديدة ، أحاول تحسين الكود بقدر ما أستطيع في حدود الوقت والتكلفة. إذا كنت أعمل على مشاريع حالية ، فأنا أحاول استخدام هذه الأساليب لتحديث كود التشغيل البطيء لتحسين التجربة الإجمالية للمستخدمين. أشرت أدناه إلى بعض التقنيات لتحسين الأداء السريع لمواقع وتطبيقات Laravel التي يمكنك رؤيتها:

تسريع مواقع Laravel

1. قم بإحضار الحقول التي تحتاجها فقط في استعلامات قاعدة البيانات الخاصة بك

إحدى الطرق السهلة لزيادة سرعة موقع Laravel هي تقليل كمية البيانات المنقولة بين التطبيق وقاعدة البيانات. تتمثل إحدى طرق القيام بذلك في جلب الأعمدة التي تحتاجها فقط في استعلاماتك.

على سبيل المثال ، لنفترض أن لديك نموذج User يحتوي على 20 حقلاً مختلفًا. الآن ، تخيل أن لديك 10000 مستخدم على نظامك وتحاول معالجة كل منهم بطريقة ما. قد تبدو شفرتك كما يلي:

$users = User::all();  foreach($users as $user) {     // Do something here }

 

الاستعلام أعلاه مسؤول عن استرداد 200000 حقل بيانات. لكن ، تخيل أنه عند معالجة كل مستخدم ، فإنك تستخدم فقط الحقول id و first_name و last_name. لذلك ، هذا يعني أنه من بين الحقول العشرين التي قمت باستردادها ، هناك 17 حقلاً منها أكثر أو أقل زائدة عن الحاجة لهذا الجزء المحدد من التعليمات البرمجية.

لذا ما يمكننا فعله هو تحديد الحقول التي يتم إرجاعها في الاستعلام صراحةً. في هذه الحالة ، قد يبدو الرمز الخاص بك بالشكل التالي:

$users = User::select([‘id’, ‘first_name’, ‘last_name’])->get();  foreach($users as $user) {     // Do something here } 

 

باستخدام هذا ، سنقلل عدد الحقول التي يتم إرجاعها في الاستعلام من 200000 إلى 30000. على الرغم من أن هذا لن يكون له تأثير كبير على IO في تحميل قاعدة البيانات ، إلا أنه سيقلل حركة مرور الشبكة بين التطبيق وقاعدة البيانات. هذا بسبب وجود (على الأرجح) بيانات أقل لإجراء تسلسل ، وإرسال ، ثم deserialiise مما لو حاولت جلب جميع الحقول المتاحة.

يساعد هذا في تسريع موقع Laravel الخاص بك عن طريق تقليل حركة مرور الشبكة وكمية البيانات التي يجب معالجتها. يرجى ملاحظة أنه في المثال أعلاه قد لا تفعل هذا مطلقًا ، وربما ستستخدم المقاطع أو ترقيم الصفحات حسب الموقف.

هذا المثال هو فقط لإظهار حل ممكن وسهل التنفيذ. قد لا يمنحك هذا الحل الكثير من التحسينات على موقع أو تطبيق أصغر. ومع ذلك ، فهو شيء يمكن أن يساعد بالتأكيد في تقليل أوقات التحميل في التطبيقات حيث يعد الأداء مطلبًا بالغ الأهمية.

قد ترى أيضًا تحسينًا أفضل إذا قمت بالاستعلام عن جدول يحتوي على الحقول BLOB أو TEXT. يمكن أن تحتوي هذه الحقول على كمية كبيرة من البيانات وبالتالي يمكن أن تزيد من وقت الاستعلام. لذلك ، إذا كان جدول النموذج الخاص بك يحتوي على أحد هذه الحقول ، فقم بتحديد الحقول التي تحتاجها في البحث بشكل صريح لتقليل وقت التحميل.

2. استخدم eager loading قدر الإمكان

من المهم استخدام eager loading عند جلب أي نموذج من قاعدة البيانات ثم إجراء أي نوع من المعالجة على علاقات النموذج. eager loading استخدام Laravel بسيط جدًا ويريحك بشكل أساسي من وجود مشكلة N + 1 في بياناتك.

سبب هذه المشكلة هو إنشاء استعلامات N + 1 في قاعدة البيانات ، حيث يكون N هو عدد العناصر التي سيتم جلبها من قاعدة البيانات. لتوضيح ذلك بشكل أفضل ، دعنا نلقي نظرة على المثال التالي.

تخيل أن لديك نموذجين (التعليقات والمؤلف) بعلاقة رأس برأس بينهما. تخيل الآن أن لديك 100 تعليق وتريد استعراض كل تعليق واسترجاع اسم المؤلف. بدون eager loading ، قد يبدو الرمز الخاص بك كما يلي:

$comments = Comment::all();  foreach ($comments as $comment ) {     print_r($comment->author->name); } 

 

ينتج عن الكود أعلاه 101 استفسارًا من قاعدة البيانات! الاستعلام الأول هو جلب جميع التعليقات. ينتج عن تلقي اسم المؤلف في كل تكرار للحلقة مائة سؤال آخر. من الواضح أن هذا يمكن أن يسبب مشاكل في الأداء ويبطئ تطبيقك. لذا ، كيف يمكننا تحسين هذا؟ باستخدام eager loading ، يمكننا تغيير الكود إلى:

$comments = Comment::with(‘authors’)->get();  foreach ($comments as $comment ) {     print_r($comment->author->name); } 

 

كما ترى ، يبدو هذا الرمز مطابقًا تقريبًا للرمز السابق ولا يزال قابلاً للقراءة. بإضافة العبارة :: with (‘authors’) يتم جلب التعليقات مع المؤلف. لذلك ، هذا يعني أننا سنقلل الاستعلام من 101 إلى 2!

تسريع مواقع Laravel

3. تخلص من أي عبوات غير ضرورية أو غير مرغوب فيها

افتح ملف composer.json الخاص بك وتحقق من كل من التبعيات الخاصة به. لكل تبعية ، اسأل نفسك “هل أنا حقًا بحاجة إلى هذه الحزمة؟” ستكون معظم إجابتك نعم ، لكنها قد لا تكون كذلك بالنسبة للبعض.

في كل مرة تقوم فيها بإضافة مكتبة Composer جديدة إلى مشروعك ، من المحتمل أنك تضيف تعليمة برمجية قد تعمل دون داع. تتضمن حزم Laravel عادةً مزودي الخدمة الذين يعملون عند كل طلب يسجلون الخدمات وينفذون الكود.

لذلك ، لنفترض أنه إذا أضفت 20 حزمة Laravel إلى تطبيقك ، فمن المحتمل أن يكون هذا على الأقل 20 فئة سيتم تنفيذها لكل طلب. على الرغم من أن هذا لن يكون له تأثير كبير على أداء المواقع أو التطبيقات ذات أحجام المرور المنخفضة ، إلا أنه يمكنك بالتأكيد ملاحظة الاختلاف في التطبيقات الأكبر حجمًا.

الحل هو تحديد ما إذا كنت تحتاج حقًا إلى جميع الحزم. ربما تستخدم حزمة تقدم مجموعة واسعة من الميزات ، لكنك في الواقع تستخدم ميزة صغيرة واحدة فقط. اسأل نفسك “هل يمكنني كتابة هذا الرمز بنفسي وإزالة هذه الحزمة بأكملها”؟ بالطبع ، بسبب ضيق الوقت ، ليس من الممكن دائمًا كتابة التعليمات البرمجية لأنه يتعين عليك كتابتها واختبارها ثم الحفاظ عليها.

4. php artisan

يأتي Laravel بالعديد من طرق التخزين. يمكن أن تزيد هذه الطرق من سرعة موقع الويب أو التطبيق الخاص بك أثناء تنشيطه. نظرًا للطريقة التي يعمل بها Laravel ، فإنه يوزع ملف التوجيه عند كل طلب يقدمه.

يتضمن ذلك قراءة الملف وتحليل محتوياته ثم تخزينه بطريقة يمكن لبرنامجك استخدامها وفهمها. لذلك ، يوفر Laravel أمرًا يمكنك استخدامه لإنشاء ملف توجيه واحد يمكن تحليله بشكل أسرع:

php artisan route:cache 

 

يرجى ملاحظة أنه إذا استخدمت هذا الأمر وقمت بتغيير مساراتك ، فيجب عليك تشغيل الكود التالي:

php artisan route:clear 

من خلال القيام بذلك ، سيتم حذف ملف المسارات المخزنة مؤقتًا بحيث يمكن تسجيل مساراتك الجديدة. إذا لم يكن لديك بالفعل ، فقد يكون من المفيد إضافة هذين الأمرين إلى البرنامج النصي الخاص بك.

5. استخدم أحدث إصدار من PHP

يتحسن الأداء والسرعة مع كل إصدار جديد من PHP يتم إصداره. Kinsta تست های زیادی را في ندین نسخه PHP و پلتفرمهی مختلف (به عنوانه مثال – Laravel ، WordPress ، Drupao ، J دکتفرمیایک

قد يكون تنفيذ هذه النصيحة الخاصة أكثر صعوبة قليلاً في التنفيذ من تلك المذكورة أعلاه لأنك ستحتاج إلى التحقق من الكود الخاص بك للتأكد من أنه يمكنك التحديث بأمان إلى أحدث إصدار من PHP. كملاحظة جانبية ، قد يمنحك امتلاك مجموعة اختبار آلية الثقة في القيام بهذه الترقية!

تسريع مواقع Laravel

6. استخدام قوائم الانتظار

قد يستغرق تنفيذ هذه النصيحة وقتًا أطول قليلاً من تنفيذ النصائح الأخرى المذكورة أعلاه لأن النصائح السابقة تعتمد على الكود. ومع ذلك ، ربما تكون هذه النصيحة من أكثر النصائح فائدة من حيث تجربة المستخدم ، ومن الطرق التي يمكنك بها تقليل وقت الأداء هي استخدام قوائم انتظار Laravel.

إذا تم تشغيل التعليمات البرمجية الموجودة في وحدة التحكم أو الفئات بناءً على طلب ليس مطلوبًا على وجه التحديد لاستجابة متصفح الويب ، فيمكننا عادةً وضعها في قائمة الانتظار. لتسهيل الفهم ، تحقق من هذا المثال:

class ContactController extends Controller {     /**      * Store a new podcast.      *      * @param  Request  $request      * @return JsonResponse      */     public function store(ContactFormRequest $request)     {         $request->storeContactFormDetails();         Mail::to('mail@ashallendesign.co.uk')->send(new ContactFormSubmission);          return response()->json(['success' => true]);     } } 

في الكود أعلاه ، عندما يتم استدعاء الأسلوب store ، فإنه يحفظ تفاصيل نموذج الاتصال في قاعدة البيانات ، ويرسل بريدًا إلكترونيًا إلى عنوان لإخطارهم بتقديم نموذج الاتصال الجديد ، وإرجاع استجابة JSON. تكمن مشكلة هذا الرمز في أنه يتعين على المستخدم انتظار إرسال البريد الإلكتروني للحصول على رده في متصفح الويب. على الرغم من أن هذا قد يستغرق بضع ثوانٍ فقط ، إلا أنه من المحتمل أن يتسبب في مغادرة الزوار.

لاستخدام نظام queue يمكننا تحديث الكود كما يلي:

class ContactController extends Controller {     /**      * Store a new podcast.      *      * @param  Request  $request      * @return JsonResponse      */     public function store(ContactFormRequest $request)     {         $request->storeContactFormDetails();          dispatch(function () {              Mail::to('mail@ashallendesign.co.uk')->send(new ContactFormSubmission);          })->afterResponse();          return response()->json(['success' => true]);     } } 

يخزن الكود أعلاه في الأسلوب store الآن تفاصيل نموذج الاتصال في قاعدة البيانات ، ويضع البريد في قائمة انتظار للإرسال ثم يُرجع الاستجابة. بمجرد إرسال الرد إلى متصفح الويب الخاص بالمستخدم ، تتم إضافة البريد الإلكتروني إلى قائمة الانتظار حتى يمكن معالجته. من خلال القيام بذلك ، فهذا يعني أننا لسنا بحاجة إلى انتظار إرسال البريد الإلكتروني قبل إعادة الرد.

أخيرا نتمنى أن يكون درس 6 طرق سريعة وسهلة لزيادة سرعة مواقع Laravel قد أفادكم

يسعدنا إثراء الموضوع من خلال تعليقاتكم و استفساراتكم المفيدة

مع تحيات موقع hdegy

No Comments

تعليق على
There are no comments yet, but you can be the one to add the very first comment!

التعليقات