วิธีที่ Reddit ใช้เครื่องมือเพิ่มประสิทธิภาพ R8 เพื่อปรับปรุงประสิทธิภาพให้ได้ผลลัพธ์สูง
อ่าน 4 นาที
ในโลกของแอปพลิเคชันบนอุปกรณ์เคลื่อนที่ในปัจจุบัน ประสบการณ์ของผู้ใช้ที่ราบรื่นไม่ใช่แค่ฟีเจอร์ แต่เป็นสิ่งจำเป็น เวลาในการโหลดที่ช้า อินเทอร์เฟซที่ไม่ตอบสนอง และความไม่เสถียรอาจเป็นอุปสรรคสำคัญต่อการมีส่วนร่วมและการรักษาผู้ใช้ ในระหว่างการทำงานร่วมกับทีมความสัมพันธ์กับนักพัฒนาแอป Android ทีมวิศวกรของ Reddit ได้ใช้คะแนนประสิทธิภาพของแอปเพื่อประเมินแอปของตน หลังจากประเมินประสิทธิภาพแล้ว ทีมวิศวกรพบว่ามีศักยภาพในการปรับปรุงอย่างมาก จึงตัดสินใจทำตามขั้นตอนเพื่อเปิดใช้ความสามารถเต็มรูปแบบของ R8 ซึ่งเป็นเครื่องมือเพิ่มประสิทธิภาพแอป Android โครงการริเริ่มที่มุ่งเน้นนี้ส่งผลให้เวลาเริ่มต้นดีขึ้นอย่างเห็นได้ชัด เฟรมช้าหรือเฟรมหยุดนิ่งและ ANR ลดลง และคะแนนใน Play Store โดยรวมเพิ่มขึ้น กรณีศึกษานี้จะอธิบายวิธีที่ Reddit บรรลุผลลัพธ์ที่น่าประทับใจเหล่านี้
เครื่องมือเพิ่มประสิทธิภาพ R8 ช่วย Reddit ได้อย่างไร
เครื่องมือเพิ่มประสิทธิภาพ R8 เป็นเครื่องมือพื้นฐานสำหรับการเพิ่มประสิทธิภาพใน Android การปรับปรุงประสิทธิภาพของแอปต้องใช้หลายขั้นตอน ลองมาดูขั้นตอนที่มีผลลัพธ์มากที่สุดกัน
- Tree Shaking เป็นขั้นตอนที่สำคัญที่สุดในการลดขนาดของแอป ในขั้นตอนนี้ ระบบจะนำโค้ดที่ไม่ได้ใช้จากทรัพยากร Dependency ของแอปและตัวแอปเองออก
- การแทรกเมธอดจะแทนที่การเรียกเมธอดด้วยโค้ดจริง ซึ่งจะช่วยให้แอปมีประสิทธิภาพมากขึ้น
- การผสานชั้นเรียนและกลยุทธ์อื่นๆ จะนำมาใช้เพื่อทำให้โค้ดกระชับขึ้น ในขั้นตอนนี้ไม่ได้เน้นที่ความสามารถในการอ่านซอร์สโค้ดของมนุษย์อีกต่อไป แต่เป็นการทำให้โค้ดที่คอมไพล์แล้วทำงานได้อย่างรวดเร็ว ดังนั้นการแยกส่วน เช่น อินเทอร์เฟซหรือลำดับชั้นของคลาสจึงไม่เกี่ยวข้องในที่นี้และจะถูกนำออก
- การย่อตัวระบุจะเปลี่ยนชื่อคลาส ฟิลด์ และเมธอดเป็นชื่อที่สั้นลงและไม่มีความหมาย ดังนั้นแทนที่จะเป็น
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 ของ Google ได้ทำการเปรียบเทียบอย่างละเอียดเพื่อยืนยันผลลัพธ์ที่ได้ในเชิงวิทยาศาสตร์และทดลองเพิ่มประสิทธิภาพเพิ่มเติม สำหรับการวิเคราะห์นี้ ทีมวิศวกรของ Reddit ได้จัดเตรียมแอป 2 เวอร์ชัน ได้แก่ เวอร์ชันที่ไม่มีการเพิ่มประสิทธิภาพและเวอร์ชันที่ใช้ R8 รวมถึงเครื่องมือเพิ่มประสิทธิภาพพื้นฐานอีก 2 รายการ ได้แก่ โปรไฟล์ Baseline และโปรไฟล์การเริ่มต้น
โปรไฟล์พื้นฐานจะย้ายขั้นตอนการคอมไพล์แบบทันที (JIT) ออกจากอุปกรณ์ของผู้ใช้และไปยังเครื่องของนักพัฒนาซอฟต์แวร์ได้อย่างมีประสิทธิภาพ โค้ดที่คอมไพล์ล่วงหน้า (AOT) ที่สร้างขึ้นได้รับการพิสูจน์แล้วว่าช่วยลดเวลาเริ่มต้นและปัญหาการแสดงผลได้
เมื่อแพ็กเกจแอปแล้ว โปรแกรมแปลง DEX เป็น D8 จะนำคลาสและเมธอดมาสร้างไฟล์ classes.dex ของแอป เมื่อผู้ใช้เปิดแอป ระบบจะโหลดไฟล์ DEX เหล่านี้ทีละไฟล์จนกว่าแอปจะเริ่มทำงานได้ การระบุโปรไฟล์ Startup จะช่วยให้ 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% นอกจากนี้ แอปที่เพิ่มประสิทธิภาพยังลดการเกิดการคอมไพล์แบบ Just-In-Time (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 นาที -
กรณีศึกษาทีมได้สร้างฐานของโค้ด UI ที่สร้างขึ้นโดยใช้ AI ซึ่งมีขนาดเล็กกว่าการติดตั้งใช้งานเดิม 50% ขณะเดียวกันก็ลดเวลาการทำงานของ AI Agent ได้ 35% ลดการแลกเปลี่ยนระหว่างวิศวกรกับ Agent ได้ 32% และลดต้นทุนโทเค็นได้ 33%
Pavlo Stavytskyi, Rebecca Franks • อ่าน 11 นาที -
กรณีศึกษาWhatsApp เป็นแพลตฟอร์มการรับส่งข้อความที่ใหญ่ที่สุดในโลก โดยให้บริการแก่ผู้ใช้หลายพันล้านคนทั่วโลก โดยเป็นเครื่องมือสื่อสารเริ่มต้นสำหรับผู้คนในภูมิภาคต่างๆ ซึ่งเชื่อมต่อผู้ใช้ผ่านการรับส่งข้อความส่วนตัวที่เชื่อถือได้และปลอดภัย
Niharika Arora, Tracy Agyemang, Mayank Jain • ใช้เวลาอ่าน 8 นาที
รับข้อมูลเชิงลึกด้านการพัฒนา Android ล่าสุดส่งตรงถึงกล่องจดหมายของคุณทุกสัปดาห์