Laravel هو إطار عمل قوي وأنيق، ولكن مع نمو تطبيقك، يصبح تحسين أدائه أمرًا ضروريًا. فيما يلي دليل شامل يحتوي على نصائح وأمثلة لمساعدتك على تحسين الأداء وتحسين تطبيق Laravel الخاص بك.
المشكلة: بشكل افتراضي، يستخدم Laravel التحميل البطيء، مما قد يؤدي إلى "مشكلة استعلام N 1،" حيث يتم إطلاق استعلامات قاعدة بيانات متعددة دون داع.
التحسين: استخدم التحميل السريع لتحميل البيانات ذات الصلة في استعلام واحد، مما يؤدي إلى تحسين الأداء بشكل ملحوظ عند العمل مع العلاقات.
// This runs multiple queries (N 1 Problem) $users = User::all(); foreach ($users as $user) { $posts = $user->posts; }
// This loads users and their posts in just two queries $users = User::with('posts')->get();
الفكرة الأساسية: استخدم دائمًا التحميل المتلهف عندما تعلم أنك ستحتاج إلى نماذج ذات صلة.
المشكلة: يمكن أن يؤدي جلب نفس البيانات بشكل متكرر (مثل قوائم المستخدمين أو الإعدادات أو كتالوجات المنتجات) إلى حدوث اختناقات في الأداء.
التحسين: تخزين نتائج الاستعلامات والحسابات باهظة الثمن مؤقتًا لتقليل أوقات التحميل واستعلامات قاعدة البيانات.
// Querying the database every time $users = User::all();
// Caching the user data for 60 minutes $users = Cache::remember('users', 60, function () { return User::all(); });
الفكرة الرئيسية: استخدم نظام التخزين المؤقت الخاص بـ Laravel (Redis، Memcached) لتقليل استعلامات قاعدة البيانات غير الضرورية.
المشكلة: يمكن أن تؤدي الاستعلامات غير الفعالة ونقص الفهرسة المناسبة إلى تقليل الأداء بشكل كبير.
التحسين: أضف دائمًا الفهارس إلى الأعمدة التي يتم الاستعلام عنها بشكل متكرر، واستخدم البيانات المطلوبة فقط.
// Fetching all columns (bad practice) $orders = Order::all();
// Only fetching necessary columns and applying conditions $orders = Order::select('id', 'status', 'created_at') ->where('status', 'shipped') ->get();
الفكرة الرئيسية: حدد دائمًا الأعمدة التي تحتاجها وتأكد من أن قاعدة بياناتك تحتوي على فهرسة مناسبة للحقول التي يتم الاستعلام عنها بشكل متكرر.
المشكلة: يمكن أن يؤدي تطبيق البرامج الوسيطة عالميًا على كل مسار إلى إضافة حمل غير ضروري.
التحسين: تطبيق البرامج الوسيطة بشكل انتقائي فقط عند الحاجة.
// Applying middleware to all routes Route::middleware('logRouteAccess')->group(function () { Route::get('/profile', 'UserProfileController@show'); Route::get('/settings', 'UserSettingsController@index'); });
// Apply middleware only to specific routes Route::get('/profile', 'UserProfileController@show')->middleware('logRouteAccess');
الفكرة الأساسية: يجب تطبيق البرامج الوسيطة فقط عند الضرورة لتجنب نتائج الأداء.
المشكلة: يمكن أن يؤدي جلب مجموعات كبيرة من البيانات وعرضها مرة واحدة إلى زيادة استخدام الذاكرة والاستجابات البطيئة.
التحسين: استخدم ترقيم الصفحات للحد من عدد السجلات التي يتم جلبها لكل طلب.
// Fetching all users (potentially too much data) $users = User::all();
// Fetching users in chunks of 10 records per page $users = User::paginate(10);
الفكرة الرئيسية: قم بترقيم مجموعات البيانات الكبيرة لتجنب إرباك قاعدة البيانات وتقليل استخدام الذاكرة.
المشكلة: تؤدي المهام طويلة الأمد مثل إرسال رسائل البريد الإلكتروني أو إنشاء التقارير إلى إبطاء أوقات الاستجابة للطلبات.
التحسين: استخدم قوائم الانتظار لتفريغ المهام والتعامل معها بشكل غير متزامن في الخلفية.
// Sending email directly (slows down response) Mail::to($user->email)->send(new OrderShipped($order));
// Queuing the email for background processing Mail::to($user->email)->queue(new OrderShipped($order));
الفكرة الرئيسية: استخدم قوائم الانتظار للمهام غير الحساسة للوقت لتحسين أوقات الاستجابة.
المشكلة: عدم التخزين المؤقت للمسارات أو التكوينات أو طرق العرض يمكن أن يؤدي إلى أداء أبطأ، خاصة في بيئات الإنتاج.
التحسين: مسارات ذاكرة التخزين المؤقت وملفات التكوين وطرق العرض لأداء أسرع في الإنتاج.
# Cache routes php artisan route:cache # Cache configuration files php artisan config:cache # Cache compiled views php artisan view:cache
الفكرة الرئيسية: قم دائمًا بتخزين التكوينات والمسارات وطرق العرض الخاصة بك في الإنتاج للحصول على أداء أسرع للتطبيق.
المشكلة: يمكن أن يؤدي تمرير متغيرات متعددة يدويًا إلى طرق العرض إلى تعليمات برمجية مطولة ويصعب إدارتها.
التحسين: استخدم compact() لتبسيط عملية تمرير متغيرات متعددة إلى طريقة عرض.
return view('profile', [ 'user' => $user, 'posts' => $posts, 'comments' => $comments, ]);
return view('profile', compact('user', 'posts', 'comments'));
الفكرة الرئيسية: استخدام Compact() يجعل التعليمات البرمجية الخاصة بك أكثر إيجازًا وأسهل في الصيانة.
المشكلة: يؤدي تخزين الجلسات وبيانات ذاكرة التخزين المؤقت في نظام الملفات إلى إبطاء تطبيقك في البيئات ذات حركة المرور العالية.
التحسين: استخدم حلول التخزين السريعة في الذاكرة مثل Redis أو Memcached للحصول على أداء أفضل.
// In config/cache.php 'default' => env('CACHE_DRIVER', 'redis'), // In config/session.php 'driver' => env('SESSION_DRIVER', 'redis'),
الفكرة الأساسية: تجنب استخدام برنامج تشغيل الملفات للجلسات والتخزين المؤقت في الإنتاج، خاصة في التطبيقات ذات حركة المرور العالية.
المشكلة: استخدام استعلامات SQL الأولية يمكن أن يجعل التعليمات البرمجية الخاصة بك أقل قابلية للقراءة ويصعب صيانتها.
التحسين: استخدم Laravel's Eloquent ORM أو Query Builder كلما أمكن ذلك، ولكن إذا كانت الاستعلامات الأولية ضرورية، فتأكد من تحسينها.
// Using raw query directly $users = DB::select('SELECT * FROM users WHERE status = ?', ['active']);
// Using Eloquent ORM for better readability and maintainability $users = User::where('status', 'active')->get();
الخلاصة الرئيسية: فضل Eloquent ORM على الاستعلامات الأولية ما لم يكن ذلك ضروريًا للغاية.
المشكلة: تسجيل كل شيء في جميع الأوقات يمكن أن يؤدي إلى تدهور الأداء وملء مساحة التخزين الخاصة بك.
التحسين: قم بتعيين مستويات السجل المناسبة في الإنتاج لالتقاط ما هو ضروري فقط (مثل الأخطاء والرسائل الهامة).
// In .env file, set log level to 'error' in production LOG_LEVEL=error
الفكرة الأساسية: قم بتسجيل ما هو ضروري في الإنتاج فقط لتجنب الاستخدام غير الضروري للتخزين ونتائج الأداء.
يعد تحسين أداء Laravel أمرًا بالغ الأهمية للتطبيقات القابلة للتطوير والفعالة. من خلال تنفيذ أفضل الممارسات هذه، يمكنك التأكد من أن تطبيق Laravel الخاص بك يعمل بشكل أسرع، ويتعامل مع المزيد من حركة المرور، ويقدم تجربة أفضل للمستخدم.
أخبرني برأيك، أو لا تتردد في مشاركة النصائح والحيل الخاصة بك لتحسين تطبيقات Laravel!
ترميز سعيد! ?
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3