Files
intaleq/docs/04_features/BATTERY_PERFORMANCE_AR.md
T
Hamza-AyedandClaude Opus 5 0aab85c732 refactor: إعادة تسمية التطبيقات الأربعة siro_* → intaleq_*
المجلدات وأسماء حزم dart واستيراداتها:
  siro_rider → intaleq_rider    siro_driver  → intaleq_driver
  siro_admin → intaleq_admin    siro_service → intaleq_service

شمل ذلك `name:` في كل pubspec وكل `package:siro_*` في الاستيرادات
(115 ملفاً في rider وحده)، وإشارات أسماء المجلدات في docs/ وتعليق في
backend/Admin/notifications/broadcast.php. لم تبقَ إشارة واحدة (تحقّقت).

+ ضُمّت حزم get و get_storage داخل intaleq_driver/packages/ وحُوّلت
مساراتها الثلاثة من `../../Intaleq/packages/*` إلى `./packages/*`. كانت
تُحل عرضاً إلى مجلد App/Intaleq القديم المجاور — تبعية خارج المستودع
تنكسر بأول نقل. لم يبقَ في أي تطبيق تبعية مسار خارج الشجرة.

⚠️ لم تُمسّ بعد: هويات المتاجر (applicationId · PRODUCT_BUNDLE_IDENTIFIER ·
shorebird app_id) ولا الألوان ولا النصوص المرئية ولا النطاقات — كل منها
كوميت منفصل، والهويات تحتاج قرار المالك.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-27 16:10:58 +03:00

16 KiB

تحليل استهلاك البطارية وأداء التطبيق — سيرو

Battery & Performance Analysis — Siro Platform

النسخة: 1.0 | تاريخ: يوليو 2026 | التصنيف: داخلي


📋 فهرس المحتويات

  1. ملخص الأداء العام
  2. تحليل استهلاك البطارية بالتفصيل
  3. نظام GPS المتكيف
  4. تحسين الذاكرة والأداء
  5. تحسين الشبكة والاتصالات
  6. تصنيف فئات الأجهزة
  7. الخدمات الخلفية (Background Services)
  8. نقاط الضعف والتوصيات
  9. خطة التحسين المقترحة

1. ملخص الأداء العام

التقييم الإجمالي: ⭐⭐⭐⭐☆ (8/10)

المجال التقييم ملاحظات
استهلاك البطارية (GPS) ⭐⭐⭐⭐☆ نظام متكيف جيد، يحتاج تحسينات
استهلاك البطارية (خلفية) ⭐⭐⭐⭐⭐ معماري ممتاز — لا GPS في الخلفية
سرعة التطبيق ⭐⭐⭐⭐☆ GetX سريع، لكن بدء التشغيل بطيء
استهلاك الذاكرة ⭐⭐⭐⭐☆ Lazy loading، Buffer limits
حجم التطبيق ⭐⭐⭐☆☆ كبير نسبياً (Flutter + حزم كثيرة)
الشبكة والاتصالات ⭐⭐⭐⭐⭐ Caching ممتاز، Socket ذكي
الخدمات الخلفية ⭐⭐⭐⭐⭐ Foreground Service محسن

2. تحليل استهلاك البطارية بالتفصيل

2.1 الحزم المستخدمة

الحزمة الاستخدام التأثير على البطارية
battery_plus: ^7.0.0 مراقبة مستوى البطارية 🟢 Minimal
wakelock_plus: إبقاء الشاشة قيد التشغيل 🟡 مشغل دائم — يحتاج تحسين
flutter_background_service: ^5.1.0 خدمة الخلفية 🟢 محسّن بشكل معماري
location: ^8.0.0 تتبع GPS 🟡 عالي لكن مع تحسينات
native_geofence: ^1.1.0 Geofencing 🟢 Hardware-level — ممتاز

2.2 أوضاع استهلاك الطاقة

الوضع الطبيعي (بطارية > 25%)

GPS Interval: 5 ثوانٍ
Distance Filter: 10 متر
Upload Batch: كل دقيقتين
Record Timer: كل 3 ثوانٍ
Heartbeat: كل 25 ثانية (يتخطى إذا GPS نشط)
WakeLock: مفعل

وضع توفير الطاقة (بطارية ≤ 20%)

GPS Interval: 10 ثوانٍ        ← توفير 50%
Distance Filter: 20 متر       ← توفير 50%
Upload Batch: كل 5 دقائق      ← توفير 60%
Record Timer: كل 10 ثوانٍ     ← توفير 70%
Heartbeat: كل 25 ثانية
WakeLock: مفعل (بدون تغيير)
يدخل تلقائياً عند 20%، يخرج عند 25%

2.3 تأثير كل تقنية على البطارية

التقنية الوضع الطبيعي توفير الطاقة التوفير
GPS Polling 5s 10s ~40% أقل استهلاك
Distance Filter 10m 20m ~30% أقل تحديثات
Upload Frequency 2min 5min ~60% أقل طلبات
Record Frequency 3s 10s ~70% أقل تسجيل
Heartbeat 25s 25s يتخطى إذا GPS نشط

3. نظام GPS المتكيف

3.1 خوارزمية التحكم بالموقع (LocationController)

  • 841 سطر — ملف التحكم الرئيسي بالموقع
  • Single Source of Truth: لا يوجد مصدر آخر للموقع في التطبيق
  • Background Service بدون GPS: قاعدة معمارية صارمة — الخدمة الخلفية تشغل Socket فقط

3.2 تسجيل المسار الذكي

// يُسجل فقط إذا:
// 1. تحرك أكثر من 10 أمتار AND سرعة > 0.5 م/ث
// 2. أو مر 60 ثانية بدون تسجيل (force record)
if ((moved && speed > 0.5) || timeForced) {
  _trackBuffer.add(point);
}

3.3 Batch Upload

Buffer: يخزن حتى 500 نقطة
Upload: كل 2-5 دقائق (حسب وضع الطاقة)
Batch Size: حتى 100 نقطة لكل طلب
SQLite: Flush كل 10 نقاط سلوكية

3.4 Heartbeat الذكي

// Heartbeat كل 25 ثانية، لكن:
// إذا GPS stream نشط → يتخطى Heartbeat بالكامل
if (_locSub != null) return;  // Skip if GPS stream is active

3.5 Socket Watchdog

// فحص الاتصال كل 3 ثوانٍ
// يعيد الاتصال فقط إذا انقطع
// يمنع إعادة اتصال متزامنة
if (!isSocketConnected && !_isInitializingSocket) {
  initSocket();
}

3.6 إدارة دورة حياة التطبيق

// عندما التطبيق في المقدمة → يوقف Background Service
// عندما التطبيق في الخلفية → يشغل Background Service
// iOS: لا يشغل Background Service أبداً

4. تحسين الذاكرة والأداء

4.1 GetX Lazy Loading

// Permanent (في الذاكرة دائماً):
Get.put(LocaleController());
Get.put(MapSocketController(), permanent: true);
Get.put(MapEngineController(), permanent: true);

// Lazy (ينشأ عند أول استخدام فقط):
Get.lazyPut(() => LoginController(), fenix: true);
Get.lazyPut(() => NotificationController(), fenix: true);
Get.lazyPut(() => VoiceCallController(), fenix: true);

4.2 Buffer Limits

Track Buffer: حد أقصى 500 نقطة (يحذف الأقدم)
Behavior Buffer: Flush إلى SQLite كل 10 نقاط
Error Log: Debounce دقيقة واحدة لنفس الخطأ
Image Upload: ضغط 70% + حد أقصى 1024x1024
Map Icons: تصغير إلى 120x120 في Isolate منفصل

4.3 Caching

البيانات مكان التخزين مدة الصلاحية
إحصائيات الأسبوع GetStorage 3 ساعات
مسار الرحلة (Cached Route) GetStorage حتى رحلة جديدة
قائمة الفيديوهات GetStorage غير محدد
قائمة الرحلات المتاحة GetStorage 5 ثوانٍ
Device Tier GetStorage 24 ساعة
الخرائط الأوفلاين SQLite 10km radius

4.4 Image Optimization Pipeline

// خطوة 1: تدوير الصورة تلقائياً (Auto-rotate)
// خطوة 2: قص المستند (Auto-crop)
// خطوة 3: ضغط إلى 70% جودة
// خطوة 4: تصغير إلى 1024x1024
// خطوة 5: رفع مع 3 محاولات + Exponential Backoff

5. تحسين الشبكة والاتصالات

5.1 SSL Pinning

  • جميع الاتصالات HTTPS مع SSL Pinning
  • يمنع هجمات Man-in-the-Middle
  • JWT مع Validate قبل كل طلب (30s buffer)

5.2 Connectivity Guard

// قبل كل طلب → تحقق من الاتصال
final connectivityResult = await Connectivity().checkConnectivity();
if (connectivityResult == ConnectivityResult.none) return;
// تأكيد الوصول للإنترنت
final hasInternet = await InternetConnectionChecker().hasConnection;

5.3 Socket Optimization

الخاصية Driver Socket Passenger Socket
Transport WebSocket only WebSocket only
Auto-connect Manual (disableAutoConnect) Manual
Reconnection Infinite 20 attempts
Reconnect delay Default 2s → max 10s
Connection timeout Default 20s

5.4 HTTP Optimization

Upload Retries: 3 محاولات
Backoff: 2s, 4s, 6s (exponential)
Timeout: 120 ثانية للرفع
401 Handling: Auto-refresh JWT + Retry

6. تصنيف فئات الأجهزة

6.1 Device Tier (intaleq_rider/lib/controller/home/device_tier.dart)

نظام تسجيل بناءً على:
- Android SDK version (الأقدم = أعلى نقاط = أضعف)
- عدد أنوية المعالج
- عدد ABIs المدعومة
- هل هو Emulator؟

التصنيف:
- Low: Score ≥ 6
- Mid: Score ≥ 3
- High: Score < 3
- Clobal (يحفظ لمدة 24 ساعة)

6.2 Device Performance (intaleq_rider/lib/controller/home/device_performance.dart)

نظام White-List للأجهزة عالية الأداء:
- Samsung: S21+ (SM-S), Fold/Flip (SM-F), Note 9+ (SM-N9), S10/S20 (SM-G9)
- Google: Pixel 6/7/8/9, Pixel Fold
- Huawei: P40, Mate 20/30/40
- OnePlus: 7/8/9/10/11, CPH prefix
- Xiaomi: RAM > 7.5GB
- Blacklist: MT65xx, MT6735, SC77xx (معالجات رخيصة)
- iOS: دائماً High-end

6.3 NearBy Drivers Performance (nearby_drivers_controller.dart)

// كشف الأداء المنخفض:
lowPerf = (sdk < 28) || (ram > 0 && ram < 3 * 1024 * 1024 * 1024);
// يخفض زوم الخريطة من 15 إلى 14.5

6.4 Device Analyzer (intaleq_driver/lib/controller/functions/device_analyzer.dart)

نظام تسجيل كامل (100 نقطة كحد أقصى):
1. Android version (max 10pts)
2. RAM (max 10pts): 8GB+ = 10, 4GB+ = 5, 3GB+ = 3
3. CPU cores (max 10pts): 6+ = 10, 4+ = 5
4. Free storage (max 5pts): 5GB+ = 5, 2GB+ = 3
5. GPS + Gyroscope (max 10pts)
6. Storage write speed test (max 20pts) — يكتب 5MB ويقيس السرعة
7. CPU compute speed test (max 20pts) — 100M floating point iterations
8. Memory pressure (max 15pts) — /proc/meminfo

7. الخدمات الخلفية

7.1 Android Foreground Service

// الميزات:
- تشتغل 24/7
- تحديث الموقع عبر LocationController (وليس من Background Service)
- لا تحتوي على GPS (قاعدة معمارية)
- Notification بأقل أولوية (Importance.low)
- إعادة تشغيل تلقائي عند BOOT_COMPLETED
- تدعم Picture-in-Picture

7.2 iOS Background

// iOS: لا يشغل Background Service
// يعتمد على تحديثات الموقع من iOS system
// LocationController يستخدم enableBackgroundMode من package

7.3 Geofencing (Hardware-level)

يستخدم native_geofence package:
- Android: GeofencingApi (hardware)
- iOS: CLRegion (hardware)
- فعال جداً للبطارية
- مشغل من الخادم

8. نقاط الضعف والتوصيات

8.1 المشكلات الحالية

# المشكلة التأثير الحل المقترح الجهد
1 WakeLock دائم يستنزف البطارية خارج الرحلات تشغيل فقط أثناء الرحلة النشطة 1 يوم
2 GPS accuracy = navigation أعلى دقة حتى في توفير الطاقة استخدام high بدلاً من navigation في توفير الطاقة 2 ساعة
3 لا تكيف حسب السرعة نفس الـ Polling في الحركة والتوقف إيقاف GPS عند السرعة = 0 (متوقف) 1 يوم
4 Doze Mode لم يتم التعامل مع Android Doze استخدام FCM لتجاوز Doze 2 يوم
5 حجم التطبيق كبير Flutter + حزم كثيرة App Bundle، إزالة الحزم غير المستخدمة مستمر
6 بدء التشغيل بطيء WakeLock + Firebase + Location تأجيل Initialization بعد Splash Screen 2 يوم
7 Animation Jank أحياناً تقطيع في الرسوم المتحركة استخدام GPU Profiling لاكتشاف المشاكل مستمر

8.2 تحسينات مقترحة — التفاصيل

🔧 تحسين 1: Smart WakeLock

// الوضع الحالي:
// في main.dart:
await WakelockPlus.enable();  // دائم — مشكلة

// الوضع المقترح:
// في RideLifecycleController:
void onRideStateChanged(RideState state) {
  switch (state) {
    case RideState.searching:
    case RideState.inProgress:
    case RideState.driverArrived:
      await WakelockPlus.enable();  // فقط أثناء الرحلة
      break;
    case RideState.noRide:
    case RideState.finished:
    case RideState.cancelled:
      await WakelockPlus.disable();  // يسمح للسكون
      break;
  }
}

🔧 تحسين 2: GPS Speed-adaptive

// الوضع المقترح:
if (speed < 0.5) {
  // متوقف — أوقف GPS بالكامل أو خفف الجهد
  interval = 30000;  // 30 ثانية بدلاً من 5
  distanceFilter = 100;  // 100 متر بدلاً من 10
} else if (speed < 10) {
  // حركة بطيئة
  interval = powerSaveMode ? 15000 : 8000;
  distanceFilter = powerSaveMode ? 30 : 15;
} else {
  // سرعة عادية
  interval = powerSaveMode ? 10000 : 5000;
  distanceFilter = powerSaveMode ? 20 : 10;
}

🔧 تحسين 3: تقليل حجم التطبيق

الحلول المقترحة:
1. Android App Bundle (توفير 30-40% حجم)
2. حذف الحزم غير المستخدمة (flutter_overlay_window للـ Rider — لا يحتاجه)
3. استخدام Lottie بدلاً من GIF للرسوم المتحركة
4. Shorebird OTA للتحديثات (مستخدم بالفعل)
5. حذف assets غير المستخدمة
6. Flutter DevTools لتحديد الـ Bloat

🔧 تحسين 4: Startup Time Optimization

// حلاً مقترحاً لتسريع بدء التشغيل:
void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(SpashScreen());  // أولاً: شاشة البداية سريعة
  
  // ثم في الخلفية:
  Future.wait([
    initializeFirebase(),        // غير ضروري فوراً
    initLocationController(),    // غير ضروري فوراً
    WakelockPlus.enable(),       // يمكن تأجيله
    loadUserSession(),           // ضروري
  ]).then((_) => runApp(SiroApp()));  // بعد التحميل
}

9. خطة التحسين المقترحة

الأسبوع 1: تحسينات سريعة

  • Smart WakeLock — تشغيل فقط أثناء الرحلة
  • GPS accuracy = high في توفير الطاقة (بدلاً من navigation)
  • تفعيل Android App Bundle

الأسبوع 2: تحسينات متوسطة

  • GPS Speed-adaptive polling
  • Doze Mode handling
  • تأجيل Initialization بعد Splash

الأسبوع 3: تحسينات متقدمة

  • تحليل الـ Memory Leaks عبر DevTools
  • تفريغ الخريطة عند عدم ظهورها
  • حذف الحزم غير المستخدمة

الأسبوع 4: مراقبة واختبار

  • اختبار استهلاك البطارية على 10 أجهزة مختلفة
  • قياس FPS والـ Jank
  • قياس وقت بدء التشغيل

خاتمة

نظام تحسين البطارية في سيرو متقدم جداً مقارنة بمنافسيه — نظام GPS المتكيف مع وضع توفير الطاقة التلقائي، و Batch Upload، والمعمارية التي تفصل GPS عن Background Service كلها قرارات تصميمية ممتازة.

نقاط القوة: Heartbeat الذكي، Distance Filter، Movement-based recording، Geofencing hardware-level

نقاط الضعف: WakeLock الدائم، GPS accuracy ثابت، عدم التكيف مع السرعة، حجم التطبيق

التقييم العام: 8/10 مع إمكانية رفع إلى 9.5/10 بعد التحسينات المقترحة

"سيرو لديها أفضل نظام إدارة بطارية رأيناه في منصات النقل بالمنطقة، مع تحسينات بسيطة يمكن أن تصبح الأفضل عالمياً"