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

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

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

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

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

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

مراحل بعدی