แชร์ผ่าน


เพิ่มประสิทธิภาพการโหลดแอปหรือหน้าเว็บเพื่อประสิทธิภาพสูงสุด

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

  1. โหลดข้อมูลอย่างเร็ว
  2. การคำนวณที่มีประสิทธิภาพ
  3. การลดขนาดทรัพยากรที่จำเป็น

แต่ละพื้นที่เหล่านี้มีรูปแบบการต่อต้านที่พบบ่อยหลายประการ

โหลดข้อมูลอย่างเร็ว

ปฏิบัติตามหลักเกณฑ์เหล่านี้เพื่อให้ได้แอปโหลดข้อมูลที่รวดเร็ว

หลีกเลี่ยงการเติมคอลเลกชันที่มีข้อมูลจำนวนมากโดยตรง

บางครั้งผู้สร้างใช้ ClearCollect() เพื่อคัดลอกข้อมูลจากเซิร์ฟเวอร์ไปยังคอลเลกชันในแอปของตน แนวทางปฏิบัตินี้เป็นวิธีแก้ปัญหาสำหรับข้อจำกัดในการมอบหมายในแหล่งที่มา หรือเพราะพวกเขาวางแผนที่จะใช้คอลเลกชันในแอปเพื่อวัตถุประสงค์อื่น การใช้ ClearCollect() อาจเพิ่มความเร็วของแอปได้เมื่อใช้คอลเลกชันในภายหลัง อย่างไรก็ตาม ควรใช้ความระมัดระวังขณะใช้งาน การใช้ ClearCollect ในลักษณะนี้อาจทำให้เวลาในการโหลดแอปช้าลงหรือเมื่อนำทางระหว่างหน้าต่างๆ ClearCollect() ต้องเสร็จสิ้นก่อนจึงจะสามารถดูข้อมูลในแกลเลอรีหรือตารางได้ ขั้นตอนนี้อาจใช้เวลานานหากมีข้อมูลจำนวนมาก หรือหากคุณใช้วิธีการนี้กับแหล่งข้อมูลมากเกินไป คอลเลกชันเหมาะที่สุดที่จะใช้ในสถานการณ์ที่มีข้อมูลน้อย และคุณจำเป็นต้องทำการคำนวณจำนวนมากในคอลเลกชัน ตัวอย่างเช่น การใช้คอลเลกชันอย่างเหมาะสมคือตะกร้าสั่งซื้อออนไลน์ ลูกค้าอาจอัปเดตและลบรายการหลายครั้งก่อนที่จะเลือกยืนยันคำสั่งซื้อ นอกจากนี้ คุณยังสามารถเพิ่มคอลเลกชันด้วยรายการข้อมูลเพิ่มเติม เช่น ส่วนลดที่เป็นไปได้ ไฮไลต์ ฯลฯ ข้อมูลที่เป็น 'อ่านอย่างเดียว' ควรเข้าถึงได้แบบเนทีฟ โดยไม่ต้องนำเข้าคอลเลกชัน

พิจารณาหลีกเลี่ยงการเรียก Power Automate ในการเเพิ่มข้อมูลคอลเลกชัน

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

หลีกเลี่ยงการใช้ SaveData() และ LoadData() เป็นสถานการณ์ออฟไลน์เต็มรูปแบบ

ผู้สร้างบางคนใช้ ClearCollect() และ SaveData() เพื่อจัดเก็บข้อมูลสำหรับการใช้งานแบบออฟไลน์ทั่วไป คุณสามารถใช้ Save Data() เพื่อบันทึกคอลเลกชันลงในอุปกรณ์ของคุณ และใช้ Load Data() เพื่อโหลดเมื่อคุณออฟไลน์ อย่างไรก็ตาม ไม่แนะนำแนวทางนี้สำหรับอินสแตนซ์ที่มีข้อมูลจำนวนมากหรือหากข้อมูลมีความซับซ้อน มันทำให้แอปของคุณช้าลงเพราะต้องรอให้ ClearCollect() เสร็จสิ้นก่อนจึงจะสามารถแสดงข้อมูลได้ คุณควรใช้ SaveData() และ LoadData() สำหรับสถานการณ์ข้อมูลขนาดเล็กและเรียบง่ายเท่านั้น เช่น การกำหนดค่าตามความชอบและรายการแบบสั้น วิธีที่ดีกว่าในการทำงานกับข้อมูลออฟไลน์จำนวนมากคือการใช้คุณลักษณะออฟไลน์ของ Power Apps ที่ทำงานร่วมกับ Dataverse คุณลักษณะนี้สามารถจัดการข้อมูลขนาดใหญ่และซับซ้อนได้อย่างมีประสิทธิภาพมากขึ้น

ใช้การเลือกคอลัมน์ที่ชัดเจน

การเลือกคอลัมน์ที่ชัดเจนเปิดอยู่ตามค่าเริ่มต้น อย่างไรก็ตาม ผู้สร้างบางรายปิดคุณลักษณะนี้ ปัญหาคือเมื่อเปิดการเลือกคอลัมน์ที่ชัดเจน (ECS) บางครั้งคอลัมน์จะไม่ถูกเรียกจากแหล่งข้อมูล หากข้อมูลถูกดึงเข้าสู่คอลเลกชันเป็นครั้งแรก เนื่องจากบางตารางอาจมีหลายคอลัมน์ ECS จะคำนวณคอลัมน์ที่จำเป็นในการดึงข้อมูลโดยอัตโนมัติตามการใช้งานในตัวควบคุม (เช่น แกลเลอรีและฟอร์ม) เนื่องจากบางตารางสามารถมีหลายคอลัมน์ได้ การลดขนาดของการดาวน์โหลดจึงสามารถเพิ่มความเร็วในการทำงานได้ บางตารางสามารถมีได้ตั้งแต่ร้อยคอลัมน์ขึ้นไป หากแอปของคุณต้องการใช้เพียง 10 คอลัมน์ และคุณดึงคอลัมน์ทั้งหมดออกจากตารางที่มี 100 คอลัมน์ แสดงว่าคุณกำลังดึงข้อมูลลงมามากกว่าที่คุณต้องการจริงถึงสิบเท่า

ปัญหาส่วนใหญ่เกิดขึ้นเมื่อนำข้อมูลเข้าสู่คอลเลกชัน หากมีการอ้างอิงคอลัมน์อย่างชัดเจนในตัวควบคุม ECS ก็ทำงานได้ดี และโดยทั่วไปแล้ว ECS จะใช้ได้กับคอลเลกชัน อย่างไรก็ตาม สายคอลัมน์จะหายไปในบางครั้งเมื่อข้อมูลเคลื่อนผ่านคอลเลกชันและตัวแปร และดังนั้น Power Apps จึงอาจสูญเสียการติดตามคอลัมน์ที่ควรดึงมา ในการแก้ไขปัญหานี้ คุณสามารถบังคับให้ Power Apps "จดจำ" คอลัมน์ได้โดยใช้ฟังก์ชัน ShowColumns ตัวอย่าง

    ClearCollect(
        MyColTable, 
        ShowColumns(Filter(BankAccounts, AcountNo = 32),
        "Col1", 
        "Col2", 
        "Col3")
    );

โดยที่ Col1, Col2 และ Col3 เป็นคอลัมน์ที่คุณคาดว่าจะดึงมาจากแหล่งข้อมูล (เช่น แหล่งข้อมูล Account)

หรือคุณสามารถเพิ่มตัวควบคุมที่ซ่อนอยู่ให้กับฟอร์มของคุณที่อ้างอิงคอลัมน์ได้ ซึ่งจะบังคับให้ Power Apps "จดจำ" คอลัมน์

การคำนวณที่รวดเร็ว

การคำนวณที่รวดเร็ว (หรือมีประสิทธิภาพ) เป็นเป้าหมายด้านประสิทธิภาพในตัวเอง สำหรับข้อมูลเพิ่มเติม ให้ดูที่ Fast (efficient) calculations อย่างไรก็ตาม มีรูปแบบการต่อต้านทั่วไปบางประการที่อาจส่งผลต่อการโหลดแอปเช่นกัน ดังนั้นเราจึงพูดคุยเรื่องเหล่านี้ที่นี่ ด้านล่างนี้คือรายการการเพิ่มประสิทธิภาพที่คุณควรพิจารณาซึ่งอาจส่งผลต่อการเปิดแอปหรือการนำทางหน้าเว็บ

การใช้ App.Formulas

ในอดีตผู้สร้างหลายคนใส่ข้อมูลเพื่อการคำนวณจำนวนมากใน OnStart เมื่อคุณวางนิพจน์ใน OnStart จะบังคับให้ Power Apps เรียกใช้นิพจน์นั้นอย่างแม่นยำเมื่อแอปเริ่มทำงานและก่อนสิ่งอื่นใด อย่างไรก็ตาม ด้วยการแนะนำ App.Formulas คุณสามารถปล่อยให้ Power Apps ตัดสินใจว่าจะรันนิพจน์เมื่อใด Power Apps สามารถเรียกใช้สูตร 'ภายในเวลา' ก่อนที่จะจำเป็น สำหรับข้อมูลเพิ่มเติม ให้ดูที่ App formulas ใช้ App.Formulas เพื่อแยกสูตรของคุณออกเป็นส่วนๆ ที่ Power Apps สามารถจัดเรียงได้อย่างมีประสิทธิภาพมากขึ้นสำหรับการดำเนินการ

ใช้ในเวลาเดียวกัน

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

ใช้ประสิทธิภาพขั้นสูงสำหรับการควบคุมที่ซ่อนอยู่

เมื่อเปิดใช้งานตามค่าเริ่มต้นในแอปใหม่ทั้งหมดที่สร้างขึ้นตั้งแต่เดือนธันวาคม 2022 Power Apps จะไม่แสดงการควบคุมใดๆ ที่ไม่สามารถมองเห็นได้ในตอนแรก

การลดขนาดทรัพยากรที่จำเป็น

ลดขนาดทรัพยากรที่จำเป็นเพื่อเปิดแอปหรือหน้าจอ ความพยายามนี้รวมถึงการกำหนดขอบเขตหรือแบ่งพาร์ติชันทรัพยากรที่แอปหรือหน้าจอของคุณต้องการอย่างระมัดระวัง ด้านล่างนี้เป็นแนวทางหลายประการที่จะช่วยคุณ

ใช้หน้าจอเริ่มต้นที่มีการขึ้นต่อกันต่ำและกำจัดหน้าจอที่ไม่ได้ใช้

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

รักษาการขึ้นต่อกันข้ามหน้าจอระหว่างหน้าจอให้ต่ำ

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

พิจารณาสื่อแบบฝัง

บางครั้งผู้สร้างฝังสื่อไว้ในแอพของตนเพื่อให้แน่ใจว่าโหลดได้รวดเร็ว หากคุณมีสื่อแบบฝัง ให้พิจารณาว่าคุณกำลังใช้งานสื่อนั้นอยู่หรือไม่ ถ้าไม่ ให้ลบออก หากคุณได้ฝังไฟล์ .png ให้ลองแทนที่ด้วยไฟล์ .svg ซึ่งมีขนาดเล็กกว่า โปรดทราบว่าหากคุณใช้ .svg แบบอักษรสำหรับ .svg จะต้องอยู่บนเครื่องไคลเอ็นต์ พิจารณาความละเอียดของสื่อแบบฝัง ความละเอียดนั้นสูงเกินไปสำหรับอุปกรณ์ที่จะใช้หรือไม่

อย่าลืม App.StartScreen

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

พิจารณาการแยกแอป

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

ข้อเสนอแนะ

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

  1. คุณได้โหลดข้อมูลจำนวนมากในหน้าจอแรกหรือไม่ คุณสามารถใช้หน้าจอแรกอื่นได้หรือไม่
  2. คุณใช้คำสั่งจำนวนมาก หรือนิพจน์ Power Fx จำนวนมากเมื่อเริ่มต้นการโหลดแอปหรือไม่ คุณสามารถเลื่อนคำสั่งและนิพจน์เหล่านี้ไปยังจุดภายหลังในแอปพลิเคชันได้หรือไม่ รับเฉพาะข้อมูลที่คุณต้องการจริงๆ เพื่อเริ่มแอปใช่ไหม 1 คุณสามารถแปลงนิพจน์ใน App.OnStart เป็นสูตรที่มีชื่อด้วย App.Formulas ได้หรือไม่ นี่เป็นการยินยอม Power Fx ตัดสินใจว่าเมื่อใดที่จะดำเนินการตามสูตรจริง แทนที่จะบังคับให้เกิดขึ้นกับโหลดหรือนำทางเหตุการณ์
  3. คุณสามารถใช้โฟลว์ Power Automate ที่แยกต่างหากเพื่อสร้างตารางชั่วคราวในที่เก็บข้อมูลภายในเครื่อง เช่น Dataverse ที่รวมข้อมูลจากแหล่งต่างๆ ได้หรือไม่ จากนั้นทำการเข้าถึงข้อมูลนั้นใน Power App ของคุณ
  4. สำหรับการเริ่มต้นกระบวนการทางธุรกิจ คุณสามารถใช้การดำเนินการที่ทริกเกอร์โดยเซิร์ฟเวอร์แทนที่จะเรียกโฟลว์ของ Power Automate ได้หรือไม่
  5. คุณสามารถสร้างการมองเห็นบนเซิร์ฟเวอร์ที่รวมข้อมูลให้กับคุณได้หรือไม่
  6. หากคุณต้องการใช้ข้อมูลออฟไลน์ในแอปของคุณ คุณสามารถใช้คุณลักษณะออฟไลน์ของ Power Apps ที่ทำงานร่วมกับ Dataverse ได้หรือไม่ หากข้อมูลของคุณไม่ได้อยู่ใน Dataverse คุณสามารถย้ายข้อมูลมาได้หรือไม่