กรณีศึกษา
วิธีที่ Reddit ใช้เครื่องมือเพิ่มประสิทธิภาพ R8 เพื่อปรับปรุงประสิทธิภาพให้ได้ผลลัพธ์สูง
ใช้เวลาอ่าน 4 นาที
ในโลกของแอปพลิเคชันบนอุปกรณ์เคลื่อนที่ในปัจจุบัน ประสบการณ์ของผู้ใช้ที่ราบรื่นไม่ใช่แค่ฟีเจอร์ แต่เป็นสิ่งจำเป็น เวลาในการโหลดช้า อินเทอร์เฟซไม่ตอบสนอง และความไม่เสถียรอาจเป็นอุปสรรคสำคัญต่อการมีส่วนร่วมและการคงผู้ใช้ไว้ ระหว่างการทำงานร่วมกับทีม Android Developer Relations ทีมวิศวกรรมของ Reddit ได้ใช้ คะแนนประสิทธิภาพของแอป เพื่อประเมินแอปของตนเอง หลังจากประเมินประสิทธิภาพแล้ว ทีมได้ระบุศักยภาพในการปรับปรุงที่สำคัญและตัดสินใจดำเนินการตามขั้นตอนเพื่อเปิดใช้งานศักยภาพเต็มรูปแบบของ R8 ซึ่งเป็นเครื่องมือเพิ่มประสิทธิภาพแอป Android ความคิดริเริ่มที่มุ่งเน้นนี้ส่งผลให้เวลาเริ่มต้นแอปดีขึ้นอย่างเห็นได้ชัด เฟรมที่ช้าหรือหยุดนิ่งและ ANR ลดลง และคะแนนใน Play Store โดยรวมเพิ่มขึ้น กรณีศึกษาฉบับนี้จะอธิบายรายละเอียดวิธีที่ Reddit ได้รับผลลัพธ์ที่น่าประทับใจเหล่านี้
เครื่องมือเพิ่มประสิทธิภาพ R8 ช่วย Reddit ได้อย่างไร
เครื่องมือเพิ่มประสิทธิภาพ R8 เป็นเครื่องมือพื้นฐานสำหรับการเพิ่มประสิทธิภาพใน Android เครื่องมือนี้มีขั้นตอนต่างๆ เพื่อปรับปรุงประสิทธิภาพของแอป ลองมาดูขั้นตอนที่มีประสิทธิภาพมากที่สุดกัน
- Tree Shaking เป็นขั้นตอนที่สำคัญที่สุดในการลดขนาดของแอป โดยจะนำโค้ดที่ไม่ได้ใช้จากทรัพยากร Dependency ของแอปและตัวแอปเองออก
- Method Inlining จะแทนที่การเรียกเมธอดด้วยโค้ดจริง ซึ่งจะทำให้แอปมีประสิทธิภาพมากขึ้น
- Class Merging และกลยุทธ์อื่นๆ จะถูกนำมาใช้เพื่อให้โค้ดมีขนาดกะทัดรัดมากขึ้น ณ จุดนี้ ไม่ได้เน้นที่ความสามารถในการอ่านโค้ดต้นฉบับของมนุษย์อีกต่อไป แต่เน้นที่การทำให้โค้ดที่คอมไพล์แล้วทำงานได้อย่างรวดเร็ว ดังนั้น แอบสแตรกชัน เช่น อินเทอร์เฟซหรือลำดับชั้นของคลาสจึงไม่สำคัญในที่นี้และจะถูกนำออก
- Identifier Minification จะเปลี่ยนชื่อคลาส ฟิลด์ และเมธอดเป็นชื่อที่สั้นลงและไม่มีความหมาย ดังนั้น แทนที่จะใช้
MyDataModelคุณอาจได้คลาสที่ชื่อว่า a - การลดขนาดทรัพยากร จะนำทรัพยากรที่ไม่ได้ใช้ เช่น ไฟล์ XML และ Drawable ออกเพื่อลดขนาดแอปเพิ่มเติม
ขั้นตอนหลักของการเพิ่มประสิทธิภาพ R8
จากข้อมูลที่ชัดเจนไปสู่ความพึงพอใจของผู้ใช้: การระบุความสำเร็จในการใช้งานจริง
Reddit เห็นผลลัพธ์ด้านประสิทธิภาพที่ดีขึ้นทันทีหลังจากเปิดตัวแอปเวอร์ชันใหม่ให้ผู้ใช้การใช้ Android Vitals และ Crashlytics ช่วยให้ Reddit สามารถบันทึกเมตริกประสิทธิภาพในอุปกรณ์จริงที่มีผู้ใช้จริง ซึ่งช่วยให้ทีมสามารถเปรียบเทียบเวอร์ชันใหม่กับเวอร์ชันก่อนหน้าได้
วิธีที่ R8 ปรับปรุงประสิทธิภาพของแอป Reddit
ทีมสังเกตเห็นว่า Cold Startup เร็วขึ้น 40% ข้อผิดพลาด "แอปพลิเคชันไม่ตอบสนอง" (ANR) ลดลง 30% การแสดงผลเฟรมดีขึ้น 25% และ ขนาดแอปเล็กลง 14%
การปรับปรุงเหล่านี้มีความสำคัญต่อความพึงพอใจของผู้ใช้ การเริ่มต้นแอปที่เร็วขึ้นหมายถึงการรอที่น้อยลงและการเข้าถึงเนื้อหาที่เร็วขึ้น ANR ที่น้อยลงทำให้แอปมีเสถียรภาพและเชื่อถือได้มากขึ้น ซึ่งจะช่วยลดความไม่พอใจของผู้ใช้ การแสดงผลเฟรมที่ราบรื่นขึ้นจะช่วยลดการกระตุกของ UI ทำให้การเลื่อนและการเคลื่อนไหวรู้สึกราบรื่นและตอบสนองได้ดี ผลกระทบทางเทคนิคเชิงบวกนี้ยังเห็นได้ชัดเจนในความรู้สึกของผู้ใช้
ตัวบ่งชี้ความพึงพอใจของผู้ใช้ต่อความสำเร็จของการเพิ่มประสิทธิภาพแสดงให้เห็นอย่างชัดเจนใน Google Play Store หลังจากเปิดตัวเวอร์ชันที่เพิ่มประสิทธิภาพด้วย R8 ทีมได้เห็นการเปลี่ยนแปลงที่สำคัญและเป็นไปในทางบวกในความรู้สึกและการมีส่วนร่วมของผู้ใช้
Drew Heavner: "การเปิดใช้งานศักยภาพเต็มรูปแบบของเครื่องมือ R8 ใช้เวลาไม่ถึง 2 สัปดาห์"
สิ่งที่น่าประทับใจที่สุดคือความสำเร็จนี้เกิดขึ้นได้ด้วยความพยายามที่มุ่งเน้น Drew Heavner วิศวกรซอฟต์แวร์อาวุโสของ Reddit ซึ่งทำงานในความคิดริเริ่มนี้กล่าวว่า การใช้การเปลี่ยนแปลงเพื่อเปิดใช้งานศักยภาพเต็มรูปแบบของ R8 ใช้เวลาไม่ถึง 2 สัปดาห์
การยืนยันผลลัพธ์: การวิเคราะห์เชิงลึกด้วย Macrobenchmark
หลังจากสังเกตเห็นการปรับปรุงที่สำคัญในการใช้งานจริง ทีมวิศวกรรมของ Reddit และทีม Android Developer Relations ของ Google ได้ทำการทดสอบประสิทธิภาพโดยละเอียดเพื่อยืนยันผลลัพธ์ทางวิทยาศาสตร์และทดลองใช้การเพิ่มประสิทธิภาพเพิ่มเติม สำหรับการวิเคราะห์นี้ ทีมวิศวกรรมของ Reddit ได้ให้แอป 2 เวอร์ชัน ได้แก่ เวอร์ชันที่ไม่มีการเพิ่มประสิทธิภาพและอีกเวอร์ชันที่ใช้ R8 รวมถึงเครื่องมือเพิ่มประสิทธิภาพพื้นฐานอีก 2 รายการ ได้แก่ โปรไฟล์พื้นฐาน และโปรไฟล์การเริ่มต้น
โปรไฟล์พื้นฐานจะย้ายขั้นตอนการคอมไพล์แบบ Just in Time (JIT) ออกจากอุปกรณ์ของผู้ใช้ไปยังเครื่องของนักพัฒนาแอปได้อย่างมีประสิทธิภาพ โค้ดที่คอมไพล์แบบ Ahead Of Time (AOT) ที่สร้างขึ้นได้รับการพิสูจน์แล้วว่าช่วยลดทั้งเวลาเริ่มต้นและปัญหาการแสดงผล
เมื่อมีการแพ็กเกจแอป d8 dexer จะนำคลาสและเมธอดมาสร้างไฟล์ classes.dex ของแอป เมื่อผู้ใช้เปิดแอป ระบบจะโหลดไฟล์ DEX เหล่านี้ทีละไฟล์จนกว่าแอปจะเริ่มทำงานได้ การระบุโปรไฟล์การเริ่มต้น จะช่วยให้ d8 ทราบว่าควรแพ็กคลาสและเมธอดใดไว้ในไฟล์ classes.dex ไฟล์แรก โครงสร้างนี้ช่วยให้แอปโหลดไฟล์น้อยลง ซึ่งจะช่วยเพิ่มความเร็วในการเริ่มต้น
Jetpack Macrobenchmark เป็นเครื่องมือหลักสำหรับระยะนี้ ซึ่งช่วยให้วัดการโต้ตอบของผู้ใช้ในสภาพแวดล้อมที่ควบคุมได้อย่างแม่นยำ ทีมได้ใช้ UIAutomator API เพื่อสร้างการทดสอบที่เปิดแอป เลื่อนลง 3 ครั้ง แล้วเลื่อนขึ้นอีกครั้ง เพื่อจำลองเส้นทางของผู้ใช้ทั่วไป
ท้ายที่สุด สิ่งที่จำเป็นในการเขียนการทดสอบประสิทธิภาพมีเพียงสิ่งต่อไปนี้
uiAutomator {
startApp(REDDIT)
repeat(3) {
onView { isScrollable }.fling(Direction.DOWN) }
repeat(3) {
onView {isScrollable }.fling(Direction.UP)
}
}
ข้อมูลการทดสอบประสิทธิภาพยืนยันการสังเกตการณ์ภาคสนามและให้ข้อมูลเชิงลึกที่ละเอียดยิ่งขึ้น แอปที่เพิ่มประสิทธิภาพอย่างเต็มที่เริ่มต้นเร็วขึ้น 55% และผู้ใช้สามารถเริ่มเรียกดูได้เร็วขึ้น 18% นอกจากนี้ แอปที่เพิ่มประสิทธิภาพยังแสดงให้เห็นว่าการคอมไพล์ JIT เกิดขึ้นลดลง 2 ใน 3 และเวลาคอมไพล์ JIT ลดลง 1 ใน 3 การแสดงผลเฟรมดีขึ้น ส่งผลให้มีการแสดงผลเฟรมมากขึ้น 19% ในเส้นทางของผู้ใช้ที่ทดสอบประสิทธิภาพ สุดท้ายนี้ ขนาดแอปเล็กลงกว่า 1 ใน 3
การปรับปรุงประสิทธิภาพโดยรวมของ Reddit
คุณสามารถวัดเวลาในการคอมไพล์ JIT ด้วยเมตริกส่วนการติดตาม Macrobenchmark ที่กำหนดเองได้ดังนี้
val jitCompilationMetric = TraceSectionMetric("JIT Compiling %", label = "JIT compilation")
การเปิดใช้งานเทคโนโลยีเบื้องหลังการเปลี่ยนแปลง: R8
หากต้องการเปิดใช้งาน R8 ในโหมดเต็มรูปแบบ ให้กำหนดค่าไฟล์ app/build.gradle.kts โดยตั้งค่า minifyEnabled และ shrinkResources เป็น true ในประเภทบิลด์รีลีส
android {
...
buildTypes {
release {
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"keep-rules.pro",
)
}
}
}
คุณต้องทำการทดสอบแบบครบวงจรตั้งแต่ต้นจนจบหลังจากทำตามขั้นตอนนี้ เนื่องจากเครื่องมือเพิ่มประสิทธิภาพอาจทำให้เกิดลักษณะการทำงานที่ไม่ต้องการ ซึ่งคุณควรตรวจพบก่อนที่ผู้ใช้จะพบ
ดังที่แสดงไว้ก่อนหน้านี้ในบทความนี้ R8 จะทำการเพิ่มประสิทธิภาพอย่างกว้างขวางเพื่อเพิ่มประโยชน์ด้านประสิทธิภาพให้ได้มากที่สุด R8 จะทำการแก้ไขโค้ดอย่างมาก รวมถึงการเปลี่ยนชื่อ การย้าย และการนำคลาส ฟิลด์ และเมธอดออก หากสังเกตเห็นว่าการแก้ไขเหล่านี้ทำให้เกิดข้อผิดพลาด คุณต้องระบุส่วนของโค้ดที่ R8 ไม่ควรแก้ไขโดยประกาศส่วนเหล่านั้นใน กฎการเก็บรักษา
ทำตามตัวอย่างของ Reddit ในแอปของคุณ
ความสำเร็จของ Reddit กับ R8 เป็นกรณีศึกษาที่มีประสิทธิภาพสำหรับทีมพัฒนาที่ต้องการสร้างผลกระทบที่สำคัญและใช้ความพยายามน้อยในการปรับปรุงประสิทธิภาพของแอป ความสัมพันธ์โดยตรงระหว่างการปรับปรุงทางเทคนิคและการเพิ่มขึ้นของความพึงพอใจของผู้ใช้ในภายหลังเน้นย้ำถึงคุณค่าของการเพิ่มประสิทธิภาพ
นักพัฒนาแอปรายอื่นๆ สามารถได้รับผลลัพธ์ที่คล้ายกันได้โดยทำตามพิมพ์เขียวที่ระบุไว้ในกรณีศึกษาฉบับนี้ ซึ่งได้แก่ การใช้เครื่องมือต่างๆ เช่น คะแนนประสิทธิภาพของแอป เพื่อระบุโอกาส การเปิดใช้งานศักยภาพในการเพิ่มประสิทธิภาพเต็มรูปแบบของ R8 การตรวจสอบข้อมูลจริง และการใช้การทดสอบประสิทธิภาพเพื่อยืนยันและทำความเข้าใจให้ลึกซึ้งยิ่งขึ้น
หากต้องการเริ่มต้นใช้งาน R8 ในแอปของคุณเอง โปรดดูเอกสารและการแนะนำอย่างเป็นทางการที่เพิ่งอัปเดตเกี่ยวกับการเปิดใช้งาน การกำหนดค่า และการแก้ปัญหาเครื่องมือเพิ่มประสิทธิภาพ R8
อ่านต่อ
-
กรณีศึกษา
Monzo เป็นธนาคารดิจิทัลของสหราชอาณาจักรที่มีลูกค้า 15 ล้านรายและมีจำนวนเพิ่มขึ้นเรื่อยๆ เมื่อแอปขยายขนาด ทีมวิศวกรรมได้ระบุว่าเวลาเริ่มต้นแอปเป็นส่วนสำคัญที่ต้องปรับปรุง แต่กังวลว่าการปรับปรุงนี้จะต้องมีการเปลี่ยนแปลงฐานโค้ดอย่างมาก
Ben Weiss, Tracy Agyemang • ใช้เวลาอ่าน 2 นาที
-
กรณีศึกษา
เมื่อไม่นานมานี้ FotMob มีผู้ใช้ Wear OS เพิ่มขึ้นมากที่สุดในวันเดียวในรอบ 5 ปี โดยมีจำนวนเพิ่มขึ้น 2-3 เท่าของค่าเฉลี่ยรายวัน เคล็ดลับคืออะไร ขั้นตอนการติดตั้งข้ามอุปกรณ์อย่างง่ายที่ช่วยให้ผู้ใช้ค้นพบแอป Wear OS ได้โดยตรงจากโทรศัพท์
Garan Jenkin • ใช้เวลาอ่าน 3 นาที
-
กรณีศึกษา
แอป Gratitude ซึ่งเป็นแอปเพื่อการฝึกสติจะสนับสนุนให้ผู้ใช้ทำกิจกรรมอย่างสม่ำเสมอผ่านการจดบันทึกประจำวันขนาดเล็ก ข้อความเสริมสร้างกำลังใจ และบอร์ดวิสัยทัศน์ แอปนี้มีการดาวน์โหลดมากกว่า 6 ล้านครั้ง ได้รับคะแนน 5 ดาว 150,000 ครั้ง และมีการบันทึกรายการบันทึก 100 ล้านรายการ
Amrit Sanjeev, Ash Nohe • ใช้เวลาอ่าน 3 นาที
รับข่าวสาร
รับข้อมูลเชิงลึกล่าสุดเกี่ยวกับการพัฒนาแอป Android ส่งตรงถึงกล่องจดหมายของคุณ ทุกสัปดาห์