淺談angular中優化綁定(髒檢查)效能的小技巧
本篇文章跟大家介紹一下Angular綁定(髒檢查)方面的效能最佳化技巧。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有幫助。
1. 為什麼要優化
#雙向綁定是一柄雙面刃,提高開發效率的同時,也犧牲了性能。當然,隨著硬體效能的提升,Angular自身效能的提升,對於一般(中小)複雜度的應用,效能問題可以忽略不計。但對於特殊場景,或複雜頁面來說,我們需要單獨的處理資料綁定問題,否則就會有卡頓的現象,影響使用者體驗。 【相關教學推薦:《angular教學》】
2. 程式設計習慣方面
平常的一些小技巧,小習慣,都可以改善Angular綁定方面的效能。
2.1. NgForOf,加入trackBy提升效能
trackBy定義如何追蹤可迭代項目的變更的函數。在迭代器中新增、移動或刪除條目時,指令必須重新渲染適當的 DOM 節點。為了最大程度地減少 DOM 中的攪動,僅重新渲染已更改的節點。
預設情況下,變更偵測器假定物件實例標識可迭代物件。提供此函數後,指令將使用呼叫此函數的結果來標識項節點,而不是物件本身的標識。
2.2. Angular資料綁定的三種方式
<div> <span>Name {{item.name}}</span> <!-- 1. 直接绑定 --> <span>Classes {{item | classPipe}}</span><!-- 2. pipe方式--> <span>Classes {{classes(item)}}</span><!-- 3.绑定方法调用的结果 --> </div>
直接綁定: 大多數情況下,這都是性能最好的方式。
綁定方法呼叫的結果:在每個髒值偵測過程中,classes方程式都要被呼叫一遍。如果沒有特殊需求,應盡量避免這種使用方式。
pipe方式: 它和綁定function類似,每次髒值偵測classPipe都會被呼叫。不過Angular給pipe做了優化,加了緩存,如果item和上次相等,則直接回傳結果。
<li *ngFor="let item of items; index as i; trackBy: trackByFn">...</li>
2.3. 除非需要,都是用單向綁定,減少監控值的數量
對於一般數據來說,都是只需要展示給用戶,不需要修改。那麼對於這部分數據,使用單向綁定即可(ts->html).
如:
<!-- 也称插值绑定 --> <span>{{yourMessage}}</span>
3. ChangeDetectionStrategy.OnPush 進行效能提升
對於一些很複雜的頁面,上面的小技巧就不夠用了,不過Angular也是考慮到這些了,提供了不少方法。
Angular 對比 AngularJS 在變化偵測上由原來的雙向偵測(父->子,子->父)變成單向(父->子)。所以每一次變化偵測都會確定性地收斂。
Angular定義一個元件時,可以傳入一個變化偵測配置項目為
changeDetection: ChangeDetectionStrategy.OnPush | ChangeDetectionStrategy.Default;
onpush策略只判斷輸入的引用(如果是object)是否改變,來判斷是否進行髒檢查。因此,我們可以使用onpush策略來減少變化檢測的開銷。
4. 利用ngzone-runOutsideAngular最佳化
#Angular依賴NgZone來監聽非同步操作,並從根部執行變化偵測。換句話說,我們程式碼中的每一個 addEventListener都會觸發髒檢查。但如果我們非常明確,有些addEventListener要執行的東西,不會(或說可以忽略)影響資料結果,不想然他觸發髒檢查。如監測scroll,監測滑鼠事件等。
針對這種情況, 我們可以使用zone提供的runOutsideAngular,讓這些事件不觸發髒檢查。
this.zone.runOutsideAngular(() => { window.document.addEventListener('mousemove', this.bindMouse); });
5. 手動控制髒檢查 ChangeDetectorRef
#Angular的ChangeDetectorRef實例上提供了可以綁定或解綁某個元件髒檢查的方法。
class ChangeDetectorRef { markForCheck() : void // 通知框架进行变化检查/Change Detection detach() : void // 禁止脏检查 detectChanges() : void // 手工触发脏检查, 从该组件到各个子组件执行一次变化检测 checkNoChanges() : void reattach() : void // detach逆操作,启用脏检查 }
6. 總結
平時的一些小習慣,都可以提高angular的效能;
-
針對複雜應用,或是當出現卡頓時,我們也是有辦法的!
更多程式相關知識,請造訪:程式設計教學! !
以上是淺談angular中優化綁定(髒檢查)效能的小技巧的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

這篇文章繼續Angular的學習,帶大家了解Angular中的元數據和裝飾器,簡單了解一下他們的用法,希望對大家有幫助!

Angular.js是一種可自由存取的JavaScript平台,用於建立動態應用程式。它允許您透過擴展HTML的語法作為模板語言,以快速、清晰地表示應用程式的各個方面。 Angular.js提供了一系列工具,可協助您編寫、更新和測試程式碼。此外,它還提供了許多功能,如路由和表單管理。本指南將討論在Ubuntu24上安裝Angular的方法。首先,您需要安裝Node.js。 Node.js是一個基於ChromeV8引擎的JavaScript運行環境,可讓您在伺服器端執行JavaScript程式碼。要在Ub

這篇文章跟大家分享一個Angular實戰,了解一下angualr 結合 ng-zorro 如何快速開發一個後台系統,希望對大家有幫助!

隨著網路的快速發展,前端開發技術也不斷改進與迭代。 PHP和Angular是兩種廣泛應用於前端開發的技術。 PHP是一種伺服器端腳本語言,可以處理表單、產生動態頁面和管理存取權限等任務。而Angular是一種JavaScript的框架,可以用來開發單一頁面應用程式和建構元件化的網頁應用程式。本篇文章將介紹如何使用PHP和Angular進行前端開發,以及如何將它們

angular中怎麼使用monaco-editor?以下這篇文章記錄下最近的一次業務中用到的 monaco-editor 在 angular 中的使用,希望對大家有幫助!

這篇文章帶大家了解Angular中的獨立元件,看看怎麼在Angular中建立一個獨立元件,怎麼在獨立元件中導入已有的模組,希望對大家有幫助!
