1. ภาพรวม
ในโค้ดแล็บนี้ คุณจะได้เรียนรู้วิธีตรวจสอบประสิทธิภาพของแอปในระหว่างการเปิดตัวฟีเจอร์ แอปตัวอย่างของเราจะมีฟังก์ชันพื้นฐาน และได้รับการตั้งค่าให้แสดงภาพพื้นหลังที่แตกต่างกันตามค่าสถานะการกำหนดค่าระยะไกลของ Firebase เราจะพูดถึงการใช้งานการติดตามเพื่อตรวจสอบประสิทธิภาพของแอป การเปิดตัวการเปลี่ยนแปลงการกำหนดค่าในแอป การตรวจสอบผลลัพธ์ และการดูวิธีปรับปรุงประสิทธิภาพ
สิ่งที่คุณจะได้เรียนรู้
- วิธีเพิ่ม Firebase Performance Monitoring ลงในแอปบนอุปกรณ์เคลื่อนที่เพื่อรับเมตริกสำเร็จรูป (เช่น เวลาเริ่มต้นของแอปและเฟรมที่ช้าหรือหยุดนิ่ง)
 - วิธีเพิ่มการติดตามที่กำหนดเองเพื่อทำความเข้าใจเส้นทางโค้ดที่สำคัญของเส้นทางของผู้ใช้
 - วิธีใช้แดชบอร์ดการตรวจสอบประสิทธิภาพเพื่อทําความเข้าใจเมตริกและติดตามการเปลี่ยนแปลงที่สําคัญ เช่น การเปิดตัวฟีเจอร์
 - วิธีตั้งค่าการแจ้งเตือนประสิทธิภาพเพื่อตรวจสอบเมตริกหลัก
 - วิธีเปิดตัวการเปลี่ยนแปลงการกำหนดค่าระยะไกลของ Firebase
 
ข้อกำหนดเบื้องต้น
- Android Studio 4.0 ขึ้นไป
 - โปรแกรมจำลอง Android ที่มี API ระดับ 16 ขึ้นไป
 - Java เวอร์ชัน 8 ขึ้นไป
 - ความเข้าใจพื้นฐานเกี่ยวกับการกำหนดค่าระยะไกลของ Firebase
 
2. ตั้งค่าโปรเจ็กต์ตัวอย่าง
ดาวน์โหลดรหัส
เรียกใช้คำสั่งต่อไปนี้เพื่อโคลนโค้ดตัวอย่างสำหรับ Codelab นี้ ซึ่งจะสร้างโฟลเดอร์ชื่อ codelab-perf-rc-android ในเครื่องของคุณ
$ git clone https://github.com/FirebaseExtended/codelab-feature-rollout-performance.git
หากไม่มี Git ในเครื่อง คุณก็ดาวน์โหลดโค้ดจาก GitHub ได้โดยตรง
นำเข้าโปรเจ็กต์ในโฟลเดอร์ firebase-perf-rc-android-start ไปยัง Android Studio คุณอาจเห็นข้อยกเว้นรันไทม์หรือคำเตือนเกี่ยวกับไฟล์ google-services.json ที่ขาดหายไป เราจะแก้ไขเรื่องนี้ในส่วนถัดไป
ในโค้ดแล็บนี้ คุณจะได้ใช้ปลั๊กอินผู้ช่วย Firebase เพื่อลงทะเบียนแอป Android กับโปรเจ็กต์ Firebase และเพิ่มไฟล์การกำหนดค่า ปลั๊กอิน และทรัพยากร Dependency ของ Firebase ที่จำเป็นลงในโปรเจ็กต์ Android ทั้งหมดจากภายใน Android Studio
เชื่อมต่อแอปกับ Firebase
- ไปที่ Android Studio/Help > Check for updates เพื่อให้แน่ใจว่าคุณใช้ Android Studio และ Firebase Assistant เวอร์ชันล่าสุด
 - เลือกเครื่องมือ > Firebase เพื่อเปิดแผงผู้ช่วย

 - เลือก Performance Monitoring เพื่อเพิ่มลงในแอป แล้วคลิกเริ่มต้นใช้งาน Performance Monitoring
 - คลิกเชื่อมต่อกับ Firebase เพื่อเชื่อมต่อโปรเจ็กต์ Android กับ Firebase (ซึ่งจะเปิดคอนโซล Firebase ในเบราว์เซอร์)
 - คลิกปุ่มเพื่อสร้างโปรเจ็กต์ใหม่ แล้วป้อนชื่อโปรเจ็กต์ (เช่น 
Feature Rollout Performance Codelab) - คลิกต่อไป
 - หากได้รับแจ้ง ให้อ่านและยอมรับข้อกำหนดของ Firebase แล้วคลิกต่อไป
 - (ไม่บังคับ) เปิดใช้ความช่วยเหลือจาก AI ในคอนโซล Firebase (เรียกว่า "Gemini ใน Firebase")
 - สําหรับ Codelab นี้ คุณไม่จําเป็นต้องใช้ Google Analytics ดังนั้นปิดตัวเลือก Google Analytics
คุณเลือกเปิดใช้ Google Analytics ได้เนื่องจากจะให้ตัวเลือกการกําหนดเป้าหมาย Remote Config ที่ขยาย อย่างไรก็ตาม Codelab นี้ใช้ตัวเลือกการกำหนดเป้าหมายที่ไม่ต้องใช้ Google Analytics - จากนั้นคุณจะเห็นกล่องโต้ตอบเพื่อเชื่อมต่อแอป Firebase ใหม่กับโปรเจ็กต์ Android Studio

 - คลิกเชื่อมต่อ
 - เปิด Android Studio ในแผงผู้ช่วย คุณจะเห็นการยืนยันว่าแอปเชื่อมต่อกับ Firebase แล้ว

 
เพิ่มการตรวจสอบประสิทธิภาพลงในแอป
ในแผงผู้ช่วยใน Android Studio ให้คลิกเพิ่ม Performance Monitoring ลงในแอป
คุณควรเห็นกล่องโต้ตอบเพื่อยอมรับการเปลี่ยนแปลง หลังจากนั้น Android Studio จะซิงค์แอปเพื่อให้มั่นใจว่าได้เพิ่มทรัพยากร Dependency ที่จำเป็นทั้งหมดแล้ว

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

ในขั้นตอนเพิ่มเติม ให้เปิดใช้การบันทึกการแก้ไขข้อบกพร่องโดยทำตามวิธีการในขั้นตอน "(ไม่บังคับ) เปิดใช้การบันทึกการแก้ไขข้อบกพร่อง" นอกจากนี้ คุณยังดูวิธีการเดียวกันได้ในเอกสารประกอบแบบสาธารณะด้วย
3. เรียกใช้แอป
ตอนนี้คุณควรเห็นไฟล์ google-services.json ในไดเรกทอรีโมดูล (ระดับแอป) ของแอป และแอปควรคอมไพล์ได้แล้ว ใน Android Studio ให้คลิกเรียกใช้ > เรียกใช้ "แอป" เพื่อสร้างและเรียกใช้แอปในโปรแกรมจำลอง Android
เมื่อแอปทํางาน คุณควรเห็นหน้าจอแนะนําแบบนี้ก่อน

จากนั้นหลังจากผ่านไป 2-3 วินาที หน้าหลักที่มีรูปภาพเริ่มต้นจะแสดงขึ้น

สิ่งที่เกิดขึ้นเบื้องหลัง
หน้าจอแนะนำจะใช้งานใน SplashScreenActivity และทำสิ่งต่อไปนี้
- ใน 
onCreate()เราจะเริ่มต้นการตั้งค่าการกำหนดค่าระยะไกลของ Firebase และดึงค่าการกำหนดค่าที่คุณจะตั้งค่าในแดชบอร์ดการกำหนดค่าระยะไกลในภายหลังในโค้ดแล็บนี้ - ใน 
executeTasksBasedOnRC()เราจะอ่านค่าการกำหนดค่าของแฟล็กseasonal_image_urlหากค่าการกำหนดค่าระบุ URL เราจะดาวน์โหลดรูปภาพแบบซิงโครนัส - เมื่อดาวน์โหลดเสร็จแล้ว แอปจะไปยัง MainActivity และเรียกใช้ 
finish()เพื่อสิ้นสุดSplashScreenActivity 
ใน MainActivity หากมีการกำหนด seasonal_image_url ผ่านการกำหนดค่าระยะไกล ระบบจะเปิดใช้ฟีเจอร์นี้และแสดงรูปภาพที่ดาวน์โหลดเป็นพื้นหลังของหน้าหลัก มิเช่นนั้น ระบบจะแสดงรูปภาพเริ่มต้น (แสดงด้านบน)
4. ตั้งค่าการกำหนดค่าระยะไกล
เมื่อแอปทํางานแล้ว คุณก็ตั้งค่าฟีเจอร์แฟล็กใหม่ได้
- ในแผงด้านซ้ายของ Firebase Console ให้ไปที่ส่วนมีส่วนร่วม แล้วคลิกการกำหนดค่าระยะไกล
 - คลิกปุ่มสร้างการกำหนดค่าเพื่อเปิดแบบฟอร์มการกำหนดค่า แล้วเพิ่ม 
seasonal_image_urlเป็นคีย์พารามิเตอร์ - คลิกเพิ่มคำอธิบาย แล้วป้อนคำอธิบายนี้  
Shows a seasonal image (replaces default) in the main page when the restaurant list is empty. - คลิกเพิ่มใหม่ -> ค่าแบบมีเงื่อนไข -> สร้างเงื่อนไขใหม่
 - สำหรับชื่อเงื่อนไข ให้ป้อน 
Seasonal image rollout - สำหรับส่วน 
Applies if...ให้เลือกUser in random percentile <= 0%(คุณต้องการปิดใช้ฟีเจอร์นี้ไว้จนกว่าจะพร้อมเปิดตัวในขั้นตอนต่อๆ ไป) - คลิกสร้างเงื่อนไข คุณจะใช้เงื่อนไขนี้ในภายหลังเพื่อเปิดตัวฟีเจอร์ใหม่ให้ผู้ใช้
 

- เปิดสร้างแบบฟอร์มพารามิเตอร์แรก แล้วหาช่องค่าสำหรับการเปิดตัวรูปภาพตามเทศกาล ป้อน URL ที่จะดาวน์โหลดรูปภาพตามเทศกาล: 
https://images.unsplash.com/photo-1552691021-7043334e0b51 - ปล่อยให้ค่าเริ่มต้นเป็นสตริงว่างเปล่า ซึ่งหมายความว่าระบบจะแสดงรูปภาพเริ่มต้นในโค้ดเบสแทนที่จะแสดงรูปภาพที่ดาวน์โหลดจาก URL
 - คลิกบันทึก
 

คุณจะเห็นว่าระบบสร้างการกำหนดค่าใหม่เป็นฉบับร่าง
- คลิกเผยแพร่การเปลี่ยนแปลงและยืนยันการเปลี่ยนแปลงที่ด้านบนเพื่ออัปเดตแอป
 

5. เพิ่มการตรวจสอบเวลาในการโหลดข้อมูล
แอปของคุณโหลดข้อมูลบางอย่างล่วงหน้าก่อนที่จะแสดง MainActivity และแสดงหน้าจอแนะนำเพื่อซ่อนกระบวนการนี้ คุณไม่ต้องการให้ผู้ใช้รอนานเกินไปในหน้าจอนี้ ดังนั้นโดยปกติแล้วการตรวจสอบระยะเวลาที่หน้าจอเริ่มต้นแสดงจึงเป็นประโยชน์
การตรวจสอบประสิทธิภาพ Firebase มีวิธีช่วยให้คุณทำเช่นนั้นได้ คุณสามารถใช้การติดตามโค้ดที่กำหนดเองเพื่อตรวจสอบประสิทธิภาพของโค้ดที่เฉพาะเจาะจงในแอป เช่น เวลาในการโหลดข้อมูลและเวลาในการประมวลผลฟีเจอร์ใหม่
หากต้องการติดตามระยะเวลาที่หน้าจอเริ่มต้นแสดง คุณจะต้องเพิ่มการติดตามโค้ดที่กำหนดเองไปยัง SplashScreenActivity ซึ่งเป็น Activity ที่ใช้หน้าจอเริ่มต้น
- เริ่มต้น สร้าง และเริ่มการติดตามโค้ดที่กำหนดเองชื่อ 
splash_screen_trace: 
SplashScreenActivity.java
// ...
import com.google.firebase.perf.FirebasePerformance;
import com.google.firebase.perf.metrics.Trace;
// ...
public class SplashScreenActivity extends AppCompatActivity {
    private static final String TAG = "SplashScreenActivity";
    private static final String SEASONAL_IMAGE_URL_RC_FLAG = "seasonal_image_url";
    // TODO: Initialize splash_screen_trace
    private final Trace splashScreenTrace = FirebasePerformance.startTrace("splash_screen_trace");
    
    // ...
}
- สิ้นสุดการติดตามในเมธอด 
onDestroy()ของSplashScreenActivity 
SplashScreenActivity.java
@Override
protected void onDestroy() {
    super.onDestroy();
    // TODO: Stop the splash_screen_trace here
    splashScreenTrace.stop();
}
เนื่องจากฟีเจอร์ใหม่จะดาวน์โหลดและประมวลผลรูปภาพ คุณจึงต้องเพิ่มการติดตามโค้ดที่กำหนดเองที่ 2 ซึ่งจะติดตามเวลาเพิ่มเติมที่ฟีเจอร์เพิ่มลงใน SplashScreenActivity
- เริ่มต้น สร้าง และเริ่มการติดตามโค้ดที่กำหนดเองชื่อ 
splash_seasonal_image_processing: 
SplashScreenActivity.java
private void executeTasksBasedOnRC(FirebaseRemoteConfig rcConfig) {
    String seasonalImageUrl = rcConfig.getString(SEASONAL_IMAGE_URL_RC_FLAG);
    Log.d(TAG, SEASONAL_IMAGE_URL_RC_FLAG + ": " + seasonalImageUrl);
    if (!seasonalImageUrl.isEmpty()) {
        // TODO: Start the splash_seasonal_image_processing here
        final Trace seasonalImageProcessingTrace = FirebasePerformance
            .startTrace("splash_seasonal_image_processing");
        // ...
    }
}
- สิ้นสุดการติดตามในทั้ง 2 วิธี 
onLoadFailed()และonResourceReady()ของRequestListener 
SplashScreenActivity.java
Glide.with(SplashScreenActivity.this.getApplicationContext())
    .asBitmap()
    .load(seasonalImageUrl)
    .signature(new ObjectKey(Utils.getCacheUUID()))
    .listener(new RequestListener<Bitmap>() {
        @Override
        public boolean onLoadFailed(
            @Nullable GlideException e,
            Object model, Target<Bitmap> target,
            boolean isFirstResource) {
            // TODO: Stop the splash_seasonal_image_processing here
            seasonalImageProcessingTrace.stop();
            launchMainActivity();
            return true;
        }
        @Override
        public boolean onResourceReady(Bitmap resource, Object model,
            Target<Bitmap> target, DataSource dataSource,
            boolean isFirstResource) {
            // TODO: Stop the splash_seasonal_image_processing here
            seasonalImageProcessingTrace.stop();
            launchMainActivity();
            return true;
        }
     })
     .preload();
ตอนนี้คุณได้เพิ่มการติดตามโค้ดที่กำหนดเองเพื่อติดตามระยะเวลาของหน้าจอเริ่มต้น (splash_screen_trace)) และเวลาในการประมวลผลของฟีเจอร์ใหม่ (splash_seasonal_image_processing) แล้ว ให้เรียกใช้แอปใน Android Studio อีกครั้ง คุณควรเห็นข้อความบันทึกที่มี Logging trace metric: splash_screen_trace ตามด้วยระยะเวลาของการติดตาม คุณจะไม่เห็นข้อความบันทึกสำหรับ splash_seasonal_image_processing เนื่องจากยังไม่ได้เปิดใช้ฟีเจอร์ใหม่
6. เพิ่มแอตทริบิวต์ที่กำหนดเองลงในร่องรอย
สำหรับการติดตามโค้ดที่กำหนดเอง การตรวจสอบประสิทธิภาพจะบันทึกแอตทริบิวต์เริ่มต้น (ข้อมูลเมตาที่พบบ่อย เช่น เวอร์ชันแอป ประเทศ อุปกรณ์ ฯลฯ) โดยอัตโนมัติเพื่อให้คุณกรองข้อมูลสำหรับการติดตามใน Firebase Console ได้ นอกจากนี้ คุณยังเพิ่มและตรวจสอบแอตทริบิวต์ที่กำหนดเองได้ด้วย
ในแอป คุณเพิ่งเพิ่มการติดตามด้วยโค้ดที่กำหนดเอง 2 รายการเพื่อตรวจสอบระยะเวลาของหน้าจอเริ่มต้นและเวลาในการประมวลผลของฟีเจอร์ใหม่ ปัจจัยที่อาจส่งผลต่อระยะเวลาเหล่านี้คือรูปภาพที่แสดงเป็นรูปภาพเริ่มต้นหรือไม่ หรือต้องดาวน์โหลดรูปภาพจาก URL และใครจะรู้ คุณอาจมี URL ที่แตกต่างกันซึ่งใช้ดาวน์โหลดรูปภาพในที่สุด
ดังนั้น เรามาเพิ่มแอตทริบิวต์ที่กำหนดเองซึ่งแสดง URL ของรูปภาพตามเทศกาลลงในการติดตามโค้ดที่กำหนดเองเหล่านี้กัน วิธีนี้จะช่วยให้คุณกรองข้อมูลระยะเวลาตามค่าเหล่านี้ได้ในภายหลัง
- เพิ่มแอตทริบิวต์ที่กำหนดเอง (
seasonal_image_url_attribute) สำหรับsplash_screen_traceที่จุดเริ่มต้นของเมธอดexecuteTasksBasedOnRCดังนี้ 
SplashScreenActivity.java
private void executeTasksBasedOnRC(FirebaseRemoteConfig rcConfig) {
    String seasonalImageUrl = rcConfig.getString(SEASONAL_IMAGE_URL_RC_FLAG);
    Log.d(TAG, SEASONAL_IMAGE_URL_RC_FLAG + ": " + seasonalImageUrl);
    // TODO: Add a custom attribute "seasonal_image_url_attribute" to splash_screen_trace
    if (seasonalImageUrl.isEmpty()) {
        splashScreenTrace.putAttribute("seasonal_image_url_attribute", "unset");
    } else {
        splashScreenTrace.putAttribute("seasonal_image_url_attribute", seasonalImageUrl);
    }
    // ...
}
- เพิ่มแอตทริบิวต์ที่กำหนดเองเดียวกันสำหรับ 
splash_seasonal_image_processingทันทีหลังจากเรียกใช้startTrace("splash_seasonal_image_processing")ดังนี้ 
SplashScreenActivity.java
if (!seasonalImageUrl.isEmpty()) {
    // TODO: Start the splash_seasonal_image_processing here
    final Trace seasonalImageProcessingTrace = FirebasePerformance
        .startTrace("splash_seasonal_image_processing");
    // TODO: Add a custom attribute "seasonal_image_url_attribute" to splash_seasonal_image_processing
    seasonalImageProcessingTrace
        .putAttribute("seasonal_image_url_attribute", seasonalImageUrl);
    // ...
}
ตอนนี้คุณได้เพิ่มแอตทริบิวต์ที่กำหนดเอง (seasonal_image_url_attribute) สำหรับทั้ง 2 การติดตามที่กำหนดเอง (splash_screen_trace และ splash_seasonal_image_processing) แล้ว ให้เรียกใช้แอปใน Android Studio อีกครั้ง คุณควรเห็นข้อความบันทึกที่มี Setting attribute 'seasonal_image_url_attribute' to 'unset' on trace 'splash_screen_trace'. คุณยังไม่ได้เปิดใช้พารามิเตอร์การกำหนดค่าระยะไกล seasonalImageUrl ค่าแอตทริบิวต์จึงเป็น unset
SDK ของ Performance Monitoring จะรวบรวมข้อมูลการติดตามและส่งไปยัง Firebase คุณดูข้อมูลได้ในแดชบอร์ดประสิทธิภาพของคอนโซล Firebase ซึ่งเราจะอธิบายรายละเอียดในขั้นตอนถัดไปของ Codelab
7. กำหนดค่าแดชบอร์ดการตรวจสอบประสิทธิภาพ
กำหนดค่าแดชบอร์ดเพื่อตรวจสอบฟีเจอร์
ในคอนโซล Firebase ให้เลือกโปรเจ็กต์ที่มีแอป Friendly Eats
ในแผงด้านซ้าย ให้ค้นหาส่วนเผยแพร่และตรวจสอบ แล้วคลิกประสิทธิภาพ
คุณควรเห็นแดชบอร์ดประสิทธิภาพพร้อมจุดข้อมูลแรกสุดในบอร์ดเมตริก Performance Monitoring SDK จะรวบรวมข้อมูลประสิทธิภาพจากแอปและแสดงข้อมูลภายในไม่กี่นาทีหลังจากการรวบรวม

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

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

บอร์ดเมตริกเป็นเครื่องมือที่มีประสิทธิภาพในการติดตามประสิทธิภาพของเมตริกสำคัญที่ผู้ใช้ได้รับ สำหรับโค้ดแล็บนี้ คุณมีชุดข้อมูลขนาดเล็กในช่วงเวลาที่จำกัด ดังนั้นคุณจะต้องใช้มุมมองแดชบอร์ดอื่นๆ ที่จะช่วยให้คุณเข้าใจประสิทธิภาพของการเปิดตัวฟีเจอร์
8. เปิดตัวฟีเจอร์
เมื่อตั้งค่าการตรวจสอบแล้ว คุณก็พร้อมที่จะเปิดตัวการเปลี่ยนแปลงการกำหนดค่าระยะไกลของ Firebase (seasonal_image_url) ที่คุณตั้งค่าไว้ก่อนหน้านี้
หากต้องการเปิดตัวการเปลี่ยนแปลง คุณจะต้องกลับไปที่หน้าการกำหนดค่าระยะไกลในคอนโซล Firebase เพื่อเพิ่มเปอร์เซ็นไทล์ผู้ใช้ของเงื่อนไขการกำหนดเป้าหมาย โดยปกติแล้ว คุณจะเปิดตัวฟีเจอร์ใหม่ๆ ให้ผู้ใช้เพียงไม่กี่คน และจะเพิ่มจำนวนผู้ใช้ก็ต่อเมื่อมั่นใจว่าฟีเจอร์ดังกล่าวไม่มีปัญหา อย่างไรก็ตาม ในโค้ดแล็บนี้ คุณเป็นผู้ใช้แอปเพียงคนเดียว จึงเปลี่ยนเปอร์เซ็นไทล์เป็น 100% ได้
- คลิกแท็บเงื่อนไขที่ด้านบนของหน้า
 - คลิก
Seasonal image rolloutเงื่อนไขที่คุณเพิ่มไว้ก่อนหน้านี้ - เปลี่ยนเปอร์เซ็นต์ไทล์เป็น 100%
 - คลิกบันทึกเงื่อนไข
 - คลิกเผยแพร่การเปลี่ยนแปลงและยืนยันการเปลี่ยนแปลง
 

กลับไปที่ Android Studio แล้วรีสตาร์ทแอปในโปรแกรมจำลองเพื่อดูฟีเจอร์ใหม่ หลังจากหน้าจอแนะนํา คุณจะเห็นหน้าจอหลักใหม่ที่ว่างเปล่า

9. ตรวจสอบการเปลี่ยนแปลงด้านประสิทธิภาพ
ตอนนี้เรามาดูประสิทธิภาพการโหลดหน้าจอเริ่มต้นโดยใช้แดชบอร์ดประสิทธิภาพในคอนโซล Firebase กัน ในขั้นตอนนี้ของ Codelab คุณจะได้ใช้ส่วนต่างๆ ของแดชบอร์ดเพื่อดูข้อมูลประสิทธิภาพ
- ในแท็บแดชบอร์ดหลัก ให้เลื่อนลงไปที่ตารางการติดตาม แล้วคลิกแท็บการติดตามที่กำหนดเอง ในตารางนี้ คุณจะเห็นร่องรอยของโค้ดที่กำหนดเองซึ่งคุณเพิ่มไว้ก่อนหน้านี้ รวมถึงร่องรอยสำเร็จรูปบางรายการ
 - เมื่อเปิดใช้ฟีเจอร์ใหม่แล้ว ให้มองหาร่องรอยของโค้ดที่กำหนดเอง 
splash_seasonal_image_processingซึ่งวัดเวลาที่ใช้ในการดาวน์โหลดและประมวลผลรูปภาพ จากค่าระยะเวลาของ Trace คุณจะเห็นว่าการดาวน์โหลดและการประมวลผลนี้ใช้เวลานานพอสมควร 

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

- หากต้องการยืนยันความแตกต่างเพิ่มเติม คุณสามารถดูข้อมูลสำหรับ 
splash_screen_traceได้อย่างละเอียด คลิกการ์ดsplash_screen_traceในบอร์ดเมตริก แล้วคลิกดูรายละเอียดเมตริก 

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

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

 - ในตารางการติดตามที่ด้านล่างของหน้า ให้คลิกแท็บคำขอเครือข่าย ในตารางนี้ คุณจะเห็นคำขอเครือข่ายทั้งหมดจากแอปของคุณที่รวบรวมเป็นรูปแบบ URL รวมถึงรูปแบบ URL ของ 
images.unsplash.com/**หากเปรียบเทียบค่าของเวลาตอบสนองนี้กับเวลาโดยรวมที่ใช้ในการดาวน์โหลดและประมวลผลรูปภาพ (เช่น ระยะเวลาของเทรซsplash_seasonal_image_processing) คุณจะเห็นว่าเวลาส่วนใหญ่ใช้ไปกับการดาวน์โหลดรูปภาพ 

ข้อมูลเชิงลึกด้านประสิทธิภาพ
การใช้การตรวจสอบประสิทธิภาพ Firebase ทำให้คุณเห็นผลกระทบต่อไปนี้ต่อผู้ใช้ปลายทางเมื่อเปิดใช้ฟีเจอร์ใหม่
- เวลาที่ใช้ใน 
SplashScreenActivityเพิ่มขึ้น - ระยะเวลาสำหรับ 
splash_seasonal_image_processingยาวมาก - ความล่าช้าเกิดจากเวลาในการตอบสนองสำหรับการดาวน์โหลดรูปภาพและเวลาในการประมวลผลที่จำเป็นสำหรับรูปภาพ
 
ในขั้นตอนถัดไป คุณจะลดผลกระทบต่อประสิทธิภาพโดยการย้อนกลับฟีเจอร์และระบุวิธีปรับปรุงการติดตั้งใช้งานฟีเจอร์
10. ย้อนกลับฟีเจอร์
การเพิ่มเวลารอของผู้ใช้ในระหว่างหน้าจอแนะนําไม่ใช่เรื่องที่ควรทำ ข้อดีที่สำคัญอย่างหนึ่งของการกำหนดค่าระยะไกลคือความสามารถในการหยุดชั่วคราวและย้อนกลับการเปิดตัวโดยไม่ต้องเผยแพร่เวอร์ชันอื่นให้ผู้ใช้ ซึ่งจะช่วยให้คุณตอบสนองต่อปัญหาได้อย่างรวดเร็ว (เช่น ปัญหาด้านประสิทธิภาพที่คุณพบในขั้นตอนสุดท้าย) และลดจำนวนผู้ใช้ที่ไม่พึงพอใจ
คุณจะรีเซ็ตเปอร์เซ็นไทล์การเปิดตัวกลับไปเป็น 0 เพื่อให้ผู้ใช้ทุกคนเห็นรูปภาพเริ่มต้นอีกครั้งได้ดังนี้
- กลับไปที่หน้าการกำหนดค่าระยะไกลในคอนโซล Firebase
 - คลิกเงื่อนไขที่ด้านบนของหน้า
 - คลิกเงื่อนไข 
Seasonal image rolloutที่คุณเพิ่มไว้ก่อนหน้านี้ - เปลี่ยนเปอร์เซ็นไทล์เป็น 0%
 - คลิกบันทึกเงื่อนไข
 - คลิกเผยแพร่การเปลี่ยนแปลงและยืนยันการเปลี่ยนแปลง
 

รีสตาร์ทแอปใน Android Studio แล้วคุณจะเห็นหน้าจอหลักที่ว่างเปล่าเหมือนเดิม

11. แก้ไขปัญหาด้านประสิทธิภาพ
คุณได้ทราบใน Codelab ก่อนหน้านี้ว่าการดาวน์โหลดรูปภาพสำหรับหน้าจอ Splash ทำให้แอปทำงานช้าลง เมื่อดูรูปภาพที่ดาวน์โหลดอย่างละเอียด คุณจะเห็นว่าคุณใช้ความละเอียดเดิมของรูปภาพ ซึ่งมีขนาดมากกว่า 2 MB วิธีแก้ไขปัญหาด้านประสิทธิภาพอย่างรวดเร็วคือการลดคุณภาพให้มีความละเอียดที่เหมาะสมยิ่งขึ้นเพื่อให้รูปภาพใช้เวลาในการดาวน์โหลดน้อยลง
เปิดตัวค่าการกำหนดค่าระยะไกลอีกครั้ง
- กลับไปที่หน้าการกำหนดค่าระยะไกลในคอนโซล Firebase
 - คลิกไอคอนแก้ไขสำหรับพารามิเตอร์ 
seasonal_image_url - อัปเดตค่าสำหรับการเปิดตัวรูปภาพตามเทศกาลเป็น 
https://images.unsplash.com/photo-1552691021-7043334e0b51?w=640แล้วคลิกบันทึก 

- คลิกแท็บเงื่อนไขที่ด้านบนของหน้า
 - คลิกการเปิดตัวรูปภาพตามฤดูกาล จากนั้นตั้งค่าเปอร์เซ็นไทล์กลับเป็น 100%
 - คลิกบันทึกเงื่อนไข
 

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

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

- คลิกแอตทริบิวต์ที่กำหนดเอง 
seasonal_image_url_attributeเพื่อดูรายละเอียดของแอตทริบิวต์ที่กำหนดเองอีกครั้ง หากวางเมาส์เหนือ URL คุณจะเห็นค่าที่ตรงกับ URL ใหม่ของรูปภาพขนาดเล็กลง:https://images.unsplash.com/photo-1552691021-7043334e0b51?w=640(โดยมี?w=640อยู่ท้าย) ค่าระยะเวลาที่เชื่อมโยงกับรูปภาพนี้สั้นกว่าค่าของรูปภาพก่อนหน้าอย่างมาก และผู้ใช้ยอมรับได้มากกว่า 

- ตอนนี้คุณได้ปรับปรุงประสิทธิภาพของหน้าจอเริ่มต้นแล้ว คุณสามารถตั้งค่าการแจ้งเตือนให้แจ้งเตือนเมื่อการติดตามเกินเกณฑ์ที่คุณตั้งไว้ได้ เปิดแดชบอร์ดประสิทธิภาพ แล้วคลิกไอคอนเมนูที่ซ่อนอยู่ (3 จุด) สำหรับ splash_screen_trace แล้วคลิกการตั้งค่าการแจ้งเตือน
 

- คลิกปุ่มเปิด/ปิดเพื่อเปิดใช้การแจ้งเตือนระยะเวลา ตั้งค่าเกณฑ์ให้สูงกว่าค่าที่คุณเห็นเล็กน้อย เพื่อให้คุณได้รับอีเมลหาก splash_screen_trace เกินเกณฑ์
 
- คลิกบันทึกเพื่อสร้างการแจ้งเตือน เลื่อนลงไปที่ตารางการติดตาม แล้วคลิกแท็บการติดตามที่กำหนดเองเพื่อดูว่าระบบเปิดใช้การแจ้งเตือนแล้ว
 

13. ยินดีด้วย
ยินดีด้วย คุณเปิดใช้ Firebase Performance Monitoring SDK และรวบรวมการติดตามเพื่อวัดประสิทธิภาพของฟีเจอร์ใหม่แล้ว คุณตรวจสอบเมตริกประสิทธิภาพหลักสำหรับการเปิดตัวฟีเจอร์ใหม่และตอบสนองอย่างรวดเร็วเมื่อพบปัญหาด้านประสิทธิภาพ ทั้งหมดนี้เกิดขึ้นได้ด้วยความสามารถในการเปลี่ยนแปลงการกำหนดค่าด้วยการกำหนดค่าระยะไกล และตรวจสอบปัญหาด้านประสิทธิภาพแบบเรียลไทม์
สิ่งที่เราได้พูดถึงไปแล้ว
- การเพิ่ม Firebase Performance Monitoring SDK ลงในแอป
 - การเพิ่มการติดตามโค้ดที่กำหนดเองลงในโค้ดเพื่อวัดฟีเจอร์ที่เฉพาะเจาะจง
 - การตั้งค่าพารามิเตอร์การกำหนดค่าระยะไกลและค่าแบบมีเงื่อนไขเพื่อควบคุม/เปิดตัวฟีเจอร์ใหม่
 - ทำความเข้าใจวิธีใช้แดชบอร์ดการตรวจสอบประสิทธิภาพเพื่อระบุปัญหาในระหว่างการเปิดตัว
 - การตั้งค่าการแจ้งเตือนประสิทธิภาพเพื่อแจ้งให้คุณทราบเมื่อประสิทธิภาพของแอปเกินเกณฑ์ที่คุณตั้งไว้