"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > نصائح لتحسين الكود وتحسين الأداء في Laravel

نصائح لتحسين الكود وتحسين الأداء في Laravel

تم النشر بتاريخ 2024-11-02
تصفح:122

Tips for Code Optimization and Performance Improvement in Laravel

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

1. التحميل المتحمس مقابل التحميل البطيء

المشكلة: بشكل افتراضي، يستخدم 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();

الفكرة الأساسية: استخدم دائمًا التحميل المتلهف عندما تعلم أنك ستحتاج إلى نماذج ذات صلة.


2. استخدم التخزين المؤقت للاستعلامات باهظة الثمن

المشكلة: يمكن أن يؤدي جلب نفس البيانات بشكل متكرر (مثل قوائم المستخدمين أو الإعدادات أو كتالوجات المنتجات) إلى حدوث اختناقات في الأداء.

التحسين: تخزين نتائج الاستعلامات والحسابات باهظة الثمن مؤقتًا لتقليل أوقات التحميل واستعلامات قاعدة البيانات.

قبل (بدون تخزين مؤقت):

// 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) لتقليل استعلامات قاعدة البيانات غير الضرورية.


3. تحسين استعلامات قاعدة البيانات

المشكلة: يمكن أن تؤدي الاستعلامات غير الفعالة ونقص الفهرسة المناسبة إلى تقليل الأداء بشكل كبير.

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

قبل:

// 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();

الفكرة الرئيسية: حدد دائمًا الأعمدة التي تحتاجها وتأكد من أن قاعدة بياناتك تحتوي على فهرسة مناسبة للحقول التي يتم الاستعلام عنها بشكل متكرر.


4. تقليل استخدام البرامج الوسيطة

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

التحسين: تطبيق البرامج الوسيطة بشكل انتقائي فقط عند الحاجة.

قبل (الاستخدام العالمي للبرمجيات الوسيطة):

// 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');

الفكرة الأساسية: يجب تطبيق البرامج الوسيطة فقط عند الضرورة لتجنب نتائج الأداء.


5. تحسين ترقيم الصفحات لمجموعات البيانات الكبيرة

المشكلة: يمكن أن يؤدي جلب مجموعات كبيرة من البيانات وعرضها مرة واحدة إلى زيادة استخدام الذاكرة والاستجابات البطيئة.

التحسين: استخدم ترقيم الصفحات للحد من عدد السجلات التي يتم جلبها لكل طلب.

قبل (جلب كافة السجلات):

// Fetching all users (potentially too much data)
$users = User::all();

بعد (باستخدام ترقيم الصفحات):

// Fetching users in chunks of 10 records per page
$users = User::paginate(10);

الفكرة الرئيسية: قم بترقيم مجموعات البيانات الكبيرة لتجنب إرباك قاعدة البيانات وتقليل استخدام الذاكرة.


6. قائمة الانتظار للمهام طويلة الأمد

المشكلة: تؤدي المهام طويلة الأمد مثل إرسال رسائل البريد الإلكتروني أو إنشاء التقارير إلى إبطاء أوقات الاستجابة للطلبات.

التحسين: استخدم قوائم الانتظار لتفريغ المهام والتعامل معها بشكل غير متزامن في الخلفية.

قبل (مهمة متزامنة):

// 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));

الفكرة الرئيسية: استخدم قوائم الانتظار للمهام غير الحساسة للوقت لتحسين أوقات الاستجابة.


7. استخدم التخزين المؤقت للتوجيه والتكوين والعرض

المشكلة: عدم التخزين المؤقت للمسارات أو التكوينات أو طرق العرض يمكن أن يؤدي إلى أداء أبطأ، خاصة في بيئات الإنتاج.

التحسين: مسارات ذاكرة التخزين المؤقت وملفات التكوين وطرق العرض لأداء أسرع في الإنتاج.

أوامر المثال:

# Cache routes
php artisan route:cache

# Cache configuration files
php artisan config:cache

# Cache compiled views
php artisan view:cache

الفكرة الرئيسية: قم دائمًا بتخزين التكوينات والمسارات وطرق العرض الخاصة بك في الإنتاج للحصول على أداء أسرع للتطبيق.


8. استخدم Compact()‎ لتنظيف التعليمات البرمجية

المشكلة: يمكن أن يؤدي تمرير متغيرات متعددة يدويًا إلى طرق العرض إلى تعليمات برمجية مطولة ويصعب إدارتها.

التحسين: استخدم compact() لتبسيط عملية تمرير متغيرات متعددة إلى طريقة عرض.

قبل:

return view('profile', [
    'user' => $user,
    'posts' => $posts,
    'comments' => $comments,
]);

بعد:

return view('profile', compact('user', 'posts', 'comments'));

الفكرة الرئيسية: استخدام Compact() يجعل التعليمات البرمجية الخاصة بك أكثر إيجازًا وأسهل في الصيانة.


9. استخدم Redis أو Memcached لتخزين الجلسة وذاكرة التخزين المؤقت

المشكلة: يؤدي تخزين الجلسات وبيانات ذاكرة التخزين المؤقت في نظام الملفات إلى إبطاء تطبيقك في البيئات ذات حركة المرور العالية.

التحسين: استخدم حلول التخزين السريعة في الذاكرة مثل Redis أو Memcached للحصول على أداء أفضل.

مثال لتكوين Redis:

// In config/cache.php
'default' => env('CACHE_DRIVER', 'redis'),

// In config/session.php
'driver' => env('SESSION_DRIVER', 'redis'),

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


10. تجنب استخدام الاستعلامات الأولية إلا إذا كان ذلك ضروريًا

المشكلة: استخدام استعلامات SQL الأولية يمكن أن يجعل التعليمات البرمجية الخاصة بك أقل قابلية للقراءة ويصعب صيانتها.

التحسين: استخدم Laravel's Eloquent ORM أو Query Builder كلما أمكن ذلك، ولكن إذا كانت الاستعلامات الأولية ضرورية، فتأكد من تحسينها.

قبل (الاستعلام الأولي):

// Using raw query directly
$users = DB::select('SELECT * FROM users WHERE status = ?', ['active']);

بعد (باستخدام Eloquent أو Query Builder):

// Using Eloquent ORM for better readability and maintainability
$users = User::where('status', 'active')->get();

الخلاصة الرئيسية: فضل Eloquent ORM على الاستعلامات الأولية ما لم يكن ذلك ضروريًا للغاية.


11. استخدم مستويات التسجيل الفعالة

المشكلة: تسجيل كل شيء في جميع الأوقات يمكن أن يؤدي إلى تدهور الأداء وملء مساحة التخزين الخاصة بك.

التحسين: قم بتعيين مستويات السجل المناسبة في الإنتاج لالتقاط ما هو ضروري فقط (مثل الأخطاء والرسائل الهامة).

مثال:

// In .env file, set log level to 'error' in production
LOG_LEVEL=error

الفكرة الأساسية: قم بتسجيل ما هو ضروري في الإنتاج فقط لتجنب الاستخدام غير الضروري للتخزين ونتائج الأداء.


الأفكار النهائية

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

أخبرني برأيك، أو لا تتردد في مشاركة النصائح والحيل الخاصة بك لتحسين تطبيقات Laravel!

ترميز سعيد! ?

بيان الافراج تم إعادة إنتاج هذه المقالة على: https://dev.to/harish_kumars_9c58df6fcc/10-tips-for-code-optimization-and-performance-improvement-in-laravel-1e99?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ Study_golang@163 .com لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3