เทคนิคการเพิ่มประสิทธิภาพ Flutter Performance และแนวทางปฏิบัติที่ดีที่สุด
เผยแพร่แล้ว: 2023-04-11Flutter เป็นเฟรมเวิร์กข้ามแพลตฟอร์มที่มีประสิทธิภาพซึ่งใช้เพื่อสร้างแอปพลิเคชันที่คอมไพล์อย่างสวยงามและดึงดูดสายตาโดยใช้โค้ดเบสเดียว ด้วยเฟรมเวิร์กนี้ คุณสามารถสร้างโซลูชันสำหรับเว็บ มือถือ และเดสก์ท็อปได้ Flutter มอบรูปลักษณ์และความรู้สึกแบบเนทีฟให้กับแอพบน iOS เช่นเดียวกับอุปกรณ์ Android Flutter มาพร้อมกับประโยชน์อื่นๆ มากมาย เช่น ความยืดหยุ่นและความเร็วในการพัฒนาแอป เป็นที่ชื่นชอบของทีมพัฒนาซอฟต์แวร์ทั่วโลก
อย่างไรก็ตาม เพื่อให้ได้ผลลัพธ์ที่ดีที่สุดจากเฟรมเวิร์กที่น่าทึ่งนี้ คุณต้องดูแลการปรับแต่งประสิทธิภาพของแอพ Flutter ในระหว่างกระบวนการพัฒนาเอง แอพ Flutter ที่ได้รับการปรับแต่งไม่ดีมักจะทำงานช้าและไม่ตอบสนอง ใช้พลังงานมากขึ้น และต้องใช้เวลาและทรัพยากรมากขึ้นในระหว่างกระบวนการพัฒนา ซึ่งจะส่งผลเสียต่อประสบการณ์ของผู้ใช้และการให้คะแนนของ App Store ตลอดจนงบประมาณของเจ้าของแอป แต่ด้วยการใช้เทคนิคและกลยุทธ์ประสิทธิภาพที่เหมาะสม คุณสามารถพัฒนาแอพ Flutter ประสิทธิภาพสูงที่ให้ UX ที่ราบรื่น โพสต์นี้กล่าวถึงแนวทางปฏิบัติที่ดีที่สุดในการเพิ่มประสิทธิภาพการทำงานของ Flutter
แนวทางปฏิบัติที่ดีที่สุดสำหรับการเพิ่มประสิทธิภาพการทำงานของ Flutter
ใช้วิดเจ็ตแทนฟังก์ชัน
การใช้ Widgets แทนฟังก์ชั่นเป็นเทคนิคสำคัญในการเพิ่มประสิทธิภาพของแอพพลิเคชั่น Flutter แม้ว่าฟังก์ชันต่างๆ จะกำหนดพฤติกรรมของแอปและจัดการข้อมูล แต่วิดเจ็ตคือบล็อกการสร้าง UI ที่ผู้ใช้แอปโต้ตอบด้วย หากคุณใช้วิดเจ็ตแทนฟังก์ชั่น แอพมือถือ Flutter ของคุณจะมี UI แบบโต้ตอบและดึงดูดสายตา
ต่อไปนี้เป็นตัวอย่างวิธีใช้วิดเจ็ตแทนฟังก์ชันในแอปพลิเคชัน Flutter ของคุณ
การสร้างวิดเจ็ตแบบกำหนดเอง
นักพัฒนามักจะกำหนดฟังก์ชั่นสำหรับสร้างชิ้นส่วนของ UI อย่างไรก็ตาม มีเทคนิคที่ดีกว่าในการสร้าง UI: สร้างวิดเจ็ตแบบกำหนดเองที่สรุปอินเทอร์เฟซผู้ใช้และลักษณะการทำงาน วิธีนี้จะช่วยให้คุณสามารถนำวิดเจ็ตกลับมาใช้ใหม่ได้ในส่วนต่างๆ ของแอป และโค้ดของคุณจะกลายเป็นแบบโมดูลาร์และบำรุงรักษาได้มากขึ้น
การใช้วิดเจ็ตในตัว
หากคุณไม่ต้องการสร้างวิดเจ็ตแบบกำหนดเอง คุณสามารถเลือกจากวิดเจ็ตในตัวที่มีอยู่มากมายที่ Flutter framework นำเสนอ คุณสามารถพัฒนาอินเทอร์เฟซที่ซับซ้อนได้โดยไม่ต้องเขียนโค้ดแบบกำหนดเองหากคุณใช้วิดเจ็ตในตัวเหล่านี้ ตัวอย่างเช่น วิดเจ็ต TextField ช่วยให้คุณสร้างช่องป้อนข้อความ ในขณะที่วิดเจ็ต ListView ช่วยให้คุณแสดงรายการแบบเลื่อนได้
การรวมวิดเจ็ตหลายรายการ
หากต้องการสร้างอินเทอร์เฟซผู้ใช้ที่ซับซ้อนยิ่งขึ้น ขอแนะนำให้รวมวิดเจ็ตหลายรายการเข้าด้วยกัน ตัวอย่างเช่น คุณสามารถใช้วิดเจ็ตแถวหรือคอลัมน์สำหรับการเรียงซ้อนหรือจัดแนววิดเจ็ตหลายรายการในแนวนอนหรือแนวตั้ง
การแบ่งวิดเจ็ตขนาดใหญ่ออกเป็นวิดเจ็ตย่อย
เป็นแนวปฏิบัติที่ดีในการใช้วิดเจ็ตไร้สัญชาติหากเป็นไปได้ ระหว่างการเปลี่ยนสถานะ Flutter จะวาดวิดเจ็ตที่มีสถานะใหม่ ซึ่งหมายความว่านักพัฒนาต้องสร้างวิดเจ็ตใหม่ทั้งหมด และถ้าขนาดของ build tree มีขนาดใหญ่ คุณจะต้องใช้ทรัพยากรหลายอย่างเพื่อสร้างใหม่ เพื่อแก้ไขปัญหานี้ ให้วิดเจ็ตของคุณเป็นแบบโมดูลาร์และมีขนาดเล็กเพื่อลดขนาดของฟังก์ชันการสร้าง ในระยะสั้น แบ่งวิดเจ็ตขนาดใหญ่ออกเป็นวิดเจ็ตย่อยที่มีขนาดเล็กลง
เมื่อใช้วิดเจ็ตแทนฟังก์ชัน UI ของแอปจะยืดหยุ่นและนำมาใช้ซ้ำได้มากขึ้น แต่ฟังก์ชันต่างๆ จำเป็นต่อการจัดการข้อมูลและกำหนดพฤติกรรมของแอป ดังนั้นแนวทางปฏิบัติที่ดีที่สุดตามด้วยนักพัฒนาแอป Flutter ที่มีประสบการณ์มากที่สุดคือการใช้ฟังก์ชันควบคู่ไปกับวิดเจ็ต
ปรับเลย์เอาต์ให้เหมาะสมและใช้คำหลัก 'const'
ความซับซ้อนของเลย์เอาต์ของแอปพลิเคชัน Flutter เป็นหนึ่งในปัจจัยสำคัญที่ส่งผลต่อประสิทธิภาพของแอป หลีกเลี่ยงการใช้เค้าโครงที่ซ้อนกัน ใช้เมื่อจำเป็นเท่านั้น นอกจากนี้ คุณควรพยายามทำให้แผนผังวิดเจ็ตของคุณตื้นที่สุดเท่าที่จะทำได้
การใช้คำหลัก 'const' เป็นวิธีปฏิบัติที่ได้รับความนิยมในการเพิ่มประสิทธิภาพแอพ Flutter ในขณะที่สร้างวิดเจ็ตแบบกำหนดเองหรือใช้วิดเจ็ต Flutter ในตัว ให้ใช้คำหลัก 'const' ทุกที่ที่คุณทำได้ แนวทางปฏิบัตินี้จะทำให้วิดเจ็ตของคุณไม่เปลี่ยนรูป มันจะลดความจำเป็นในการสร้างวิดเจ็ตใหม่ซึ่งนำไปสู่การปรับปรุงประสิทธิภาพ นี่คือเหตุผล – หากคุณใช้ 'const' สภาพแวดล้อมการพัฒนา Flutter จะสร้างเฉพาะวิดเจ็ตที่ต้องอัปเดตใหม่เท่านั้น จะไม่มีการเปลี่ยนแปลงในวิดเจ็ตเมื่อมีการเรียกใช้ setState และการสร้างวิดเจ็ตใหม่จะไม่เกิดขึ้น แนวทางปฏิบัติที่แนะนำอีกประการหนึ่งคือการบันทึกวงจรของ CPU และใช้ร่วมกับตัวสร้าง 'const'
ใช้เทคนิคการเขียนโปรแกรมแบบอะซิงโครนัส
ในระหว่างการพัฒนาแอพ Flutter คุณต้องตรวจสอบว่าโค้ดทำงานแบบซิงโครนัสหรือแบบอะซิงโครนัส เมื่อใช้เทคนิคการเขียนโปรแกรมแบบอะซิงโครนัส คุณสามารถหลีกเลี่ยงการบล็อกเธรดหลัก และสิ่งนี้จะรักษาการตอบสนองของแอปพลิเคชัน Flutter ของคุณ แต่การเขียนโค้ดแอพ Flutter แบบอะซิงโครนัสนั้นท้าทาย งานต่างๆ เช่น การอัปเกรดและการดีบักกลายเป็นเรื่องยากในการดำเนินการ เพื่อแก้ไขปัญหานี้ ให้ใช้เทคนิคการเขียนโปรแกรมแบบอะซิงโครนัส เช่น 'Futures' และ 'async/await' ตัวอย่างเช่น การใช้ 'async/await' นักพัฒนา Flutter สามารถเขียนโค้ดแบบอะซิงโครนัสในรูปแบบซิงโครนัส ซึ่งสามารถเพิ่มความสามารถในการอ่านและการบำรุงรักษาของโค้ด
ดูวิธีใช้ 'async/await' ใน Flutter
ขั้นตอนที่ 1
ใช้คีย์เวิร์ด 'async' กำหนดฟังก์ชันอะซิงโครนัสก่อนนิยามฟังก์ชัน
fetchData ในอนาคต () async {
// …
}
ขั้นตอนที่ 2
ใช้คำหลักที่รอคอยภายในฟังก์ชันแบบอะซิงโครนัสเพื่อรอผลลัพธ์ของการดำเนินการแบบอะซิงโครนัส
fetchData ในอนาคต () async {
คำตอบสุดท้าย = กำลังรอ http.get('https://example.com/data');

// …
}
ที่นี่ ฟังก์ชัน http.get() คืนค่าอนาคต นี่แสดงถึงการดำเนินการแบบอะซิงโครนัสที่อาจใช้เวลาในการดำเนินการให้เสร็จสิ้น คีย์เวิร์ด wait ช่วยให้โปรแกรมสามารถรอผลลัพธ์ของการดำเนินการนี้ก่อนที่จะดำเนินการต่อ
ขั้นตอนที่ 3
เมื่อคุณเรียกใช้ฟังก์ชันแบบอะซิงโครนัส ให้ใช้คีย์เวิร์ด wait เพื่อรอให้ฟังก์ชันเสร็จสิ้น
รอดึงข้อมูล ();
คีย์เวิร์ด wait จะช่วยให้โปรแกรมสามารถรอให้ฟังก์ชัน fetchData() เสร็จสิ้นก่อนที่จะไปยังโค้ดบรรทัดถัดไป
สร้างและเรนเดอร์เฟรมใน 16 ms
การสร้างและเรนเดอร์เฟรมในแอปของคุณภายใน 16 มิลลิวินาทีเป็นอีกหนึ่งเทคนิคการเพิ่มประสิทธิภาพแอปพลิเคชัน Flutter ทั่วไป งานในการสร้างและแสดงผลจำเป็นต้องมีสองเธรดแยกกัน สำหรับงานแต่ละอย่าง คุณมีเวลา 16ms แต่เพื่อหลีกเลี่ยงเวลาแฝงและเพิ่มประสิทธิภาพของแอป คุณต้องลด 16ms นี้ลงเหลือ 8ms ซึ่งหมายถึงการพัฒนาเฟรมภายใน 8 มิลลิวินาที และเรนเดอร์ภายใน 8 มิลลิวินาที เพื่อให้เวลาทั้งหมดไม่เกิน 16 มิลลิวินาที
โดยสรุปแล้ว ให้สร้างและเรนเดอร์เฟรมภายใน 16 มิลลิวินาทีในจอแสดงผล 60 Hz คุณอาจสงสัยว่าการลดเวลาจะขัดขวางคุณภาพการแสดงผลหรือไม่ คำตอบคือไม่ การลดเวลารวมของการพัฒนาเฟรมและการเรนเดอร์ลงเหลือ 16ms จะไม่ทำให้เกิดความแตกต่างในการมองเห็น แต่จะปรับปรุงอายุแบตเตอรี่ของอุปกรณ์และป้องกันปัญหาความร้อน วิธีนี้จะช่วยเร่งประสิทธิภาพของแอปอย่างมากบนอุปกรณ์ขนาดเล็ก ภาพเคลื่อนไหวของแอพ Flutter ของคุณจะราบรื่นและผู้ใช้ของคุณจะได้รับประสบการณ์ UX ที่น่าพึงพอใจ
จำกัด การใช้ความทึบ
ลดการใช้วิดเจ็ต Opacity และการตัดให้เหลือน้อยที่สุด เมื่อคุณใช้ความทึบ วิดเจ็ตจะสร้างตัวเองใหม่หลังจากแต่ละเฟรม สิ่งนี้สามารถขัดขวางประสิทธิภาพของแอปพลิเคชัน Flutter และอีกมากมายหากมีภาพเคลื่อนไหว เพื่อหลีกเลี่ยงสถานการณ์ดังกล่าว คุณสามารถใช้ Opacity กับรูปภาพได้โดยตรง แทนที่จะใช้วิดเจ็ต Opacity สิ่งนี้จะเพิ่มความเร็วของงานและลดการใช้ทรัพยากร
วิดเจ็ต Opacity ช่วยให้คุณซ่อนวิดเจ็ตอื่นบนหน้าจอได้โดยการห่อวิดเจ็ตไว้ข้างใน หลายคนใช้วิดเจ็ต Opacity เพื่อซ่อนวิดเจ็ตเฉพาะ การซ่อนวิดเจ็ตเป็นเรื่องปกติในภาษาการเขียนโปรแกรม เช่น Objective-C แต่ใน Flutter การซ่อนวิดเจ็ตบนหน้าจอนานเกินไปอาจกลายเป็นเรื่องที่มีราคาแพง มีวิธีทดแทนที่คุ้มค่ากว่าสำหรับวิธีนี้ คุณสามารถสร้างวิดเจ็ตใหม่แทนการซ่อนโดยใช้วิธีการที่อนุญาตให้คุณสร้างใหม่โดยไม่ต้องใช้วิดเจ็ตข้อความ และหากคุณต้องการแสดงวิดเจ็ตนั้นบนหน้าจอ คุณสามารถใช้วิดเจ็ตการมองเห็นแทนความทึบได้ ไม่เกี่ยวข้องกับค่าความทึบที่เป็นเศษส่วน การมองเห็นมีสองสถานะ: มองเห็นได้และมองไม่เห็น
ลดขนาดแอพ
ทีมพัฒนามักจะลงเอยด้วยการใช้แพ็คเกจ โค้ด วิดเจ็ต และสคริปต์หลายชุดในระหว่างกระบวนการพัฒนาแอพ อย่างไรก็ตาม การจัดเก็บข้อมูลจำนวนมากเช่นนี้อาจส่งผลเสียต่อประสิทธิภาพของแอปเนื่องจากใช้หน่วยความจำสูง
ปัญหานี้สามารถแก้ไขได้โดยใช้เครื่องมือที่เรียกว่า Gradle เครื่องมือนี้ช่วยให้คุณลดขนาดของแอป คุณยังสามารถใช้ระบบบรรจุภัณฑ์ที่ Google แนะนำสำหรับจุดประสงค์นี้ ระบบบรรจุภัณฑ์นี้ช่วยให้คุณสร้าง Android App Bundle ได้ ด้วย App Bundle คุณจะดาวน์โหลดโค้ดต้นฉบับได้จาก Google Play Store ที่นี่คุณจะพบแอพที่เข้ากันได้กับสถาปัตยกรรมแพลตฟอร์มและอุปกรณ์
ลดคำขอเครือข่าย
จำนวนคำขอเครือข่ายอาจส่งผลต่อประสิทธิภาพของแอพ Flutter พยายามลดคำขอเครือข่ายให้มากที่สุด คุณสามารถใช้กลไกการแคช เช่น StreamBuilder หรือ FutureBuilder เพื่อหลีกเลี่ยงคำขอเครือข่ายซ้ำ
ใช้โครงสร้างข้อมูลที่มีประสิทธิภาพ
หลีกเลี่ยงการใช้โครงสร้างข้อมูลขนาดใหญ่ เช่น แผนที่หรือรายการ เมื่อคุณต้องการจัดการกับข้อมูลจำนวนมากในแอปพลิเคชัน Flutter ของคุณ ให้พิจารณาใช้โครงสร้างข้อมูลที่มีประสิทธิภาพ เช่น LinkedHashMap หรือ Set โครงสร้างข้อมูลเหล่านี้ดีขึ้นในแง่ของประสิทธิภาพและการใช้หน่วยความจำ
เพิ่มประสิทธิภาพรูปภาพ
รูปภาพสามารถกลายเป็นสาเหตุของปัญหาด้านประสิทธิภาพ โดยเฉพาะอย่างยิ่งหากมีขนาดใหญ่มากและไม่ได้รับการปรับแต่งอย่างเหมาะสม นี่คือเหตุผลที่คุณควรบีบอัดรูปภาพและปรับขนาดให้เหมาะสม สำหรับสิ่งนี้ คุณสามารถใช้เครื่องมือเช่น 'flutter_svg' เครื่องมือนี้ช่วยให้คุณแสดงกราฟิกแทนภาพแรสเตอร์
ใช้เครื่องมือประสิทธิภาพ Flutter
Flutter มาพร้อมกับเครื่องมือเพิ่มประสิทธิภาพมากมาย เครื่องมือเหล่านี้ช่วยให้นักพัฒนาแอพ Flutter ตรวจสอบและเพิ่มประสิทธิภาพของแอพพลิเคชั่น Flutter ตัวอย่างเช่น Flutter DevTools ช่วยให้คุณวิเคราะห์และแสดงภาพประสิทธิภาพของแอปตามเมตริกต่างๆ เช่น การใช้งาน CPU การใช้หน่วยความจำ และอัตราเฟรม
ทำโปรไฟล์แอพ
การทดสอบประสิทธิภาพการกระพือเป็นสิ่งสำคัญ สร้างโปรไฟล์แอพ Flutter ของคุณเป็นระยะๆ เพื่อระบุปัญหาประสิทธิภาพการทำงานใน Dart code ตัวอย่างของปัญหาดังกล่าว ได้แก่ i/o, แบนด์วิธ และการขาดการกระตุก แก้ไขปัญหาโดยเร็วที่สุด เครื่องมือเช่น Flutter Observatory จะช่วยคุณในการระบุการดำเนินงานที่มีค่าใช้จ่ายสูงและปรับให้เหมาะสม
ปิดความคิด
การเพิ่มประสิทธิภาพแอพ Flutter ของคุณเพื่อประสิทธิภาพเป็นสิ่งสำคัญ แอพ Flutter ที่ปรับให้เหมาะสมช่วยให้มั่นใจได้ถึงความเข้ากันได้ของอุปกรณ์ ให้ UX ที่ยอดเยี่ยม ประหยัดแบตเตอรี่ ลดค่าใช้จ่ายในการพัฒนาแอพ และปรับปรุงอันดับแอพสโตร์ เทคนิคการเพิ่มประสิทธิภาพ Flutter ดังกล่าวเป็นแนวทางปฏิบัติที่รู้จักกันดีที่สุดซึ่งได้รับความไว้วางใจจากนักพัฒนานับไม่ถ้วนทั่วโลก ดังนั้น ร่วมเป็นพันธมิตรกับบริษัทพัฒนาแอพ Flutter ที่เป็นมืออาชีพและมีประสบการณ์ บริษัทที่มีความเชี่ยวชาญจะดำเนินการโครงการของคุณตามแนวทางปฏิบัติที่ดีที่สุดและกลยุทธ์ที่ชาญฉลาดเพื่อส่งมอบผลิตภัณฑ์ปลายทาง Flutter ที่มีประสิทธิภาพสูงให้กับคุณ
