# تحليل استهلاك البطارية وأداء التطبيق — سيرو ## Battery & Performance Analysis — Siro Platform > **النسخة:** 1.0 | **تاريخ:** يوليو 2026 | **التصنيف:** داخلي --- ## 📋 فهرس المحتويات 1. [ملخص الأداء العام](#1-ملخص-الأداء-العام) 2. [تحليل استهلاك البطارية بالتفصيل](#2-تحليل-استهلاك-البطارية-بالتفصيل) 3. [نظام GPS المتكيف](#3-نظام-gps-المتكيف) 4. [تحسين الذاكرة والأداء](#4-تحسين-الذاكرة-والأداء) 5. [تحسين الشبكة والاتصالات](#5-تحسين-الشبكة-والاتصالات) 6. [تصنيف فئات الأجهزة](#6-تصنيف-فئات-الأجهزة) 7. [الخدمات الخلفية (Background Services)](#7-الخدمات-الخلفية) 8. [نقاط الضعف والتوصيات](#8-نقاط-الضعف-والتوصيات) 9. [خطة التحسين المقترحة](#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 تسجيل المسار الذكي ```dart // يُسجل فقط إذا: // 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 الذكي ```dart // Heartbeat كل 25 ثانية، لكن: // إذا GPS stream نشط → يتخطى Heartbeat بالكامل if (_locSub != null) return; // Skip if GPS stream is active ``` ### 3.5 Socket Watchdog ```dart // فحص الاتصال كل 3 ثوانٍ // يعيد الاتصال فقط إذا انقطع // يمنع إعادة اتصال متزامنة if (!isSocketConnected && !_isInitializingSocket) { initSocket(); } ``` ### 3.6 إدارة دورة حياة التطبيق ```dart // عندما التطبيق في المقدمة → يوقف Background Service // عندما التطبيق في الخلفية → يشغل Background Service // iOS: لا يشغل Background Service أبداً ``` --- ## 4. تحسين الذاكرة والأداء ### 4.1 GetX Lazy Loading ```dart // 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 ```dart // خطوة 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 ```dart // قبل كل طلب → تحقق من الاتصال 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 (siro_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 (siro_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) ```dart // كشف الأداء المنخفض: lowPerf = (sdk < 28) || (ram > 0 && ram < 3 * 1024 * 1024 * 1024); // يخفض زوم الخريطة من 15 إلى 14.5 ``` ### 6.4 Device Analyzer (siro_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 ```dart // الميزات: - تشتغل 24/7 - تحديث الموقع عبر LocationController (وليس من Background Service) - لا تحتوي على GPS (قاعدة معمارية) - Notification بأقل أولوية (Importance.low) - إعادة تشغيل تلقائي عند BOOT_COMPLETED - تدعم Picture-in-Picture ``` ### 7.2 iOS Background ```dart // 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 ```dart // الوضع الحالي: // في 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 ```dart // الوضع المقترح: 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 ```dart // حلاً مقترحاً لتسريع بدء التشغيل: 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 بعد التحسينات المقترحة > "سيرو لديها أفضل نظام إدارة بطارية رأيناه في منصات النقل بالمنطقة، مع تحسينات بسيطة يمكن أن تصبح الأفضل عالمياً"