เคล็ดลับและแนวทางปฏิบัติที่ดีที่สุดในการปรับปรุงประสิทธิภาพของแอปพื้นที่ทำงาน

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

จำกัดการเชื่อมต่อข้อมูล

อย่าเพิ่มการเชื่อมต่อมากกว่า 30 รายการในแอปเดียว แอปแจ้งพร้อมท์ผู้ใช้ใหม่ให้เข้าสู่ระบบตัวเชื่อมต่อแต่ละตัว ดังนั้นตัวเชื่อมต่อเพิ่มเติมทุกตัวจะเพิ่มระยะเวลาที่แอปต้องการเพิ่มเริ่มต้น เมื่อเรียกใช้แอป ตัวเชื่อมต่อแต่ละตัวต้องการทรัพยากร CPU หน่วยความจำ และแบนด์วิธเครือข่ายเมื่อแอปร้องขอข้อมูลจากแหล่งข้อมูลนั้น

คุณสามารถวัดประสิทธิภาพของแอปโดยการเปิดเครื่องมือนักพัฒนาซอฟต์แวร์ใน Microsoft Edge หรือ Google Chrome ในขณะที่เรียกใช้แอป แอปของคุณมักจะใช้เวลานานกว่า 15 วินาที ในการส่งคืนข้อมูล หากมีการขอข้อมูลจากการเชื่อมต่อมากกว่า 30 ครั้ง การเชื่อมต่อที่เพิ่มเข้ามาแต่ละครั้งจะถูกนับแยกกันในขีดจำกัดนี้ โดยไม่คำนึงถึงชนิดแหล่งข้อมูลที่เชื่อมต่อ—เช่น Microsoft Dataverse หรือตาราง SQL Server หรือรายการที่สร้างโดยใช้ Microsoft Lists

จำกัดจำนวนของตัวควบคุม

อย่าเพิ่มการควบคุมมากกว่า 500 รายการในแอปเดียว Power Apps สร้างแบบจำลองออบเจ็กต์เอกสาร HTML เพื่อแสดงผลแต่ละการควบคุม ตัวควบคุมเพิ่มเติมที่คุณเพิ่ม Power Apps ต้องการระยะเวลาในการสร้างเพิ่มเติม

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

เพิ่มประสิทธิภาพคุณสมบัติ OnStart

ใช้ฟังก์ชัน ClearCollect เพื่อแคชข้อมูลภายในเครื่อง หากไม่มีการเปลี่ยนแปลงระหว่างเซสชันของผู้ใช้ นอกจากนี้ ให้ใช้ฟังก์ชัน พร้อมกัน โหลดแหล่งข้อมูลพร้อมกัน วิธีนี้สามารถลดระยะเวลาที่แอปต้องโหลดข้อมูลได้ครึ่งหนึ่ง ข้อมูลเพิ่มเติม: ฟังก์ชันพร้อมกันใน Power Apps

หากไม่ใช้ฟังก์ชัน พร้อมกัน สูตรต่อไปนี้โหลดตารางสี่ตารางแบบครั้งต่อครั้ง

ClearCollect( Product, '[SalesLT].[Product]' );
ClearCollect( Customer, '[SalesLT].[Customer]' );
ClearCollect( SalesOrderDetail, '[SalesLT].[SalesOrderDetail]' );
ClearCollect( SalesOrderHeader, '[SalesLT].[SalesOrderHeader]' )

คุณสามารถยืนยันลักษณะการทำงานนี้ได้ในเครื่องมือสำหรับนักพัฒนาสำหรับเบราว์เซอร์ของคุณ ดังที่แสดงในภาพต่อไปนี้

แผนภาพแสดงตารางทั้งสี่ที่กำลังโหลดทีละตาราง

คุณสามารถใส่สูตรเดียวกันในฟังก์ชัน Concurrent เพื่อลดเวลาโดยรวมที่ต้องการใช้งาน:

Concurrent( 
    ClearCollect( Product, '[SalesLT].[Product]' ),
    ClearCollect( Customer, '[SalesLT].[Customer]' ),
    ClearCollect( SalesOrderDetail, '[SalesLT].[SalesOrderDetail]' ),
    ClearCollect( SalesOrderHeader, '[SalesLT].[SalesOrderHeader]' ))

ด้วยการเปลี่ยนแปลงนี้ แอปจะดึงตารางพร้อมกันดังที่แสดงในภาพต่อไปนี้

แผนภาพแสดงตารางทั้งสี่ที่กำลังโหลดพร้อมกัน

หมายเหตุ

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับปัญหาด้านประสิทธิภาพและวิธีแก้ปัญหาที่เกี่ยวข้องกับ OnStart โปรดอ่าน เหตุการณ์ OnStart ต้องการการปรับแต่ง

เคล็ดลับ

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

แคชข้อมูลจากตารางการค้นหา

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

Set(CustomerOrder, Lookup(Order, id = “123-45-6789”));
Set(CustomerName, CustomerOrder.Name);
Set(CustomerAddress, CustomerOrder.Address);
Set(CustomerEmail, CustomerOrder.Email);
Set(CustomerPhone, CustomerOrder.Phone);

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

หลีกเลี่ยงการขึ้นต่อกันของตัวควบคุมระหว่างหน้าจอ

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

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

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

ใช้การมอบสิทธิ์

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

เคล็ดลับ

หากต้องการเรียนรู้เกี่ยวกับฟังก์ชันที่สามารถมอบสิทธิ์ได้ที่ตัวเชื่อมต่อบางตัวรองรับ โปรดดูที่ คู่มือตัวเชื่อมต่อ

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

สูตร มอบหมายได้หรือไม่
Filter ('List data source', ID = 123 ) ตกลง
Filter(`List data source', ID ="123") ไม่

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

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

ใช้การโหลดล่าช้า

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

การทำงานกับชุดข้อมูลขนาดใหญ่

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

หมายเหตุ

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

เผยแพร่แอปใหม่เป็นประจำ

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

หลีกเลี่ยงการทำซ้ำสูตรเดียวกันในหลายๆ ที่

หากคุณสมบัติหลายอย่างใช้สูตรเดียวกัน (โดยเฉพาะถ้าซับซ้อน) ให้ลองตั้งค่าหนึ่งครั้งจากนั้นอ้างอิงผลลัพธ์ของคุณสมบัติแรกในลำดับถัดมา ตัวอย่างเช่น ห้ามตั้งค่าคุณสมบัติ DisplayMode ของตัวควบคุม A, B, C, D และ E ไปยังสูตรที่ซับซ้อนเดียวกัน ให้ตั้งค่าคุณสมบัติ DisplayMode ของ A เป็นสูตรที่ซับซ้อนแทน ตั้งค่าคุณสมบัติ DisplayMode ของ B เป็นผลลัพธ์ของคุณสมบัติ DisplayMode ของ A และอื่นๆ สำหรับ C, D และ E

เปิดใช้งาน DelayOutput สำหรับตัวควบคุม การป้อนข้อความ ทั้งหมด

หากคุณมีหลายสูตรหรือกฎที่อ้างอิงค่าของตัวควบคุม การป้อนข้อความ ตั้งค่าคุณสมบัติ DelayedOutput ของตัวควบคุมนั้นเป็นจริง คุณสมบัติ ข้อความ ของการควบคุมนั้นจะได้รับการอัปเดตหลังจากหยุดการกดแป้นพิมพ์ติดต่อกันอย่างรวดเร็วแล้วเท่านั้น สูตรหรือกฎจะไม่ทำงานหลายครั้ง และประสิทธิภาพของแอปจะดีขึ้น

หลีกเลี่ยงการใช้ Form.Updates ในกฎและสูตร

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

ใช้สปินเนอร์ DelayItemLoading และ Loading เพื่อปรับปรุงประสิทธิภาพในแกลเลอรี

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

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

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

คุณสามารถเลือกโหลดแอปของคุณไว้ล่วงหน้าเพื่อเพิ่มประสิทธิภาพการทำงาน

  1. ลงชื่อเข้าใช้ Power Apps แล้วเลือก แอป ในเมนู

  2. เลือก การดำเนินการเพิ่มเติม (...) สำหรับแอปที่คุณต้องการแชร์ จากนั้นเลือก การตั้งค่า

  3. ในแผงการตั้งค่า สลับ โหลดแอปล่วงหน้าเพื่อเพิ่มประสิทธิภาพ เป็น ใช่ แอปจะโหลดล่วงหน้า

โหลดแอปล่วงหน้าสำหรับประสิทธิภาพขั้นสูง

  1. เพื่อให้การเปลี่ยนแปลงมีผลสำหรับแอปที่ฝังใน Teams ให้ลบและเพิ่มแอปของคุณใน Teams อีกครั้ง

    หมายเหตุ

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

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

ที่เก็บข้อมูลแอปในอุปกรณ์ของคุณ

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

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

ตรวจสอบ มาตรฐานการเข้ารหัส สำหรับการเพิ่มประสิทธิภาพแอปให้สูงสุดและทำให้แอปรักษาได้ง่ายขึ้น

ดูเพิ่มเติม

ทำความเข้าใจขั้นตอนการใช้งานแอปพื้นที่ทำงานและโฟลว์การเรียกใช้ข้อมูล
ปัญหาและวิธีแก้ไขประสิทธิภาพการทำงานของแอปพื้นที่ทำงานทั่วไป
แหล่งที่มาทั่วไปของประสิทธิภาพการทำงานช้าสำหรับแอปพื้นที่ทำงาน
ปัญหาและวิธีแก้ไขทั่วไปสำหรับ Power Apps
การแก้ไขปัญหาการเริ่มต้นสำหรับ Power Apps

หมายเหตุ

บอกให้เราทราบเกี่ยวกับภาษาที่คุณต้องการในคู่มือ ทำแบบสำรวจสั้นๆ (โปรดทราบว่าแบบสำรวจนี้เป็นภาษาอังกฤษ)

แบบสำรวจนี้ใช้เวลาทำประมาณเจ็ดนาที ไม่มีการเก็บข้อมูลส่วนบุคคล (คำชี้แจงสิทธิ์ส่วนบุคคล)