إنتقل إلى المحتوى الرئيسي

تحسين الأداء

نصائح لتسريع FeedbackPulse SaaS مع نمو حجم استخدامك.


مكاسب سريعة

1. تخزين الإعداد مؤقتًا

php artisan config:cache    # تخزين ملفات .env والإعداد مؤقتًا
php artisan route:cache # تخزين المسارات مؤقتًا
php artisan view:cache # تجميع مسبق لـ Blade views

نفّذ هذه الأوامر بعد كل نشر. للمسح استخدم php artisan optimize:clear.

2. استخدام Redis للتخزين المؤقت والجلسات

Redis أسرع بكثير من التخزين المؤقت للملفات أو قاعدة البيانات:

sudo apt install redis-server php8.4-redis
CACHE_STORE=redis
SESSION_DRIVER=redis
QUEUE_CONNECTION=redis

3. استخدام قائمة انتظار قاعدة البيانات (الحد الأدنى)

QUEUE_CONNECTION=database

شغّل عامل قائمة انتظار عبر Supervisor لمعالجة المهام في الخلفية بدلاً من المعالجة الفورية.

4. تفعيل OPcache

; /etc/php/8.4/fpm/conf.d/10-opcache.ini
opcache.enable=1
opcache.memory_consumption=256
opcache.max_accelerated_files=20000
opcache.validate_timestamps=0 ; Disable in production

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

إضافة الفهارس

يأتي FeedbackPulse بالفهارس المناسبة، ولكن إذا كنت تُشغّل استعلامات كبيرة، تحقق من:

-- التحقق من الاستعلامات البطيئة
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 2;

ضبط MySQL

innodb_buffer_pool_size = 1G       # 50-70% من ذاكرة الوصول العشوائي المتاحة
innodb_log_file_size = 256M
max_connections = 200
innodb_flush_log_at_trx_commit = 2 # Slight durability trade-off for speed

تحسين خادم الويب

Nginx: تفعيل Gzip

gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml;
gzip_min_length 256;
gzip_vary on;

تخزين الملفات الثابتة مؤقتًا

location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2)$ {
expires 30d;
add_header Cache-Control "public, immutable";
}

ضبط PHP-FPM

pm = dynamic
pm.max_children = 20 # اضبط حسب ذاكرة الوصول العشوائي
pm.start_servers = 5
pm.min_spare_servers = 3
pm.max_spare_servers = 10
pm.max_requests = 500 # Prevent memory leaks

توصيات التوسع

عدد المستأجرينالإعداد الموصى به
1-50VPS واحد، تخزين مؤقت للملفات، قائمة انتظار متزامنة
50-200VPS واحد، تخزين Redis مؤقت، قائمة انتظار قاعدة بيانات مع Supervisor
200-1000خادم مخصص، تخزين Redis مؤقت + قائمة انتظار، ضبط MySQL
1000+موازن تحميل، خادم قاعدة بيانات منفصل، مجموعة Redis، عمّال قوائم انتظار متعددون

المراقبة

# التحقق من حالة PHP-FPM
sudo systemctl status php8.4-fpm

# التحقق من قائمة عمليات MySQL
mysqladmin processlist

# التحقق من مساحة القرص
df -h

# التحقق من استخدام الذاكرة
free -m

# التحقق من سجلات Laravel للأخطاء
tail -f storage/logs/laravel.log

الخطوات التالية