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

تحسين الأداء

نظرة عامة

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

تشخيص الأداء

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

المؤشرالحد الطبيعيتحذيرخطر
وقت استجابة 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
  • مراقبة الاتصالات
  • فحص استخدام الذاكرة
  • مراجعة سجلات الأخطاء
  • اختبار أوقات الاستجابة