แนวทางปฏิบัติแนะนำเพื่อประสิทธิภาพในการดึงข้อมูลการกำหนดค่าระยะไกล

Firebase Remote Config ช่วยให้คุณควบคุมลักษณะการทำงานและรูปลักษณ์ของแอปได้อย่างยืดหยุ่น ซึ่งจะช่วยให้คุณสามารถเปิดตัวฟีเจอร์และการทดสอบ A/B ข้ามแพลตฟอร์มสำหรับแอปได้ โดยไม่ต้องติดตั้งใช้งานเวอร์ชันใหม่หรืออัปเดต App Store หลายรายการ

ไม่ว่าคุณจะสร้างต้นแบบ ดำเนินธุรกิจสตาร์ทอัพที่กำลังเติบโต หรือจัดการแอปพลิเคชันระดับองค์กรในวงกว้าง การจัดการปริมาณการดึงข้อมูลเครือข่ายเป็นกุญแจสำคัญในการมอบประสบการณ์ของผู้ใช้ที่รวดเร็วและตอบสนองได้ดี การจัดการการกำหนดค่าที่มีประสิทธิภาพช่วยลดเวลาในการตอบสนองของการเริ่มระบบใหม่ ประหยัดข้อมูลไคลเอ็นต์และการใช้งานแบตเตอรี่ รวมถึงป้องกันค่าใช้จ่ายเพิ่มเติมที่ไม่จำเป็นของเครือข่าย นอกจากนี้ หากฐานผู้ใช้ของคุณขยายตัวอย่างรวดเร็วและทำให้มีการใช้งานเพิ่มขึ้นในอนาคต การปรับปรุงการผสานรวม Remote Config จะช่วยให้มั่นใจได้ว่าการใช้งานของคุณจะยังคงมีประสิทธิภาพ

คุณลดการเข้าชมคำขอเครือข่ายฝั่งไคลเอ็นต์ได้มากโดยปรับแต่งวิธีและเวลาที่แอปดึงข้อมูลพารามิเตอร์และเวลาที่เปิดใช้งานพารามิเตอร์

เปลี่ยนไปใช้รูปแบบ "ดึงข้อมูลสำหรับเซสชันถัดไป"

รูปแบบที่พบบ่อยซึ่งควรหลีกเลี่ยงคือการใช้การเรียก fetchAndActivate ซึ่งทั้งดึงค่าใหม่ผ่านเครือข่ายและเปิดใช้งานค่าเหล่านั้นทุกครั้งที่เปิดแอป ร่วมกับระยะเวลาหมดอายุของแคชสั้นๆ สำหรับค่าที่ดึงมาก่อนหน้านี้ (เช่น 15 นาทีถึง 1 ชั่วโมง) โมเดลทางความคิดที่อยู่เบื้องหลังแนวทางนี้คือทุกครั้งที่ผู้ใช้เปิดแอป ระบบจะดึงข้อมูลและใช้ค่าล่าสุดเสมอ แม้ว่าบางครั้งอาจจำเป็นต้องอัปเดตทันที (เช่น การจัดแคมเปญลดราคาประจำวันหรือโปรโมชันเกม) แต่คุณก็ควรสร้างสมดุลระหว่างเป้าหมายดังกล่าวกับผลกระทบต่อประสิทธิภาพและการใช้งานการดึงข้อมูลของแอป

วิธีนี้จะบังคับให้มีการเรียกใช้เครือข่ายใหม่ทุกครั้งที่แคชหมดอายุ ซึ่งจะสร้างปริมาณการดึงข้อมูลสูงสำหรับผู้ใช้ที่เปิดแอปหลายครั้งต่อวัน

แต่ให้พิจารณาใช้การเรียก fetch และ activate แยกกันโดยมีช่วงเวลาการดึงข้อมูลขั้นต่ำที่สูงขึ้นเพื่อใช้โมเดล "ดึงข้อมูลสำหรับเซสชันถัดไป" คุณยังคงใช้ fetchAndActivate กับช่วงเวลาการดึงข้อมูลขั้นต่ำที่สูงขึ้นได้ เนื่องจาก fetch จะดำเนินการคำขอเครือข่ายก็ต่อเมื่อแคชไม่ถูกต้องเท่านั้น แต่การใช้การเรียกทั้ง 2 แบบแยกกันจะช่วยเสริมรูปแบบให้ชัดเจนและกำหนดให้เป็นแนวทางปฏิบัติมาตรฐานในกระบวนการพัฒนาแอปพลิเคชัน นอกจากนี้ การเปิดใช้งานแยกกันยังช่วยลดความเสี่ยงในการใช้ค่าการกำหนดค่าระหว่างเซสชันและรบกวนประสบการณ์ของผู้ใช้

วิธีการทำงานของแนวทางนี้

  • เปิดใช้งานทันทีเมื่อเปิดแอป: ใช้การกำหนดค่าที่แคชไว้จากเซสชันก่อนหน้าทันที (ความล่าช้าของเครือข่าย 0 มิลลิวินาที)
  • ดึงข้อมูลในเบื้องหลังด้วยแคชที่นานขึ้น (เช่น นานกว่า 12 หรือ 24 ชั่วโมง): ขอการกำหนดค่าที่อัปเดตแบบไม่พร้อมกันเพื่อรีเฟรชแคชในเครื่องสำหรับเซสชันถัดไป

วิธีที่การดำเนินการนี้ช่วยเพิ่มประสิทธิภาพปริมาณการดึงข้อมูล

ช่วงเวลาการดึงข้อมูลขั้นต่ำที่นานขึ้นจะส่งผลให้มีคำขอดึงข้อมูลน้อยลง การดึงค่าใหม่สำหรับเซสชันถัดไปและการเปิดใช้งานค่าที่แคชไว้สำหรับเซสชันปัจจุบันหมายความว่าแอปจะโหลดทันทีจากแคชในเครื่องเป็นระยะเวลาการตรวจสอบที่นานขึ้น ซึ่งจะช่วยให้ผู้ใช้ได้รับประสบการณ์การใช้งานที่ดียิ่งขึ้น

ตัวอย่างเช่น หากคุณตั้งค่า minimumFetchInterval เป็น 24 ชั่วโมงและผู้ใช้เปิดแอป 5 หรือ 10 ครั้งในวันเดียว SDK จะดำเนินการเปิดแอปครั้งที่ 2 ถึง 10 จากแคชในเครื่องโดยอัตโนมัติ ซึ่งจะลดจำนวนคำขอเครือข่ายรายวันของผู้ใช้รายนั้นจากการดึงข้อมูล 10 ครั้งขึ้นไปเหลือเพียง 1 ครั้ง

ตัวอย่างต่อไปนี้แสดงลักษณะของการติดตั้งใช้งานนี้สําหรับ 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 ทริกเกอร์กับฮุกวงจร UI แบบกว้าง เช่น ทุกครั้งที่หน้าจอโหลด แท็บเปลี่ยน หรือมุมมองได้รับโฟกัส

แต่ให้เรียกใช้คำขอดึงข้อมูลแบบเลือกตามการกระทำหรือสถานะที่ชัดเจนของแอปแทน เช่น

  • เหตุการณ์การลงชื่อเข้าใช้ของผู้ใช้
  • การเปลี่ยนไปใช้โฟลว์ผู้ใช้ที่เฉพาะเจาะจงซึ่งมีการใช้พารามิเตอร์ของคุณ (เช่น การเข้าสู่ Funnel การชําระเงินหรือการเลื่อนระดับในเกม)

ในทางกลับกัน ให้หลีกเลี่ยงการเรียกใช้คำขอดึงข้อมูลสำหรับการดำเนินการตามปกติ เช่น

  • เมื่อผู้ใช้เปิดแอปหรือเริ่มเซสชันใหม่
  • เมื่อแอปเปลี่ยนสถานะระหว่างเบื้องหลังและเบื้องหน้า

ขั้นตอนถัดไป