ข้ามไปยังเนื้อหา

Default Values

ทุก Feature ใน GrowthBook มีการ resolve ค่าสองชั้น:

  1. Override rules — เงื่อนไข, percentage rollout หรือการกำหนด experiment ที่คุณตั้งค่าต่อ environment เมื่อ rule ตรงกับ context ของผู้ใช้ปัจจุบัน rule นั้นจะชนะ
  2. Default value — ค่าที่คืนกลับมาเมื่อ ไม่มี rule ตรงเงื่อนไข นี่คือพื้นที่ปลอดภัยของคุณ

เมื่อ GrowthBook เข้าถึงไม่ได้เลย (network error, CDN ล่ม) SDK จะตกลงไปใช้ argument สำหรับ fallback ที่คุณส่งโดยตรงในโค้ดของคุณ — ไม่เคยคืน null หรือ throw

flowchart TD
  call["SDK call"] --> loaded{"GrowthBook loaded?"}
  loaded -- "YES" --> rules["Evaluate rules"]
  loaded -- "NO" --> fb["Return the fallback argument from your code"]
  rules --> match{"Match found?"}
  match -- "Yes" --> rv["Return rule value"]
  match -- "No match" --> dv["Return Feature default value"]
The three fallback layers
// BAD — if GrowthBook is unreachable, getFeatureValue returns undefined
const text = gb.getFeatureValue('banner-text');
// GOOD — safe fallback keeps the app working
const text = gb.getFeatureValue('banner-text', 'Welcome');

argument สำหรับ fallback คือแนวป้องกันด่านสุดท้าย ควรแทนประสบการณ์ที่คุณต้องการให้ผู้ใช้ได้รับหาก GrowthBook ล่ม — โดยปกติคือพฤติกรรมปัจจุบันที่เสถียร

  1. เปิด Feature ใน GrowthBook UI
  2. คลิก Edit ข้าง ๆ ฟิลด์ Default Value
  3. ใส่ค่า เช่น Welcome สำหรับ flag แบบ string
  4. คลิก Save

default value จะมีผลทันทีสำหรับทุก environment ที่ไม่มี override rule ใดให้ผลลัพธ์ที่ตรงเงื่อนไข

ในการอัปเดต default value โดยไม่เพิ่ม rule:

  1. เปิด Feature
  2. คลิก Edit บน Default Value
  3. เปลี่ยนค่าแล้วคลิก Save

การเปลี่ยนแปลงจะถูกนำไปใช้ทั่วทุก environment ที่ไม่มี rule แบบ override โดยไม่ต้อง deploy

import { GrowthBook } from '@growthbook/growthbook';
const gb = new GrowthBook({
apiHost: 'https://cdn.growthbook.io',
clientKey: process.env.GROWTHBOOK_CLIENT_KEY,
attributes: {
id: 'user-123',
country: 'TH',
},
});
await gb.init({ timeout: 2000 });
// Returns the GrowthBook default value when no rule matches,
// or 'Welcome' when GrowthBook cannot be reached.
const bannerText = gb.getFeatureValue('banner-text', 'Welcome');
document.getElementById('banner').textContent = bannerText;
import { GrowthBook } from '@growthbook/growthbook';

const gb = new GrowthBook({
  apiHost: 'https://cdn.growthbook.io',
  clientKey: process.env.GROWTHBOOK_CLIENT_KEY,
  attributes: {
    id: 'user-123',
    country: 'TH',
  },
});

await gb.init({ timeout: 2000 });

// Safe fallback: 'Welcome' is used only if GrowthBook
// cannot be reached at all.
const bannerText = gb.getFeatureValue('banner-text', 'Welcome');

document.getElementById('banner').textContent = bannerText;
ตัวเลือกBenefitCost
Default value แบบปลอดภัย (safe fallback)แอปไม่พังแม้ SDK ล้มเหลวfeature อาจดูด้อยกว่าที่ตั้งใจตอน fallback
Default ตาม experience ใหม่ตรงกับที่ตั้งใจมากกว่าเสี่ยงถ้า SDK ล้มเหลวและต้องพึ่ง default นี้
  • ตั้ง default value เป็น “เปิด” ฟีเจอร์ที่เสี่ยงไว้ (ควรเป็น safe fallback เสมอ)
  • ไม่ทดสอบว่าแอปทำงานถูกต้องเมื่อ SDK connect ไม่ได้และต้องพึ่ง default
  • ลืมว่า default value ต่างจาก “ค่าที่ set ไว้ใน UI”

💡 ตัวอย่างจากของจริง

Facebook ออกแบบระบบ feature flag ให้ default เป็น “safe” เสมอเมื่อ config service ล่ม เพื่อไม่ให้แอป crash ทั้งระบบ

SDK คืนค่าอะไรเมื่อ Feature มีอยู่ใน GrowthBook แต่ไม่มี override rule ตรงเงื่อนไข?
SDK คืนค่าอะไรเมื่อเข้าถึง GrowthBook ไม่ได้เลย?
การเรียก SDK ตัวไหนที่ขาด fallback ที่ปลอดภัยและอาจคืนค่า undefined?
argument สำหรับ fallback ควรแทนอะไร?