تحسين الأداء
نظرة عامة
يوضح هذا الدليل كيفية تشخيص مشاكل الأداء وتحسين سرعة النظام.
تشخيص الأداء
مؤشرات الأداء الرئيسية
| المؤشر | الحد الطبيعي | تحذير | خطر |
|---|---|---|---|
| وقت استجابة API | < 200ms | 200-500ms | > 500ms |
| استعلام DB | < 100ms | 100-300ms | > 300ms |
| استخدام CPU | < 70% | 70-85% | > 85% |
| استخدام الذاكرة | < 80% | 80-90% | > 90% |
أدوات المراقبة
# مراقبة حاويات Docker
docker stats
# استخدام الموارد
htop
# اتصالات الشبكة
netstat -tulpn
الاستعلامات البطيئة
تحديد الاستعلامات البطيئة
-- تمكين تسجيل الاستعلامات البطيئة
ALTER SYSTEM SET log_min_duration_statement = 1000; -- 1 ثانية
-- الاستعلامات النشطة طويلة
SELECT
pid,
now() - pg_stat_activity.query_start AS duration,
query,
state
FROM pg_stat_activity
WHERE state != 'idle'
AND (now() - pg_stat_activity.query_start) > interval '5 seconds'
ORDER BY duration DESC;
تحليل الاستعلامات
-- تحليل خطة التنفيذ
EXPLAIN ANALYZE SELECT * FROM bookings
WHERE trip_id = 'xxx'
AND status = 'confirmed';
الفهارس المفقودة
-- اقتراحات الفهارس
SELECT
schemaname,
tablename,
indexrelname,
idx_scan,
idx_tup_read,
idx_tup_fetch
FROM pg_stat_user_indexes
WHERE idx_scan = 0
ORDER BY pg_relation_size(indexrelname::regclass) DESC;
-- إنشاء فهرس
CREATE INDEX CONCURRENTLY idx_bookings_trip_status
ON bookings(trip_id, status);
تحسين قاعدة البيانات
تنظيف الجداول
-- VACUUM للجداول الكبيرة
VACUUM ANALYZE bookings;
VACUUM ANALYZE trips;
-- إحصائيات الجداول
SELECT
relname,
n_live_tup,
n_dead_tup,
last_vacuum,
last_analyze
FROM pg_stat_user_tables
ORDER BY n_dead_tup DESC;
اتصالات قاعدة البيانات
-- عدد الاتصالات لكل تطبيق
SELECT
application_name,
count(*)
FROM pg_stat_activity
GROUP BY application_name
ORDER BY count DESC;
-- الحد الأقصى للاتصالات
SHOW max_connections;
تحسين التطبيقات
Next.js
- تفعيل الكاش:
// في route handlers
export const revalidate = 60; // كاش لمدة دقيقة
- تحسين الصور:
import Image from "next/image";
// استخدام next/image للتحسين التلقائي
- Code Splitting:
import dynamic from 'next/dynamic';
const HeavyComponent = dynamic(() => import('./heavy'), {
loading: () => <Skeleton />
});
Flutter
- كاش البيانات:
// استخدام Hive للكاش المحلي
await Hive.box('trips').put(tripId, tripData);
- تحسين الصور:
// استخدام cached_network_image
CachedNetworkImage(imageUrl: url);
- Lazy Loading:
ListView.builder(
itemBuilder: (context, index) => TripCard(trip: trips[index]),
);
تحسين API
Rate Limiting
// تكوين Rate Limit
const rateLimit = {
windowMs: 60 * 1000, // دقيقة
max: 100, // 100 طلب
};
استعلامات محسنة
-- بدلاً من N+1 queries
-- استخدام JOIN
SELECT b.*, t.*, c.*
FROM bookings b
JOIN trips t ON t.id = b.trip_id
JOIN cities c ON c.id = t.origin_city_id
WHERE b.passenger_id = 'xxx';
التصفية الجانب الخادم
// تصفية على الخادم
const trips = await supabase
.from("trips")
.select("id, departure_time, price")
.eq("status", "scheduled")
.gte("departure_time", today)
.limit(20);
أدوات التحليل
Web Vitals
// في Next.js
export function reportWebVitals(metric) {
console.log(metric);
// إرسال لنظام المراقبة
}
Database Insights
-- حجم الجداول
SELECT
relname as table,
pg_size_pretty(pg_total_relation_size(relid))
FROM pg_catalog.pg_statio_user_tables
ORDER BY pg_total_relation_size(relid) DESC
LIMIT 10;
قائمة التحقق السريع
- فحص الاستعلامات البطيئة
- مراجعة الفهارس
- تنظيف VACUUM
- مراقبة الاتصالات
- فحص استخدام الذاكرة
- مراجعة سجلات الأخطاء
- اختبار أوقات الاستجابة