กิจกรรมและโปรแกรม

ใช้ R8 เพื่อลดขนาด เพิ่มประสิทธิภาพ และเร่งความเร็วแอป

ใช้เวลาอ่าน 5 นาที
Ben Weiss
วิศวกรนักพัฒนาซอฟต์แวร์สัมพันธ์

ใช้ R8 เพื่อลดขนาด เพิ่มประสิทธิภาพ และเร่งความเร็วแอป

ยินดีต้อนรับสู่วันแรกของสัปดาห์ Android Performance Spotlight

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

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

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

หลังจากอ่านบทความนี้แล้ว โปรดดูวิดีโอแนะนำสัปดาห์ไฮไลต์ด้านประสิทธิภาพเกี่ยวกับเครื่องมือเพิ่มประสิทธิภาพ R8 บน YouTube

R8 ช่วยให้แอปมีประสิทธิภาพมากขึ้นได้อย่างไร

image.png

มาดูขั้นตอนที่สำคัญที่สุดที่เครื่องมือเพิ่มประสิทธิภาพ R8 ใช้เพื่อปรับปรุงประสิทธิภาพของแอปกัน

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

การแทรกเมธอดจะแทนที่การเรียกใช้เมธอดด้วยโค้ดจริง ซึ่งจะช่วยปรับปรุงประสิทธิภาพรันไทม์

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

การลดขนาดโค้ดใช้เพื่อเปลี่ยนชื่อคลาส ฟิลด์ และเมธอดให้สั้นลงและไม่มีความหมาย ดังนั้นแทนที่จะเป็น MyDataModel คุณอาจมีชั้นเรียนชื่อ a ซึ่งเป็นสาเหตุที่ทำให้เกิดความสับสนมากที่สุดเมื่ออ่านสแต็กเทรซจากแอปที่เพิ่มประสิทธิภาพด้วย R8 (โปรดทราบว่าเราได้ปรับปรุงส่วนนี้ใน AGP 9.0 แล้ว)

การลดขนาดทรัพยากรจะลดขนาดแอปเพิ่มเติมโดยการนำทรัพยากรที่ไม่ได้ใช้ออก เช่น ไฟล์ XML และ Drawable

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

กรณีศึกษา: การปรับปรุงประสิทธิภาพของ Reddit ด้วย R8

มาดูตัวอย่างจาก Reddit เพื่อเป็นตัวอย่างหนึ่งของการปรับปรุงประสิทธิภาพที่ R8 มอบให้ หลังจากเปิดใช้ R8 ในโหมดเต็มแล้ว แอป Reddit สำหรับ Android ก็มีประสิทธิภาพดีขึ้นอย่างมากในหลายๆ ด้าน

image.png

คำบรรยาย: R8 ช่วยปรับปรุงประสิทธิภาพแอปของ Reddit ได้อย่างไร

ทีมสังเกตเห็นว่า Cold Startup เร็วขึ้น 40% , ข้อผิดพลาด "แอปพลิเคชันไม่ตอบสนอง" (ANR) ลดลง 30% , การแสดงผลเฟรมดีขึ้น 25% และขนาดแอปเล็กลง 14%

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

อ่านเพิ่มเติมเกี่ยวกับการปรับปรุงได้ในบล็อกของเรา

ผลข้างเคียงที่ไม่ใช่ด้านเทคนิคของการใช้ R8

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

image.png

ดังนั้นเรามาเรียกสิ่งที่มันเป็นกันเถอะ การเพิ่มประสิทธิภาพโดยเจตนาคือคุณธรรม

แนะแนวทางให้คุณสร้างแอปที่มีประสิทธิภาพมากขึ้น

เราทราบว่าคำแนะนำสำหรับนักพัฒนาแอปสำหรับ R8 ของเราจำเป็นต้องได้รับการปรับปรุง เราจึงเริ่มลงมือทำ ตอนนี้คำแนะนำสำหรับนักพัฒนาแอปสำหรับเครื่องมือเพิ่มประสิทธิภาพ R8 สามารถนำไปใช้ได้จริงมากขึ้น และให้คำแนะนำที่ครอบคลุมในการเปิดใช้และแก้ไขข้อบกพร่องของ R8

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

เราได้ขยายคำแนะนำเกี่ยวกับกฎการเก็บรักษาอย่างมาก ซึ่งเป็นกลไกหลักในการควบคุมเครื่องมือเพิ่มประสิทธิภาพ R8 ตอนนี้เรามีส่วนที่อธิบายว่ากฎการเก็บคืออะไร วิธีใช้กฎ และแนวทางปฏิบัติแนะนำในการเขียนและรักษากฎ นอกจากนี้ เรายังให้ Use Case และตัวอย่างที่นำไปใช้ได้จริง ซึ่งจะช่วยให้คุณเข้าใจวิธีป้องกันไม่ให้ R8 นำโค้ดที่จำเป็นในรันไทม์ออกอย่างถูกต้อง เช่น โค้ดที่เข้าถึงผ่านการสะท้อนหรือการใช้อินเทอร์เฟซเนทีฟ JNI

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

เปิดใช้ศักยภาพอย่างเต็มรูปแบบของเครื่องมือเพิ่มประสิทธิภาพ R8

เครื่องมือเพิ่มประสิทธิภาพ R8 จะใช้ "โหมดเต็ม" โดยค่าเริ่มต้นตั้งแต่ปลั๊กอิน Android Gradle เวอร์ชัน 8.0 หากโปรเจ็กต์ได้รับการพัฒนามาเป็นเวลาหลายปี โปรเจ็กต์อาจยังมีแฟ็กล้าสมัยเพื่อปิดใช้ ตรวจสอบบรรทัดนี้ในไฟล์ gradle.properties แล้วนำออก

android.enableR8.fullMode=false // delete this line to enable R8's full potential

ตอนนี้ให้ตรวจสอบว่าคุณได้เปิดใช้ R8 ในไฟล์ build.gradle.kts ของแอปสำหรับตัวแปรที่เผยแพร่แล้วหรือไม่ โดยจะเปิดใช้ได้ด้วยการตั้งค่า isMinifyEnabled และ isShrinkResources เป็น true นอกจากนี้ คุณยังส่งไฟล์การกำหนดค่าเริ่มต้นและที่กำหนดเองในขั้นตอนนี้ได้ด้วย

release {

   isMinifyEnabled = true

   isShrinkResources = true

   proguardFiles(

       getDefaultProguardFile("proguard-android-optimize.txt"),

       "keep-rules.pro"

   )

}

กรณีศึกษา: การปรับปรุงประสิทธิภาพของ Disney+

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

หลังจากแทนที่ proguard-android.txt ด้วย proguard-android-optimize.txt ทีม Disney+ พบว่าประสิทธิภาพของแอปดีขึ้นอย่างมาก

image.png

หลังจากเปิดตัวแอปเวอร์ชันใหม่ที่มีการเปลี่ยนแปลงนี้ต่อผู้ใช้แล้ว Disney+ พบว่าการเริ่มต้นแอปเร็วขึ้น 30% และ ANR ที่ผู้ใช้รับรู้ลดลง 25% 

ปัจจุบันแอปจำนวนมากยังคงใช้ไฟล์ proguard-android.txt ซึ่งมีแฟล็ก -dontoptimize และนี่คือจุดที่การปรับปรุงเครื่องมือของเราเข้ามามีบทบาท

การสนับสนุนเครื่องมือ

ตั้งแต่การอัปเดตฟีเจอร์ใหม่ของ Android Studio Narwhal 3 เป็นต้นไป คุณจะเห็นคำเตือนจากเครื่องมือวิเคราะห์ซอร์สโค้ดเมื่อใช้ proguard-android.txt 

image.png

และตั้งแต่ AGP 9.0 เป็นต้นไป เราจะยุติการสนับสนุนไฟล์นี้โดยสมบูรณ์ ซึ่งหมายความว่าคุณจะต้องย้ายข้อมูลไปยัง proguard-android-optimize.txt

นอกจากนี้ เรายังได้ลงทุนในฟีเจอร์ใหม่ๆ ของ Android Studio เพื่อให้การแก้ไขข้อบกพร่องของโค้ดที่ R8 เพิ่มประสิทธิภาพนั้นง่ายกว่าที่เคย ตั้งแต่ AGP 9.0 เป็นต้นไป คุณสามารถยกเลิกการปกปิดซอร์สโค้ดของ Stack Trace ภายใน Logcat ของ Android Studio สำหรับบิลด์ที่ประมวลผลด้วย R8 โดยอัตโนมัติ ซึ่งจะช่วยให้คุณระบุบรรทัดโค้ดที่ทำให้เกิดปัญหาได้อย่างแม่นยำ แม้ในแอปที่ได้รับการเพิ่มประสิทธิภาพอย่างเต็มที่ก็ตาม เราจะกล่าวถึงเรื่องนี้อย่างละเอียดในบล็อกโพสต์ของวันพรุ่งนี้ในสัปดาห์ Android Performance Spotlight นี้

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

ดูข้อมูลเบื้องต้นเกี่ยวกับสัปดาห์ที่น่าสนใจด้านประสิทธิภาพของเครื่องมือเพิ่มประสิทธิภาพ R8 บน YouTube

📣 เข้าร่วมภารกิจด้านประสิทธิภาพ

ได้เวลาดูสิทธิประโยชน์ด้วยตัวคุณเองแล้ว

เราขอท้าให้คุณเปิดใช้โหมดเต็มของ R8 สำหรับแอปวันนี้

  1. ทำตามคู่มือนักพัฒนาซอฟต์แวร์เพื่อเริ่มต้นใช้งาน เปิดใช้การเพิ่มประสิทธิภาพแอป
  2. ตรวจสอบว่าคุณยังใช้ proguard-android.txt อยู่หรือไม่ แล้วแทนที่ด้วย proguard-android-optimize.txt
  3. จากนั้นวัดผลลัพธ์ อย่าแค่รู้สึกถึงความแตกต่าง แต่ให้ยืนยันความแตกต่างนั้น วัดผลลัพธ์ด้านประสิทธิภาพโดยปรับโค้ดจาก แอปตัวอย่าง Macrobenchmark ใน GitHub เพื่อวัดเวลาเริ่มต้นก่อนและหลัง

เรามั่นใจว่าคุณจะเห็นประสิทธิภาพของแอปดีขึ้นอย่างมีนัยสำคัญ ใช้ #optimizationEnabled หากมีคำถามเกี่ยวกับการเปิดใช้หรือการแก้ปัญหา R8 เราพร้อมช่วยเหลือคุณ

เตรียมคำถามสำหรับเซสชัน Ask Android ในวันศุกร์

ใช้แฮชแท็ก #AskAndroid บนโซเชียลมีเดียเพื่อถามคำถามเกี่ยวกับประสิทธิภาพ เราจะคอยติดตามคำถามของคุณตลอดทั้งสัปดาห์ และจะตอบคำถามบางส่วนในเซสชัน Ask Android เกี่ยวกับประสิทธิภาพในวันศุกร์ที่ 21 พฤศจิกายน โปรดติดตามตอนต่อไปในวันพรุ่งนี้ ซึ่งเราจะเจาะลึกเรื่องการแก้ไขข้อบกพร่องและการแก้ปัญหา แต่ตอนนี้ให้เริ่มต้นใช้งาน R8 เพื่อให้แอปของคุณอยู่ในเส้นทางที่รวดเร็ว

เขียนโดย

อ่านต่อ