Penghitungan cepat

Power Fx Ekspresi sangat kuat dan melakukan banyak perhitungan latar belakang untuk Anda secara otomatis. Meskipun Power Fx mengotomatiskan banyak hal untuk Anda, Anda dapat menyempurnakan perhitungan Anda sehingga secepat mungkin.

Pengambilan data

Gunakan Pemilihan kolom eksplisit

Fitur Pemilihan Kolom Eksplisit (ECS) diaktifkan secara default untuk semua aplikasi baru. Jika tidak diaktifkan untuk aplikasi Anda, Anda harus mengaktifkannya. ECS secara otomatis mengurangi jumlah kolom yang diambil menjadi hanya kolom yang digunakan dalam aplikasi. Jika ECS tidak diaktifkan, Anda mungkin mengambil lebih banyak data daripada yang Anda butuhkan, yang dapat memengaruhi kinerja. Terkadang, saat aplikasi menarik data melalui koleksi, silsilah asli atau sumber kolom dapat hilang. Kami tidak tahu apakah itu digunakan dan kami menghentikannya menggunakan ECS. Anda biasanya dapat memaksa ECS untuk bekerja untuk kolom yang hilang dengan menggunakan ekspresi PowerFx ShowColumns setelah referensi koleksi atau dengan menggunakannya dalam kontrol.

Gunakan gambar pada galeri, tabel, dan formulir dengan hati-hati

Gunakan Dataverse versi thumbnail gambar untuk galeri dan tabel. Dataverse Thumbnail berukuran kecil sekitar 1 kilobyte dan disimpan sebaris sebagai bagian dari rekaman, dan berguna dan cepat untuk ditampilkan pada kontrol yang memperlihatkan koleksi. Semua referensi gambar lainnya termasuk semua SharePoint gambar memerlukan panggilan terpisah dan tidak boleh ditempatkan di galeri atau meja. Tempatkan gambar yang memerlukan panggilan terpisah pada formulir detail. Pertimbangkan untuk tidak pernah menampilkan gambar lengkap secara default. Gambar detail lengkap dapat berguna dan penting bagi pengguna. Namun, Anda dapat membuat gambar ini tersedia bagi pengguna melalui tindakan pengguna yang eksplisit, misalnya, tombol atau navigasi ke halaman terpisah. SharePoint memiliki berbagai gambar berukuran menengah yang dapat Anda gunakan untuk digunakan pada formulir yang kurang dari gambar lengkap. Dataverse hanya memiliki dua ukuran: Thumbnail dan Full.

Penghitungan

Pisahkan rumus dengan App.formula

Penggunaan App.formulas dan rumus bernama dapat membantu kecepatan pemuatan aplikasi dan navigasi halaman karena memungkinkan Power Fx untuk memutuskan kapan harus mengevaluasi rumus. Itu berarti tidak harus mengevaluasinya di OnStart. Selain itu, rumus bernama umumnya dapat membantu kecepatan juga. Khususnya jika Anda memiliki skrip yang panjang, memecahnya menjadi rumus bernama memungkinkan perhitungan yang lebih efisien karena Power Fx dapat menjadwalkan pekerjaan dan memungkinkan penggunaan kembali. Untuk informasi selengkapnya, lihat Rumus aplikasi.

Gunakan Bersamaan

Gunakan fungsi Concurrent untuk memungkinkan rumus dijalankan secara bersamaan. Pilih dengan hati-hati di mana concurrent digunakan. Ini dapat memberikan beberapa peningkatan kecepatan sederhana, tetapi jika Anda menjalankan item yang bergantung satu sama lain, itu dapat menyebabkan masalah waktu dan pelambatan.

Menunda update signifikan ke langkah UI nonblocking

Pembaruan besar pada sumber data mungkin memerlukan beberapa saat untuk diselesaikan. Tetapi pengguna mengharapkan UI mengembalikan kendali kepada mereka dengan cepat. Tugas dapat berurutan di mana pembaruan harus selesai sebelum pengguna dapat mengambil tindakan lain atau asinkron (pembaruan dapat menyelesaikan tindakan pengguna secara terpisah.)

Contoh tugas sinkron yang memakan waktu adalah mengonfirmasi tempat duduk di konser. Untuk tugas sinkron yang paling memakan waktu seperti ini, biasanya memasang bilah kemajuan. UI ini benar-benar memblokir pengguna tetapi memastikan bahwa tugas selesai sebelum elemen UI lainnya diperbarui. Pendekatan ini mungkin tidak berfungsi untuk aplikasi Anda. Bisnis biasanya menangani langkah-langkah berurutan yang lebih panjang sebagai langkah bisnis eksplisit. Anda disetujui untuk melanjutkan langkah berikutnya melalui sinyal proses bisnis. Contohnya adalah persetujuan. Persetujuan mungkin datang dengan cepat atau mungkin tertunda. Di UI Anda dapat memberi sinyal bahwa prosesnya selesai dengan beberapa cara. Anda dapat mengaktifkan tombol, menampilkan pesan, mengirim email, atau mengaktifkan bagian UI seperti item menu.

Contoh tugas asinkron adalah penyelesaian pesanan. Pelanggan memperbarui keranjang pesanan, mengerjakan pesanan mereka, lalu melakukan pemesanan. Tetapi beberapa pembaruan harus dilakukan sebelum pelanggan diberi tanggal pengiriman yang dikonfirmasi. Dalam contoh ini, Tanggal Kirim bukanlah sesuatu yang dapat Anda berikan dengan mudah segera. , Anda dapat menunda bagian pembaruan ini ke email yang dikirim ke pelanggan nanti.

Untuk tugas sinkron, Anda akan sering menggunakan kode untuk Power Apps tugas pemblokiran UI. Misalnya, kode menunggu hingga mendapatkan nilai yang dikembalikan dan kemudian melepaskan bilah kemajuan. Yang terbaik adalah meminimalkan situasi seperti ini. Tetapi untuk tugas yang menggunakan langkah bisnis eksplisit atau tugas asinkron, biasanya menggunakan layanan eksternal untuk menyelesaikan tugas seperti Dataverse tindakan, prosedur tersimpan, atau Power Automate alur.

Tempatkan 'ForAll' dengan tepat

Jika Anda memiliki ekspresi dengan ForAll dan kumpulkan yang terlihat seperti ini:

ForAll(x, Collect(y, { … }))

Kemudian, balikkan ini ke

Collect(y, ForAll(x, { … }))

Dalam pola pertama, setiap aturan dependen pada koleksi y diberitahukan tentang perubahan dan dievaluasi untuk setiap iterasi x. Dalam pola kedua, aturan ini hanya dievaluasi sekali.

Pertimbangkan untuk menghindari referensi ke Gallery.AllItems

Saat bekerja dengan Power Apps, yang terbaik adalah menghindari referensi Gallery.AllItems kecuali Anda memerlukan nilai pengguna. Ini karena setiap kali AllItems dibaca, tabel output baru dihasilkan. Sebagai gantinya, gunakan Gallery.AllItemsCount jika Anda hanya ingin mengetahui berapa banyak item yang dimuat.

Gunakan Gallery.TemplateSize dengan hati-hati

Untuk memastikan bahwa galeri tinggi fleksibel dirender dengan benar, penting untuk menetapkan ukuran default yang wajar. Awalnya, kami mencoba merender sebanyak mungkin baris berdasarkan nilai ini. Jika Anda mengatur ukuran default ke 0, kami mencoba merender semuanya, kecuali untuk beberapa kasus tepi. Jika Anda menggunakan rumus, pastikan untuk menetapkan nilai minimum kapan rumus mungkin dievaluasi ke 0. Misalnya, Anda dapat menggunakan Max (20, varFoo + rectBar.Height). Dengan cara ini, jika varFoo dan rectBar.Height belum tersedia, setidaknya kita menggunakan nilai yang wajar yaitu 20.

Ada penundaan satu detik sebelum perubahan terdeteksi, yang memungkinkan Anda menyelesaikan pengetikan alih-alih mendeteksi perubahan untuk setiap pengetikan.