


Bagaimana untuk mengoptimumkan prestasi dalam sudut? Analisis ringkas kaedah pengesanan perubahan
sudutBagaimana untuk mengoptimumkan prestasi? Artikel berikut akan memberi anda pengenalan yang mendalam kepada penyelesaian pengoptimuman prestasi Angular - pengesanan perubahan Saya harap ia akan membantu anda!
sudut Pengoptimuman Prestasi - Pengesanan Perubahan
Untuk penerangan penunjuk prestasi bahagian hadapan, industri mempunyai Bercakap tentang perkataan sendiri, secara ringkasnya, ia berkaitan dengan prestasi skrin pertama dan kelancaran halaman. Kali ini, kami akan menganalisis pengoptimuman prestasi interaksi halaman dari perspektif kelancaran halaman. [Cadangan tutorial berkaitan: "tutorial sudut"]
Apakah kelancaran halaman?
Kefasihan halaman ditentukan oleh kadar bingkai FPS (Bingkai Sesaat - bilangan bingkai yang dihantar sesaat Secara umumnya, kadar penyegaran semula skrin pelayar arus perdana ialah 60Hz (dimuatkan semula 60 kali sesaat). . akan menjadi Bingkai jatuh dan gagap berlaku. 根因在于:浏览器中的 JavaScript 执行和页面渲染会相互阻塞
.
Dalam devtools Chrome kita boleh laksanakan Cmd Shift P dan masukkan show fps untuk membuka panel fps dengan cepat, seperti yang ditunjukkan di bawah:
Dengan memerhati panel FPS , kita boleh memantau kelancaran halaman semasa dengan mudah
1 Faktor yang mempengaruhi prestasi halaman
Sama ada interaksi halaman adalah lancar bergantung pada sama ada respons halaman lancar dan Respon halaman pada asasnya ialah proses pemaparan semula perubahan status halaman ke halaman.
Proses respons halaman adalah kira-kira seperti berikut:
Secara amnya, Logik pemprosesan acara Pengendali Acara tidak mengambil terlalu banyak masa, jadi faktor utama yang mempengaruhi prestasi sudut ialah 异步事件触发
dan 变更检测
.
Secara amnya, logik pemprosesan acara Pengendali Acara tidak mengambil terlalu banyak masa, jadi faktor yang mempengaruhi prestasi Sudut terutamanya terletak pada pencetus peristiwa tak segerak dan pengesanan perubahan.
Untuk Angular, proses pemaparan halaman ialah proses pengesanan perubahan Dapat difahami bahawa pengesanan perubahan Angular mesti diselesaikan dalam masa 16.6ms untuk mengelakkan kehilangan bingkai halaman dan ketinggalan.
Prestasi respons halaman boleh dioptimumkan daripada tiga aspek berikut.
(1) Untuk peringkat peristiwa pencetus, anda boleh mengurangkan pencetus peristiwa tak segerak untuk mengurangkan bilangan keseluruhan pengesanan perubahan dan pemaparan semula;
(2) Untuk peringkat logik pelaksanaan Pengendali Peristiwa, masa pelaksanaan boleh dikurangkan dengan mengoptimumkan logik kod kompleks; anda boleh
Kurangkan bilangan pengesanan perubahandan pengiraan data templat untuk mengurangkan masa pemaparan; Untuk (2) Pengendali Acara, isu khusus perlu dianalisis secara terperinci tanpa perbincangan, terutamanya untuk ( 1) (3) Optimumkan
2 Pelan pengoptimuman
2.1 Kurangkan mencetuskan peristiwa tak segerakDalam mod pengesanan perubahan lalai Angular, peristiwa tak segerak akan mencetuskan pengesanan perubahan global Oleh itu, mengurangkan pencetus peristiwa tak segerak akan meningkatkan prestasi Angular.
Acara tak segerak termasuk acara Tugas Makro dan acara Tugas Mikro
Pengoptimuman peristiwa tak segerak adalah terutamanya untuk acara pemantauan dokumen. Contohnya, klik, naik tetikus, gerak tetikus... dan acara mendengar lain pada dokumen.
Mendengar adegan acara:
Renderer2.listen(dokumen, …)
fromEvent(document,…)
document.addEventListener(…)
Acara mendengar DOM mesti dialih keluar apabila ia tidak diperlukan lagi.
Contoh: [pop] Perintah kotak gesaan
Senario penggunaan: menapis lajur jadual, mengklik tempat selain ikon atau menatal halaman, menyembunyikan kotak timbul penapis lajur
Pendekatan sebelumnya adalah untuk terus Memantau acara klik dan acara tatal dokumen dalam arahan pop mempunyai kelemahan bahawa kotak gesaan tidak dipaparkan, tetapi acara pemantauan masih wujud, yang sangat tidak munasabah.
Penyelesaian yang munasabah: Hanya dengar acara klik dan tatal apabila kotak gesaan dipaparkan dan alih keluar acara mendengar apabila ia disembunyikan.
Untuk acara mendengar DOM yang sering dicetuskan, anda boleh menggunakan pengendali rjx untuk mengoptimumkan acara. Untuk butiran, rujuk Rjx Operator. Gli RxJS.
2.2 Pengesanan Perubahan
Apakah pengesanan perubahan?
Untuk memahami pengesanan perubahan, kita boleh mencari jawapan daripada matlamat pengesanan perubahan. Matlamat pengesanan perubahan sudut adalah untuk memastikan model (kod TypeScript) dan templat (HTML) disegerakkan. Oleh itu, pengesanan perubahan boleh difahami sebagai: Semasa mengesan perubahan model, kemas kini templat ( DOM ) .
Apakah proses pengesanan perubahan?
Dengan melakukan pengesanan perubahan dalam pepohon komponen dalam susunan atas-bawah, iaitu pengesanan perubahan dilakukan pada komponen induk dahulu, dan kemudian pada komponen anak Komponen melakukan pengesanan perubahan. Mula-mula semak perubahan data komponen induk, dan kemudian kemas kini templat komponen induk Apabila mengemas kini templat, apabila menemui komponen anak, ia akan mengemas kini nilai yang terikat pada komponen anak, dan kemudian masukkan komponen anak untuk melihat sama ada komponen anak. indeks nilai input @Input telah berubah Jika ia berubah, tandakan subkomponen sebagai kotor, yang memerlukan pengesanan perubahan seterusnya Selepas menandakan subkomponen, teruskan mengemas kini templat di belakang subkomponen dalam komponen induk. Selepas semua templat komponen induk telah dikemas kini, buat perubahan pada pengesanan subkomponen.
2.2.1 Prinsip pengesanan perubahan sudut
Dalam mod lalai pengesanan perubahan lalai, prinsip peristiwa tak segerak yang mencetuskan pengesanan perubahan Angular ialah sudut memanggil ApplicationRef apabila memproses peristiwa tak segerak menggunakan Zone.js Kaedah tick() melakukan pengesanan perubahan daripada komponen akar kepada komponen anaknya. Semasa proses pemulaan aplikasi Sudut, zon (NgZone) dimulakan, dan kemudian semua logik dijalankan dalam objek _dalam objek.
Zone.js melaksanakan kelas berikut:
- Kelas zon, persekitaran pelaksanaan acara JavaScript Seperti urutan, mereka boleh membawa beberapa data dan mungkin mempunyai zon induk dan anak.
- Kelas ZoneTask, acara tak segerak yang dibungkus, tugasan ini mempunyai tiga subkelas:
- MicroTask, dicipta oleh Promise.
- MacroTask, dicipta oleh setTimeout dsb.
- EventTask, dicipta oleh addEventListener dsb., seperti acara dom.
- Objek ZoneSpec, parameter yang disediakan kepadanya semasa mencipta ngZone, mempunyai tiga cangkuk yang boleh mencetuskan pengesanan:
- onInvoke, panggil tertentu Cangkuk yang dicetuskan apabila fungsi panggil balik dipanggil.
- onInvokeTask, cangkuk yang dicetuskan apabila ZoneTask dicetuskan, seperti apabila setTimeout tamat tempoh.
- onHasTask, cangkuk yang dicetuskan apabila mengesan kehadiran atau ketiadaan ZoneTask (iaitu, dicetuskan untuk zon jadual pertama dan tugasan panggilan atau batal terakhir).
- Kelas ZoneDelegate, bertanggungjawab untuk memanggil cangkuk.
Prinsip proses pengesanan adalah kira-kira seperti berikut:
Operasi pengguna mencetuskan peristiwa tak segerak (seperti peristiwa dom, permintaan antara muka...)
= > Kelas ZoneTask mengendalikan acara. Kaedah runTask() zon dipanggil dalam fungsi invokeTask() Dalam kaedah runTask, zon memanggil cangkuk ZoneSpec melalui atribut contoh _zoneDelegate
=> Tiga cangkuk ZoneSpec (onInvokeTask, onInvoke, onHasTask) Dalam cangkuk, pemberitahuan zone.onMicrotaskEmpty.emit(null) dicetuskan melalui fungsi checkStable()
=> Komponen akar memanggil tick() selepas mendengar onMicrotaskEmpty, dan kaedah tick memanggil detectChanges()
Mulakan pengesanan daripada komponen akar
=> ... >)refreshView()
executeTemplate()
Carta aliran prinsip pengesanan perubahan yang terperinci: executeTemplate
Permudahkan proses:
Cetuskan peristiwa tak segerak
=> ZoneTask mengendalikan acara
=> daripada ZoneSpec Trigger onMicrotaskEmpty notification
=> Komponen akar menerima pemberitahuan onMicrotaskEmpty, melaksanakan tick(), dan mula mengesan dan mengemas kini dom
Seperti yang dapat dilihat daripada kod di atas, 当微任务为空的时候才会触发变更检测
.
Carta alir prinsip pengesanan perubahan mudah:
Analisis kod sumber sudut Rujukan Zone.js blog.
2.2.2 Pelan pengoptimuman pengesanan perubahan
1) Gunakan mod OnPush
Prinsip: Kurangkan satu pengesanan perubahan yang memakan masa.
Perbezaan antara mod OnPush dan mod Lalai ialah: acara mendengar DOM, acara pemasa dan janji tidak akan mencetuskan pengesanan perubahan. Status komponen dalam mod Lalai sentiasa SemakSentiasa, yang bermaksud bahawa komponen mesti diuji setiap kitaran pengesanan.
Dalam mod OnPush: Situasi berikut akan mencetuskan pengesanan perubahan
S1 Rujukan @Input bagi komponen berubah.
S2 peristiwa terikat DOM bagi komponen, termasuk peristiwa terikat DOM bagi subkomponennya, seperti klik, serahkan, tetikus ke bawah. @HostListener()
Nota:
Acara DOM yang didengar melalui renderer2.listen() tidak akan mencetuskan pengesanan perubahan
Begitu juga kaedah mendengar asli melalui dom.addEventListener() Akan mencetuskan pengesanan perubahan
S3, Acara langganan boleh diperhatikan dan menetapkan paip Async pada masa yang sama.
S4 Gunakan kaedah berikut untuk mencetuskan pengesanan perubahan secara manual:
ChangeDetectorRef.detectChanges(): Pencetus pengesanan perubahan untuk komponen semasa dan bukan OnPush subkomponen.
ChangeDetectorRef.markForCheck(): Tandai paparan semasa dan semua nenek moyangnya sebagai kotor, dan pengesanan akan dicetuskan dalam kitaran pengesanan seterusnya.
ApplicationRef.tick(): Pengesanan perubahan tidak akan dicetuskan
2) Gunakan NgZone.runOutsideAngular()
Prinsip: Kurangkan bilangan pengesanan perubahan
Adakah pemantauan acara DOM Global ditulis dalam panggilan balik kaedah NgZone.runOutsideAngular() tidak akan mencetuskan pengesanan perubahan Angular. Jika komponen semasa belum dikemas kini, anda boleh melaksanakan cangkuk detectChanges() ChangeDetectorRef dalam fungsi panggil balik untuk mencetuskan pengesanan perubahan komponen semasa secara manual.
Contoh: komponen ikon dinamik app-icon-react
2.2.3 Kaedah nyahpepijat
Kaedah 1: Boleh dikawal dalam pelayar Taiwan, gunakan pemalam Angular DevTools untuk melihat acara DOM tertentu, status pengesanan sudut:
Kaedah 2: Anda boleh terus memasukkan: ng.profiler. timeChangeDetection() dalam konsol untuk melihat masa Pengesanan, dengan cara ini anda boleh melihat masa pengesanan global. Blog rujukanMemprofilkan Pengesanan Perubahan Sudut
2.3 Pengoptimuman Templat (HTML)
2.3.1 Kurangkan DOM Rendering: ngFor plus trackBy
Menggunakan atribut trackBy *ngFor, Angular hanya menukar dan memaparkan semula entri yang diubah tanpa perlu memuat semula keseluruhan senarai entri.
Contohnya: senario pengisihan jadual. Jika trackBy ditambahkan pada ngFor, hanya elemen dom baris akan dialihkan apabila jadual dipaparkan Jika trackBy tidak ditambahkan, elemen dom jadual sedia ada akan dipadamkan dahulu, dan kemudian elemen dom baris akan ditambah. Jelas sekali prestasi menggerakkan elemen dom sahaja akan menjadi lebih baik.
2.3.2 Jangan gunakan fungsi dalam ungkapan templat
Jangan gunakan panggilan fungsi dalam ungkapan templat Sudut Anda boleh menggunakan paip sebaliknya, atau anda boleh menggunakan pembolehubah selepas pengiraan manual. Apabila fungsi digunakan dalam templat, tidak kira sama ada nilai telah berubah atau tidak, fungsi akan dilaksanakan setiap kali pengesanan perubahan dilakukan, yang akan menjejaskan prestasi.
Senario untuk menggunakan fungsi dalam templat:
2.3.3 Kurangkan penggunaan ngFor
Menggunakan ngFor akan menjejaskan prestasi apabila jumlah data adalah besar.
Contoh:
Gunakan ngFor:
Tidak menggunakan ngFor: prestasi meningkat kira-kira 10 kali
Untuk lebih banyak pengetahuan berkaitan pengaturcaraan, sila lawati: Video Pengaturcaraan! !
Atas ialah kandungan terperinci Bagaimana untuk mengoptimumkan prestasi dalam sudut? Analisis ringkas kaedah pengesanan perubahan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Aplikasi JavaScript di dunia nyata termasuk pengaturcaraan sisi pelayan, pembangunan aplikasi mudah alih dan Internet of Things Control: 1. Pengaturcaraan sisi pelayan direalisasikan melalui node.js, sesuai untuk pemprosesan permintaan serentak yang tinggi. 2. Pembangunan aplikasi mudah alih dijalankan melalui reaktnatif dan menyokong penggunaan silang platform. 3. Digunakan untuk kawalan peranti IoT melalui Perpustakaan Johnny-Five, sesuai untuk interaksi perkakasan.

Saya membina aplikasi SaaS multi-penyewa berfungsi (aplikasi edTech) dengan alat teknologi harian anda dan anda boleh melakukan perkara yang sama. Pertama, apakah aplikasi SaaS multi-penyewa? Aplikasi SaaS Multi-penyewa membolehkan anda melayani beberapa pelanggan dari Sing

Artikel ini menunjukkan integrasi frontend dengan backend yang dijamin oleh permit, membina aplikasi edtech SaaS yang berfungsi menggunakan Next.Js. Frontend mengambil kebenaran pengguna untuk mengawal penglihatan UI dan memastikan permintaan API mematuhi dasar peranan

JavaScript adalah bahasa utama pembangunan web moden dan digunakan secara meluas untuk kepelbagaian dan fleksibiliti. 1) Pembangunan front-end: Membina laman web dinamik dan aplikasi satu halaman melalui operasi DOM dan kerangka moden (seperti React, Vue.js, sudut). 2) Pembangunan sisi pelayan: Node.js menggunakan model I/O yang tidak menyekat untuk mengendalikan aplikasi konkurensi tinggi dan masa nyata. 3) Pembangunan aplikasi mudah alih dan desktop: Pembangunan silang platform direalisasikan melalui reaktnatif dan elektron untuk meningkatkan kecekapan pembangunan.

Trend terkini dalam JavaScript termasuk kebangkitan TypeScript, populariti kerangka dan perpustakaan moden, dan penerapan webassembly. Prospek masa depan meliputi sistem jenis yang lebih berkuasa, pembangunan JavaScript, pengembangan kecerdasan buatan dan pembelajaran mesin, dan potensi pengkomputeran IoT dan kelebihan.

JavaScript adalah asas kepada pembangunan web moden, dan fungsi utamanya termasuk pengaturcaraan yang didorong oleh peristiwa, penjanaan kandungan dinamik dan pengaturcaraan tak segerak. 1) Pengaturcaraan yang didorong oleh peristiwa membolehkan laman web berubah secara dinamik mengikut operasi pengguna. 2) Penjanaan kandungan dinamik membolehkan kandungan halaman diselaraskan mengikut syarat. 3) Pengaturcaraan Asynchronous memastikan bahawa antara muka pengguna tidak disekat. JavaScript digunakan secara meluas dalam interaksi web, aplikasi satu halaman dan pembangunan sisi pelayan, sangat meningkatkan fleksibiliti pengalaman pengguna dan pembangunan silang platform.

Python lebih sesuai untuk sains data dan pembelajaran mesin, manakala JavaScript lebih sesuai untuk pembangunan front-end dan penuh. 1. Python terkenal dengan sintaks ringkas dan ekosistem perpustakaan yang kaya, dan sesuai untuk analisis data dan pembangunan web. 2. JavaScript adalah teras pembangunan front-end. Node.js menyokong pengaturcaraan sisi pelayan dan sesuai untuk pembangunan stack penuh.

JavaScript tidak memerlukan pemasangan kerana ia sudah dibina dalam pelayar moden. Anda hanya memerlukan editor teks dan penyemak imbas untuk memulakan. 1) Dalam persekitaran penyemak imbas, jalankan dengan memasukkan fail HTML melalui tag. 2) Dalam persekitaran Node.js, selepas memuat turun dan memasang node.js, jalankan fail JavaScript melalui baris arahan.


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

DVWA
Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini

MinGW - GNU Minimalis untuk Windows
Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.

Pelayar Peperiksaan Selamat
Pelayar Peperiksaan Selamat ialah persekitaran pelayar selamat untuk mengambil peperiksaan dalam talian dengan selamat. Perisian ini menukar mana-mana komputer menjadi stesen kerja yang selamat. Ia mengawal akses kepada mana-mana utiliti dan menghalang pelajar daripada menggunakan sumber yang tidak dibenarkan.

Muat turun versi mac editor Atom
Editor sumber terbuka yang paling popular

mPDF
mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),