أفضل الممارسات لتحسين كفاءة استرجاع البيانات في الإعداد عن بُعد

تمنحك Firebase Remote Config تحكّمًا مرنًا في سلوك تطبيقك ومظهره. يتيح ذلك إمكانات مثل طرح الميزات وإجراء اختبارات A/B على تطبيقاتك من عدّة منصات، وكل ذلك بدون نشر إصدارات جديدة أو التنقّل بين تحديثات متعددة في متجر التطبيقات.

سواء كنت بصدد إنشاء نموذج أوّلي أو إدارة شركة ناشئة متنامية أو إدارة تطبيق مؤسسة على نطاق واسع، فإنّ إدارة حجم عمليات جلب الشبكة هي مفتاح تقديم تجربة مستخدم سريعة ومتجاوبة. تؤدي إدارة عملية الإعداد بكفاءة إلى تقليل وقت الاستجابة عند بدء التشغيل على البارد، وتوفير بيانات العميل واستخدام البطارية، ومنع أي أعباء غير ضرورية على الشبكة. بالإضافة إلى ذلك، إذا توسّعت قاعدة المستخدمين بسرعة وزاد الاستخدام في المستقبل، فإنّ تبسيط عملية دمج Remote Config يساعد في ضمان بقاء استخدامك فعّالاً.

يمكنك تقليل عدد طلبات الشبكة من جهة العميل بشكل كبير من خلال تحسين كيفية ووقت جلب التطبيقات للمَعلمات ووقت تفعيلها.

الانتقال إلى نمط "الجلب للجلسة التالية"

من الأنماط الشائعة التي يجب تجنُّبها استخدام طلب fetchAndActivate، الذي يجلب القيم الجديدة عبر الشبكة ويفعّلها، عند كل تشغيل للتطبيق مع فترة انتهاء صلاحية قصيرة لذاكرة التخزين المؤقت للقيم التي تم جلبها سابقًا (على سبيل المثال، من 15 دقيقة إلى ساعة). النموذج الذهني وراء هذا النهج هو أنه في كل مرة يفتح فيها المستخدم التطبيق، يتم دائمًا جلب أحدث القيم وتطبيقها. على الرغم من أنّ هناك أوقاتًا يكون فيها التحديث الفوري ضروريًا (على سبيل المثال، إطلاق حملة مبيعات يومية أو عرض ترويجي للعبة)، من المهم تحقيق التوازن بين هذا الهدف والتأثير في أداء تطبيقك واستخدام ميزة الجلب.

يفرض هذا الأسلوب إجراء طلبات جديدة للشبكة في كل مرة تنتهي فيها صلاحية ذاكرة التخزين المؤقت، ما يؤدي إلى زيادة حجم عمليات الجلب للمستخدمين الذين يفتحون التطبيق عدة مرات في اليوم.

بدلاً من ذلك، ننصحك باستخدام طلبَي fetch وactivate بشكل منفصل مع ضبط حد أدنى أعلى للفاصل الزمني للجلب من أجل اعتماد نموذج "الجلب للجلسة التالية". لا يزال بإمكانك استخدام fetchAndActivate مع فاصل زمني أعلى للحد الأدنى للجلب لأنّ fetch لا ينفّذ طلب شبكة إلا إذا تم إبطال ذاكرة التخزين المؤقت، ولكن استخدام الاستدعاءَين بشكل منفصل يساعد في تعزيز النمط وترسيخه كممارسة عادية في عملية تطوير التطبيق. بالإضافة إلى ذلك، من خلال التفعيل بشكل منفصل، لن تتعرّض لخطر تطبيق قيم الإعدادات في منتصف الجلسة وتعطيل تجربة المستخدم.

طريقة عمل هذا النهج

  • التفعيل فورًا عند التشغيل: يتم تطبيق الإعدادات المخزَّنة مؤقتًا من الجلسة السابقة على الفور (تأخير الشبكة بمقدار 0 ملي ثانية).
  • الجلب في الخلفية باستخدام ذاكرة تخزين مؤقت أطول (على سبيل المثال، أكثر من 12 أو 24 ساعة): يمكنك طلب الإعدادات المعدَّلة بشكل غير متزامن لإعادة تحميل ذاكرة التخزين المؤقت المحلية للجلسة التالية.

كيفية تحسين حجم الجلب

ويؤدي ضبط حد أدنى أطول للفاصل الزمني للجلب إلى تقليل عدد طلبات الجلب. إنّ جلب قيم جديدة للجلسة التالية وتفعيل القيم المخزّنة مؤقتًا للجلسة الحالية يعني أنّ تطبيقك يتم تحميله على الفور من ذاكرة التخزين المؤقت المحلية على مدار فترة تحقّق أطول، ما يؤدي إلى تحسين تجارب المستخدمين.

على سبيل المثال، إذا ضبطت minimumFetchInterval على 24 ساعة وفتح أحد المستخدمين تطبيقك 5 أو 10 مرات في يوم واحد، ستستوفي حزمة SDK تلقائيًا عمليات التشغيل من 2 إلى 10 مباشرةً من ذاكرة التخزين المؤقت المحلية، ما يقلّل عدد طلبات الشبكة اليومية لهذا المستخدم من 10 عمليات جلب أو أكثر إلى عملية واحدة.

توضّح الأمثلة التالية شكل عملية التنفيذ هذه على أجهزة Android وأجهزة Apple وتطبيقات الويب:

Android

val remoteConfig = Firebase.remoteConfig

// Set a 24-hour minimum fetch interval (86,400 seconds)
val configSettings = remoteConfigSettings {
    minimumFetchIntervalInSeconds = 86400
}
remoteConfig.setConfigSettingsAsync(configSettings)

// 1. Instantly activate values cached from the LAST session
remoteConfig.activate().addOnCompleteListener {
    applyAppConfigurations()
}

// 2. Fetch new values in the background for the NEXT session
remoteConfig.fetch().addOnCompleteListener { task ->
    if (task.isSuccessful) {
        // Optional: Activate values if needed
    }
}

iOS+‎

let remoteConfig = RemoteConfig.remoteConfig()

// Set a 24-hour minimum fetch interval (86,400 seconds)
let settings = RemoteConfigSettings()
settings.minimumFetchInterval = 86400
remoteConfig.configSettings = settings

// 1. Instantly activate values cached from the LAST session
remoteConfig.activate { changed, error in
    guard error == nil else { return }
    DispatchQueue.main.async {
        self.applyAppConfigurations()
    }
}

// 2. Fetch new values in the background for the NEXT session
remoteConfig.fetch { status, error in
    if status == .success {
        // Optional: Activate values if needed
    }
}

الويب

import { getRemoteConfig, fetchConfig, activate } from "firebase/remote-config";

const remoteConfig = getRemoteConfig(app);

// Set a 24-hour minimum fetch interval (86,400,000 ms)
remoteConfig.settings.minimumFetchIntervalMillis = 86400000;

// 1. Instantly activate values cached from the LAST session
activate(remoteConfig).then(() => {
    applyAppConfigurations();
});

// 2. Fetch new values in the background for the NEXT session
fetchConfig(remoteConfig).then(() => {
    // Optional: Activate values if needed
});

تنفيذ عملية جلب "ذكية" مشروطة

إذا كان نمط "الجلب للجلسة التالية" يؤدي إلى وقت استجابة طويل جدًا بين وقت الحاجة إلى تعديل قيم Remote Config ووقت توفّرها في تطبيقات العميل، ننصحك باستخدام الجلب "الذكي" المشروط.

لتنفيذ ذلك بفعالية، تجنَّب ربط مشغّلات fetch بأحداث عامة في مراحل نشاط واجهة المستخدم، مثل كل مرة يتم فيها تحميل شاشة أو تبديل علامة تبويب أو التركيز على طريقة عرض.

بدلاً من ذلك، يمكنك تفعيل طلبات الجلب بشكل انتقائي استنادًا إلى إجراءات أو حالات صريحة في التطبيق، مثل:

  • أحداث تسجيل دخول المستخدمين
  • الانتقال إلى مسارات مستخدمين معيّنة يتم فيها استخدام المَعلمات (على سبيل المثال، الدخول إلى مسار إتمام الدفع أو الانتقال إلى مستوى أعلى في لعبة)

في المقابل، تجنَّب تفعيل طلبات الجلب للإجراءات الروتينية مثل:

  • عندما يفتح المستخدم التطبيق أو يبدأ جلسة جديدة
  • عندما ينتقل التطبيق بين حالتَي الخلفية والمقدمة

الخطوات التالية