Rumah > Artikel > hujung hadapan web > Analisis ringkas mekanisme pengesanan perubahan Angular dan bagaimana untuk mengoptimumkan prestasi?
Apakah pengesanan perubahan? Artikel berikut akan membawa anda melalui mekanisme pengesanan perubahan dalam Angular, bercakap tentang cara pengesanan perubahan berfungsi dan memperkenalkan kaedah pengoptimuman prestasi pengesanan perubahan Sudut saya harap ia akan membantu semua orang.
Selepas status data dalam komponen berubah, paparan perlu dikemas kini dengan sewajarnya. Mekanisme untuk menyegerakkan pandangan dan data ini dipanggil pengesanan perubahan. [Tutorial berkaitan yang disyorkan: "tutorial sudut"]
Selagi operasi tak segerak berlaku (Acara, Pemasa , XHR ), Angular akan berfikir bahawa keadaan mungkin telah berubah, dan kemudian ia akan melakukan pengesanan perubahan.
digunakan untuk merangkum dan memintas aktiviti tak segerak dalam penyemak imbas Ia juga menyediakan NgZone
cangkuk kitaran hayat tak segerakZone.js
dan
Zone.js
menggunakan Monyet Tampalan untuk memintas kaedah dan elemen biasa dalam penyemak imbas, seperti
. Sudut menampal beberapa API penyemak imbas peringkat rendah pada permulaan menggunakan Zone.js
untuk menangkap peristiwa tak segerak dan pengesanan perubahan panggilan selepas masa tangkapan. Angular garpu setTimeout
dan mengembangkan kawasannya sendiri HTMLElement.prototype.onclick
, supaya semua operasi tak segerak dalam aplikasi akan berjalan di kawasan ini. Zone.js
Bagaimanakah pengesanan perubahan Angular berfungsi? Zone.js
NgZone
dibuat, ia akan melanggan acara changeDetector
onMicrotaskEmpty
akan dipanggil untuk melakukan pengesanan perubahan. ApplicationRef
ApplicationRef
Perintah pelaksanaan pengesanan perubahandetectChanges()
Ini kerana pengesanan perubahan mengikuti bermula dari komponen akar, dari atas ke bawah, melakukan pengesanan perubahan untuk setiap komponen sehingga komponen terakhir mencapai keadaan stabil. Sebelum pengesanan perubahan seterusnya, komponen keturunan tidak dibenarkan mengubah suai sifat dalam komponen induk.
Kes 1 Dalam mod pembangunan, Angular akan melaksanakanpengesanan sekunder (apabila dipanggil dalam persekitaran pengeluaran, bilangan pengesanan akan dikurangkan untuk 1). Sebaik sahaja kami mengubah suai sifat komponen induk dalam komponen turunan selepas melengkapkan Langkah 4, maka apabila Angular melakukan pengesanan kedua dan mendapati bahawa kedua-dua nilai tidak konsisten, ralat di atas akan berlaku. enableProdMode()
Kes 2
Strategi pelaksanaan untuk pengesanan perubahan
// #parent {{data}} <child [data]="data"></child> // in child component ts, execute: this.parent.data = 'new Value';
Strategi lalai ini menyemak setiap komponen dalam pepohon komponen dari atas ke bawah setiap kali peristiwa mencetuskan pengesanan perubahan (seperti acara pengguna, pemasa, XHR, janji, dll.). Kaedah semakan konservatif yang tidak membuat sebarang andaian tentang kebergantungan komponen dipanggil semakan kotor Strategi ini akan memberi kesan prestasi pada aplikasi kami apabila kami menggunakan terlalu banyak komponen.
Ubah suai penghias komponenchangeDetection
, selepas menetapkannya kepada strategi OnPush, Angular akan melangkau pengesanan perubahan komponen ini dan semua subkomponen komponen ini setiap kali ia mencetuskan pengesanan perubahan.
Di bawah strategi OnPush
, hanya situasi berikut akan mencetuskan pengesanan perubahan komponen:
Memandangkan komponen melaksanakan Strategi lalai secara lalai, sebarang operasi tak segerak akan mencetuskan semakan bagi keseluruhan nombor komponen dari atas ke bawah. Walaupun pasukan Angular terus meningkatkan prestasi dan boleh menyelesaikan ratusan pengesanan dalam masa milisaat, apabila aplikasi berkembang kepada ratusan atau ribuan komponen, pengesanan perubahan yang sepadan dengan pepohon komponen besar akan mencapai kesesakan prestasi.
Pada ketika ini, kita perlu mula menganalisis dan mengurangkan bilangan ujian yang tidak perlu.
Pencemaran Zon (Pencemaran Zon)
Secara amnya kita berada dalam kehidupan Pustaka pihak ketiga digunakan dalam cangkuk kitaran, seperti permulaan perpustakaan kelas carta, yang akan disertakan dengan requestAnimationRequest/setTimeout/addEventListener Kita boleh menulis kaedah permulaan ke dalam kaedah NgZone
runOutsideAngular
.
Strategi OnPush
Boleh dilucutkan untuk pandangan yang tidak melibatkan operasi kemas kini Keluar dari komponen dan gunakan strategi onPush untuk memuat semula paparan dengan memberitahu kemas kini (lihat bahagian Strategi Pelaksanaan untuk Pengesanan Perubahan di atas).
Gunakan paip tulen bukannya {{fungsi(data)}}
Dalam fail html, penulisan {{function(data)}}
akan menyebabkan semua nilai dikira semula setiap kali pengesanan perubahan berlaku. (?: Apabila anda mempunyai senarai 1,000 item, anda hanya mengubah suai satu keping data, tetapi 999 keping data lain yang tidak perlu dikemas kini juga akan dikira semula.)
Pada masa ini, kita boleh menggunakan kaedah paip, Hanya nilai yang berubah akan mencetuskan operasi dan mengemas kini sebahagian daripada paparan.
Menghadapi pemaparan jumlah data yang besar, pilih tatal/penomboran maya untuk meminta data
Penyelesaian 4 mata di atas datang daripada pengenalan video pasukan Angular Dalam video, Angular devtool digunakan untuk menganalisis bilangan operasi untuk menyelesaikan masalah. Jadi, jika anda mempunyai Angular 9, baca terus untuk mengetahui cara untuk mendapatkan Angular devtool aktif dan berjalan.
// environment.dev.ts ... production: false ...
"optimization": false
projects > your-project-name > architect > build > configurations > dev > "optimization": false
更多编程相关知识,请访问:编程教学!!
Atas ialah kandungan terperinci Analisis ringkas mekanisme pengesanan perubahan Angular dan bagaimana untuk mengoptimumkan prestasi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!