Mẹo và phương pháp hay nhất giúp cải thiện hiệu suất của ứng dụng canvas

Trong các bài viết trước, bạn đã tìm hiểu về các giai đoạn thực thi và dòng lệnh gọi dữ liệu, các nguồn phổ biến gây ra hiệu suất chậmcác vấn đề và giải pháp chung về hiệu suất trong ứng dụng canvas. Bạn cũng có thể hưởng lợi bằng cách làm theo các mẹo và phương pháp hay nhất trong bài viết này để tăng hiệu suất của các ứng dụng mà bạn tạo.

Giới hạn kết nối dữ liệu

Không thêm nhiều hơn 30 kết nối trong một ứng dụng. Các ứng dụng nhắc người dùng mới đăng nhập vào từng trình kết nối, do đó, mọi trình kết nối bổ sung sẽ tăng lượng thời gian ứng dụng cần khởi động. Khi một ứng dụng chạy, mỗi trình kết nối yêu cầu tài nguyên CPU, bộ nhớ và băng thông mạng khi ứng dụng yêu cầu dữ liệu từ nguồn đó.

Bạn có thể nhanh chóng đo lường hiệu suất của ứng dụng bằng cách bật Công cụ dành cho nhà phát triển trong Microsoft Edge hoặc Google Chrome trong khi chạy ứng dụng. Ứng dụng của bạn có thể cần nhiều hơn 15 giây để trả về dữ liệu nếu ứng dụng thường xuyên yêu cầu dữ liệu từ trên 30 kết nối. Mỗi kết nối đã thêm được tính riêng trong giới hạn này, không phân biệt loại nguồn dữ liệu được kết nối—ví dụ như là các bảng Microsoft Dataverse hay SQL Server hoặc các danh sách được tạo bằng Microsoft Lists.

Giới hạn số lượng điều khiển

Không thêm nhiều hơn 500 điều khiển trong một ứng dụng. Power Apps tạo một mô hình đối tượng tài liệu HTML để hiển thị từng điều khiển. Bạn càng thêm nhiều điều khiển, Power Apps cần càng nhiều thời gian tạo.

Trong một số trường hợp, bạn có thể đạt được kết quả tương tự và ứng dụng bắt đầu nhanh hơn nếu bạn sử dụng thư viện thay vì các điều khiển riêng lẻ. Ngoài ra, bạn có thể muốn giảm số loại điều khiển trên cùng một màn hình. Một số điều khiển (như trình xem PDF, bảng dữ liệu và hộp tổ hợp) sẽ lấy các tập lệnh thực thi lớn và mất nhiều thời gian hơn để kết xuất.

Tối ưu hóa thuộc tính OnStart

Sử dụng hàm ClearCollect để lưu trữ dữ liệu cục bộ nếu nó không thay đổi trong phiên người dùng. Ngoài ra, hãy sử dụng hàm Concurrent để tải đồng thời các nguồn dữ liệu. Điều này có thể giảm một nửa thời gian ứng dụng cần để tải dữ liệu. Thông tin thêm: Hàm Concurrent trong Power Apps

Nếu không có hàm Concurrent, công thức sau sẽ tải lần lượt từng bảng trong 4 bảng:

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

Bạn có thể xác nhận hành vi này trong Công cụ dành cho nhà phát triển cho trình duyệt của mình, như được hiển thị trong hình ảnh sau đây.

Sơ đồ hiển thị 4 bảng đang được tải lần lượt.

Bạn có thể kèm theo công thức tương tự trong hàm Đồng thời để giảm thời gian tổng thể mà hoạt động cần:

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

Với thay đổi này, ứng dụng tìm nạp các bảng song song, như được hiển thị trong hình ảnh sau đây.

Sơ đồ hiển thị 4 bảng đang được tải đồng thời.

Lưu ý

Để biết thêm thông tin về các vấn đề hiệu suất và giải pháp liên quan đến OnStart, hãy đọc Sự kiện OnStart cần điều chỉnh.

Tiền bo

Chúng tôi khuyên bạn nên sử dụng thuộc tính App.StartScreen vì thuộc tính đó đơn giản hóa việc khởi chạy ứng dụng và tăng cường hiệu năng của ứng dụng.

Dữ liệu tra cứu bộ nhớ đệm

Sử dụng hàm Bộ để lưu đệm dữ liệu từ các bảng tra cứu cục bộ để tránh lấy dữ liệu từ nguồn liên tục. Kỹ thuật này tối ưu hóa hiệu suất nếu dữ liệu có thể sẽ không thay đổi trong một phiên. Như trong ví dụ này, dữ liệu được truy xuất từ nguồn một lần, rồi được tham chiếu cục bộ cho đến khi người dùng đóng ứng dụng.

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

Phương pháp này hữu ích hơn cho các dữ liệu như thông tin liên hệ, giá trị mặc định hoặc thông tin người dùng không thay đổi thường xuyên. Bạn cũng có thể sử dụng kỹ thuật này với các chức năng Mặc địnhNgười dùng.

Tránh sự phụ thuộc kiểm soát giữa các màn hình

Để cải thiện hiệu suất, màn hình của ứng dụng chỉ được tải vào bộ nhớ khi cần đến chúng. Việc tối ưu hóa này có thể bị cản trở nếu, ví dụ: màn hình 1 được tải và một trong các công thức của nó sử dụng thuộc tính của điều khiển từ màn hình 2. Bây giờ, màn hình 2 phải được tải để đáp ứng sự phụ thuộc trước khi màn hình 1 có thể được hiển thị. Hãy tưởng tượng màn hình 2 có sự phụ thuộc vào màn hình 3, có một sự phụ thuộc khác vào màn hình 4, v.v. Chuỗi phụ thuộc này có thể khiến nhiều màn hình được tải.

Vì lý do này, hãy tránh các thành phần phụ thuộc công thức giữa các màn hình. Trong một số trường hợp, bạn có thể sử dụng biến toàn cục hoặc bộ sưu tập để chia sẻ thông tin giữa các màn hình.

Có một ngoại lệ: Trong ví dụ trước, hãy hình dung rằng cách duy nhất để hiển thị màn hình 1 là điều hướng từ màn hình 2. Sau đó, màn hình 2 sẽ đã được tải trong bộ nhớ khi màn hình 1 được tải. Không cần thực hiện thêm công việc nào để hoàn thành quan hệ phụ thuộc cho màn hình 2 và do đó không ảnh hưởng đến hiệu suất.

Sử dụng đại diện

Nếu có thể, hãy sử dụng các hàm ủy quyền xử lý dữ liệu cho nguồn dữ liệu thay vì truy xuất dữ liệu đến thiết bị cục bộ để xử lý. Nếu một ứng dụng phải xử lý dữ liệu cục bộ, thì hoạt động này đòi hỏi nhiều công suất xử lý, bộ nhớ và băng thông mạng hơn, đặc biệt nếu tập dữ liệu lớn.

Tiền bo

Để tìm hiểu về các hàm ủy quyền được hỗ trợ bởi các trình kết nối cụ thể, hãy chuyển đến Tài liệu trình kết nối.

Để biết ví dụ về hàm có thể chỉ định, hãy xem xét cột ID được xác định là kiểu dữ liệu Số trong danh sách được tạo bằng Microsoft Lists. Các công thức trong ví dụ sau đây sẽ trả về kết quả như mong đợi. Tuy nhiên, công thức đầu tiên là có thể ủy quyền còn công thức thứ hai là không thể ủy quyền.

Công thức Có thể ủy quyền?
Filter ('List data source', ID = 123 ) Có
Filter(`List data source', ID ="123") Không

Vì chúng tôi giả định rằng cột ID trong SharePoint được xác định với kiểu dữ liệu là Số, giá trị bên phải nên là một biến bằng sô thay vì biến bằng chuỗi. Nếu không, sự không khớp như vậy có thể kích hoạt công thức không thể ủy quyền.

Việc sử dụng hàm không ủy quyền và các giới hạn không phù hợp với hàng dữ liệu cho các truy vấn không ủy quyền có thể tác động tiêu cực đến hiệu suất của ứng dụng. Thông tin thêm: Hiểu về ủy quyền trong ứng dụng canvas

Sử dụng tải chậm

Bật tính năng xem trước để tải trễ nếu ứng dụng của bạn có hơn 10 màn hình, không có quy tắc và nhiều điều khiển trên nhiều màn hình và bị ràng buộc trực tiếp với nguồn dữ liệu. Nếu bạn tạo loại ứng dụng này và không bật tính năng này, hiệu suất ứng dụng có thể bị ảnh hưởng vì các điều khiển trong tất cả các màn hình phải được điền ngay cả trên màn hình không mở. Ngoài ra, tất cả các màn hình của ứng dụng phải được cập nhật bất cứ khi nào nguồn dữ liệu thay đổi, chẳng hạn như khi người dùng thêm bản ghi.

Làm việc với tập dữ liệu lớn

Sử dụng các nguồn dữ liệu và công thức có thể được ủy quyền để giữ cho ứng dụng của bạn hoạt động tốt trong khi người dùng có thể truy cập tất cả thông tin họ cần và tránh đạt giới hạn hàng dữ liệu là 2.000 cho các truy vấn không thể ủy quyền. Đối với các cột ghi dữ liệu mà người dùng có thể tìm kiếm, lọc hoặc sắp xếp dữ liệu, hãy sử dụng chỉ mục trên các cột như được mô tả bởi các nguồn dữ liệu, chẳng hạn như Máy chủ SQL hoặc SharePoint.

Lưu ý

Để biết thêm thông tin về cách các tập hợp dữ liệu lớn có thể gây ra các vấn đề hiệu suất phổ biến trên các nền tảng khác nhau, hãy đọc Các tập dữ liệu lớn tải chậm trên các nền tảng khác nhau.

Tái xuất bản ứng dụng thường xuyên

Các nhà sản xuất được khuyến khích phát hành ứng dụng của họ thường xuyên. Vì nền tảng Power Apps liên tục được tối ưu hóa và triển khai, ứng dụng của bạn được tạo lại trong mục tối ưu hóa nền tảng mới nhất khi bạn xuất bản lại.

Tránh lặp lại cùng một công thức ở nhiều nơi

Nếu nhiều thuộc tính chạy cùng một công thức (đặc biệt là nếu nó phức tạp), hãy xem xét đặt nó một lần và sau đó tham chiếu đầu ra của thuộc tính đầu tiên trong các thuộc tính tiếp theo. Ví dụ: không đặt thuộc tính DisplayMode của các điều khiển A, B, C, D và E cho cùng một công thức phức tạp. Thay vào đó, đặt thuộc tính Chế độ hiển thị của A cho công thức phức tạp, đặt thuộc tính Chế độ hiển thị của B cho kết quả của thuộc tính Chế độ hiển thị của B và tương tự cho C, D và E.

Bật DelayOutput trên tất cả các điều khiển Văn bản nhập

Nếu bạn có nhiều công thức hoặc quy tắc tham chiếu giá trị của một kiểm soát Nhập văn bản, hãy thiết lập thuộc tính DelayedOutput của kiểm soát đó thành true. Thuộc tính Văn bản của điều khiển đó sẽ chỉ được cập nhật sau khi các thao tác gõ phím được thực hiện liền lúc dừng lại. Các công thức hoặc quy tắc sẽ không chạy nhiều lần và hiệu suất ứng dụng sẽ được cải thiện.

Tránh sử dụng Form.Updates trong các quy tắc và công thức

Nếu bạn tham chiếu giá trị do người dùng nhập trong quy tắc hoặc công thức bằng cách sử dụng biến Form.Updates, giá trị đó sẽ lặp lại trên tất cả các thẻ dữ liệu của biểu mẫu và tạo một bản ghi mỗi lần. Để làm cho ứng dụng của bạn hiệu quả hơn, hãy tham khảo giá trị trực tiếp từ thẻ dữ liệu hoặc giá trị kiểm soát.

Sử dụng trục quay DelayItemLoading và Loading để cải thiện hiệu suất trong Thư viện

Tùy thuộc vào cấu hình, Thư viện có thể mất nhiều thời gian hơn để hiển thị các hàng hiển thị. Có một số cách để cải thiện hiệu suất.

  • Đơn giản hóa mẫu. Ví dụ, xem xét giảm số lượng điều khiển, tham chiếu đến tra cứu.
  • Các thư viện với các mẫu phức tạp có thể được hưởng lợi từ việc đặt DelayItemLoading thành trueLoadingSpinner thành LoadingSpinner.Controls. Thay đổi này sẽ cải thiện trải nghiệm cảm nhận khi thời gian hiển thị lâu hơn. DelayItemLoading cũng sẽ trì hoãn việc hiển thị các mẫu, điều này sẽ cho phép phần còn lại của màn hình hiển thị nhanh hơn vì cả màn hình và thư viện đều không cạnh tranh về tài nguyên.

Cho phép tải trước ứng dụng để có hiệu năng nâng cao

Bạn có tùy chọn tải trước ứng dụng của mình để tăng hiệu năng.

  1. Đăng nhập vào Power Apps, sau đó chọn Ứng dụng trong menu.

  2. Chọn Hành động khác (...) cho ứng dụng mà bạn muốn chia sẻ và sau đó chọn Thiết đặt.

  3. Trong bảng tùy chọn kiểm soát Thiết đặt, hãy chuyển tùy chọn Tải trước ứng dụng để nâng cao hiệu suất thành . Sau đó, ứng dụng sẽ tải trước.

Tải trước ứng dụng cho hiệu suất nâng cao.

  1. Để các thay đổi có hiệu lực đối với các ứng dụng được nhúng trong Teams, hãy xóa và thêm lại ứng dụng vào Teams.

    Lưu ý

    Điều này làm cho các tài sản ứng dụng đã biên dịch có thể truy cập được thông qua các điểm cuối chưa được xác thực để cho phép tải chúng trước khi xác thực. Tuy nhiên, người dùng vẫn chỉ có thể sử dụng ứng dụng của bạn để truy cập dữ liệu qua trình kết nối chỉ sau khi quá trình xác thực và ủy quyền hoàn tất. Hành vi này đảm bảo rằng dữ liệu mà ứng dụng truy xuất từ nguồn dữ liệu sẽ không có sẵn cho người dùng trái phép. Nội dung ứng dụng được biên dịch bao gồm tập hợp các tệp JavaScript chứa văn bản được tạo trong các tùy chọn kiểm soát ứng dụng (chẳng hạn như điều khiển PCF), nội dung phương tiện (chẳng hạn như hình ảnh), tên ứng dụng và URL môi trường mà ứng dụng nằm trong.

    Nói chung, các ứng dụng nên truy xuất phương tiện và thông tin từ các nguồn dữ liệu, thông qua các kết nối. Nếu phương tiện và thông tin phải được thêm vào ứng dụng mà không đến từ kết nối và nó được coi là nhạy cảm, bạn có thể muốn tắt cài đặt này. Lưu ý, việc tắt cài đặt này sẽ khiến người dùng phải đợi lâu hơn một chút để truy cập ứng dụng.

Dữ liệu ứng dụng được lưu trữ trên thiết bị của bạn

Để cho phép người dùng truy xuất chi tiết ứng dụng nhanh hơn khi ứng dụng khởi động, một số dữ liệu nhất định được lưu trữ cục bộ trên thiết bị của bạn trong bộ nhớ cache của trình duyệt. Thông tin được lưu trữ bao gồm chi tiết ứng dụng, môi trường và kết nối. Dữ liệu này sẽ được lưu trữ trong trình duyệt dựa trên giới hạn lưu trữ của từng trình duyệt. Để xóa dữ liệu đã lưu trữ, hãy xem hướng dẫn cho từng trình duyệt.

Các bước tiếp theo

Xem lại các tiêu chuẩn mã hóa để tối đa hóa hiệu suất ứng dụng và giúp các ứng dụng dễ bảo trì hơn.

Xem thêm

Hiểu các giai đoạn thực thi ứng dụng canvas và luồng lệnh gọi dữ liệu
Các vấn đề thường gặp hiệu suất của ứng dụng canvas và cách khắc phục
Các nguyên nhân phổ biến gây ra hiệu suất chậm cho ứng dụng canvas
Các vấn đề thường gặp và giải pháp cho Power Apps
Khắc phục sự cố khởi động cho Power Apps

Lưu ý

Bạn có thể cho chúng tôi biết bạn thích dùng ngôn ngữ nào cho tài liệu không? Làm một cuộc khảo sát ngắn. (xin lưu ý, khảo sát này bằng tiếng Anh)

Cuộc khảo sát sẽ mất khoảng bảy phút. Không có dữ liệu cá nhân nào được thu thập (điều khoản về quyền riêng tư).