روال‌های مطلوب برای کارایی واکشی «پیکربندی از دور»

‫Firebase Remote Config کنترل انعطاف‌پذیری بر رفتار و ظاهر برنامه‌تان به شما می‌دهد. این کار قابلیت‌هایی مثل عرضه ویژگی و آزمایش A/B چندسکویی را برای برنامه‌هایتان فعال می‌کند، همه این‌ها بدون استقرار نسخه‌های جدید یا پیمایش به‌روزرسانی‌های متعدد فروشگاه برنامه.

چه درحال نمونه‌سازی باشید، چه یک شرکت نوپای درحال رشد را اداره کنید، یا یک برنامه سازمانی را در مقیاس بزرگ مدیریت کنید، مدیریت حجم واکشی شبکه برای ارائه تجربه کاربری سریع و واکنش‌گرا بسیار مهم است. مدیریت پیکربندی کارآمد باعث کاهش تأخیر شروع سرد، صرفه‌جویی در مصرف داده و باتری مشتری، و جلوگیری از سربار شبکه غیرضروری می‌شود. علاوه‌براین، اگر پایگاه کاربر شما به‌سرعت گسترش یابد و در آینده باعث افزایش استفاده شود، ساده‌سازی ادغام Remote Config به اطمینان از کارآمد ماندن استفاده شما کمک می‌کند.

با اصلاح نحوه و زمان واکشی پارامترها توسط برنامه‌ها و زمان فعال کردن آن‌ها، می‌توانید ترافیک درخواست شبکه سمت کارخواه را به‌میزان قابل‌توجهی کاهش دهید.

به الگوی «واکشی برای جلسه بعدی» تغییر دهید

الگوی رایجی که باید از آن اجتناب کنید استفاده از فراخوان fetchAndActivate است که هم مقادیر جدید را ازطریق شبکه واکشی می‌کند و هم آن‌ها را فعال می‌کند. این فراخوان نباید در هر بار راه‌اندازی برنامه همراه با دوره انقضای کوتاه حافظه نهان برای مقادیر واکشی‌شده قبلی (برای مثال، ۱۵ دقیقه تا یک ساعت) استفاده شود. مدل ذهنی پشت این رویکرد این است که هر بار که کاربر برنامه را باز می‌کند، همیشه جدیدترین مقادیر واکشی و اعمال می‌شود. اگرچه مواقعی وجود دارد که به‌روزرسانی فوری ضروری است (برای مثال، اجرای پویش فروش روزانه یا تبلیغات بازی)، مهم است که این هدف را با تأثیر آن بر عملکرد برنامه و استفاده از واکشی متعادل کنید.

این رویکرد هر بار که حافظه نهان منقضی می‌شود، تماس‌های شبکه جدیدی را اجبار می‌کند و برای کاربرانی که برنامه را چندین بار در روز باز می‌کنند، حجم واکشی بالایی ایجاد می‌کند.

به‌جای آن، از تماس‌های fetch و activate به‌صورت جداگانه با حداقل فاصله واکشی بالاتر استفاده کنید تا مدل «واکشی برای جلسه بعدی» را اتخاذ کنید. همچنان می‌توانید از fetchAndActivate با حداقل فاصله واکشی بالاتر استفاده کنید زیرا fetch فقط درصورتی درخواست شبکه را اجرا می‌کند که حافظه نهان نامعتبر باشد، اما استفاده جداگانه از این دو فراخوانی به تثبیت الگو و ایجاد آن به‌عنوان یک رویه استاندارد در فرایند توسعه برنامه شما کمک می‌کند. علاوه‌براین، با فعال‌سازی جداگانه، خطر اعمال مقادیر پیکربندی در میان جلسه و برهم زدن تجربه کاربر را کاهش می‌دهید.

نحوه عملکرد این رویکرد

  • فعال‌سازی فوری در زمان راه‌اندازی: پیکربندی‌های ذخیره‌شده در حافظه نهان از جلسه قبلی را فوراً اعمال کنید (تأخیر شبکه ۰ میلی‌ثانیه).
  • واکشی در پس‌زمینه با حافظه نهان طولانی‌تر (برای مثال، بیش‌از ۱۲ یا ۲۴ ساعت): درخواست پیکربندی‌های به‌روزشده به‌صورت ناهم‌زمان برای بازآوری حافظه نهان محلی برای جلسه بعدی.

نحوه بهینه‌سازی حجم واکشی

فاصله واکشی حداقل طولانی‌تر منجر به درخواست‌های واکشی کمتری می‌شود. واکشی مقادیر جدید برای جلسه بعدی و فعال کردن مقادیر ذخیره‌شده در حافظه نهان برای جلسه کنونی به این معنا است که برنامه شما در دوره اعتبارسنجی طولانی‌تری فوراً از حافظه نهان محلی بار می‌شود و درنتیجه تجربه کاربری بهتری ارائه می‌دهد.

برای مثال، اگر minimumFetchInterval را روی ۲۴ ساعت تنظیم کنید و کاربری ۵ یا ۱۰ بار در یک روز برنامه‌تان را باز کند، کیت توسعه نرم‌افزار به‌طور خودکار راه‌اندازی‌های ۲ تا ۱۰ را مستقیماً از حافظه نهان محلی انجام می‌دهد و تعداد درخواست‌های شبکه روزانه آن کاربر را از ۱۰ یا بیشتر به ۱ کاهش می‌دهد.

مثال‌های زیر نشان می‌دهد که این پیاده‌سازی برای 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 محرک به قلاب‌های چرخه حیات واسط کاربر گسترده، مثل هر بار بار شدن صفحه، عوض شدن برگه، یا تمرکز کردن نما، خودداری کنید.

درعوض، درخواست‌های واکشی را به‌صورت انتخابی براساس کنش‌ها یا وضعیت‌های صریح برنامه راه‌اندازی کنید، مثلاً:

  • رویدادهای ورود به سیستم کاربر
  • انتقال به جریان‌های کاربری خاص که در آن‌ها از پارامترهای شما استفاده می‌شود (برای مثال، ورود به قیف تسویه‌حساب یا ارتقا به سطح بالاتر در بازی)

برعکس، از راه‌اندازی درخواست‌های واکشی برای کنش‌های معمول مثل موارد زیر اجتناب کنید:

  • وقتی کاربر برنامه را باز می‌کند یا جلسه جدیدی را شروع می‌کند
  • وقتی برنامه بین حالت‌های پس‌زمینه و پیش‌زمینه جابه‌جا می‌شود

مراحل بعدی