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

تحسين الأداء

نظرة عامة​

يوضح هذا الدليل كيفية تشخيص مشاكل الأداء وتحسين سرعة النظام.

تشخيص الأداء​

مؤشرات الأداء الرئيسية​

المؤشرالحد الطبيعيتحذيرخطر
وقت استجابة API< 200ms200-500ms> 500ms
استعلام DB< 100ms100-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​

  1. تفعيل الكاش:
// في route handlers
export const revalidate = 60; // كاش لمدة دقيقة
  1. تحسين الصور:
import Image from "next/image";
// استخدام next/image للتحسين التلقائي
  1. Code Splitting:
import dynamic from 'next/dynamic';
const HeavyComponent = dynamic(() => import('./heavy'), {
loading: () => <Skeleton />
});

Flutter​

  1. كاش البيانات:
// استخدام Hive للكاش المحلي
await Hive.box('trips').put(tripId, tripData);
  1. تحسين الصور:
// استخدام cached_network_image
CachedNetworkImage(imageUrl: url);
  1. 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
  • مراقبة الاتصالات
  • فحص استخدام الذاكرة
  • مراجعة سجلات الأخطاء
  • اختبار أوقات الاستجابة