labZero:~$ ESC
  • لا نتائج…
↑↓ تنقّل·Enter اذهب·⌘K

labZero:~$ cd ./lab / lab-flutter-method-vs-ev...

المختبر
v0.1 قابل للاستخدام 1 يونيو 2026

MethodChannel في Flutter: تكلفة الاتصال بين Dart والـ native

استدعاء MethodChannel 30 مرة/ثانية لتحديث UI الكاميرا أضاف 18ms تأخيراً — EventChannel حلّها بـ 2ms.

#Flutter #Performance #Native

// في هذا المقال

السياق

إضافة AR overlay فوق preview الكاميرا في تطبيق Flutter. كل frame، Dart يستدعي MethodChannel لجلب إحداثيات face detection من native. على Pixel 6: 18ms إضافية لكل استدعاء، الـ UI يتأخر بصرياً رغم أن الكاميرا بـ 60fps.

الإجراء

Profile في DevTools: method_channel_invoke يظهر كل 33ms على Main thread. اختبرت ثلاث بدائل: (1) EventChannel — native يبث البيانات، Dart يستمع بدون polling، (2) BasicMessageChannel مع binary codec لتقليل serialization overhead، (3) dart:ffi مع shared memory لبيانات الـ frame كاملة. قست كل خيار على 100 frame متتالي وسجّلت متوسط الزمن والأثر على Main thread.

النتيجة

MethodChannel: متوسط 18ms/استدعاء، يحجب Main thread. EventChannel: 2ms — native يتحكم في التوقيت، Dart يستمع فقط، لا blocking. dart:ffi: 0.3ms لكن يتطلب native code معقداً وإدارة ذاكرة يدوية. EventChannel كان التوازن الأمثل بين الأداء والبساطة.

الدرس

MethodChannel للأوامر المنفردة والنادرة، EventChannel للبيانات المتدفقة — اختر الـ channel حسب نمط الاتصال لا حسب ما يظهر أولاً في التوثيق.

هل تشبه فكرتك هذا المشروع؟ باب التعاون من هنا ‹