目錄
1. 為什麼要優化
2. 程式設計習慣方面
3. ChangeDetectionStrategy.OnPush 進行效能提升
4. 利用ngzone-runOutsideAngular最佳化
5. 手動控制髒檢查 ChangeDetectorRef
6. 總結
首頁 web前端 js教程 淺談angular中優化綁定(髒檢查)效能的小技巧

淺談angular中優化綁定(髒檢查)效能的小技巧

Jun 22, 2021 am 10:44 AM
angular

本篇文章跟大家介紹一下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(&#39;mousemove&#39;, 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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

聊聊Angular中的元資料(Metadata)和裝飾器(Decorator) 聊聊Angular中的元資料(Metadata)和裝飾器(Decorator) Feb 28, 2022 am 11:10 AM

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

如何在Ubuntu 24.04上安裝Angular 如何在Ubuntu 24.04上安裝Angular Mar 23, 2024 pm 12:20 PM

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

angular學習之詳解狀態管理器NgRx angular學習之詳解狀態管理器NgRx May 25, 2022 am 11:01 AM

這篇文章帶大家深入了解angular的狀態管理器NgRx,介紹一下NgRx的使用方法,希望對大家有幫助!

一文探究Angular中的服務端渲染(SSR) 一文探究Angular中的服務端渲染(SSR) Dec 27, 2022 pm 07:24 PM

你知道 Angular Universal 嗎?可以幫助網站提供更好的 SEO 支援哦!

Angular + NG-ZORRO快速開發一個後台系統 Angular + NG-ZORRO快速開發一個後台系統 Apr 21, 2022 am 10:45 AM

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

如何使用PHP和Angular進行前端開發 如何使用PHP和Angular進行前端開發 May 11, 2023 pm 04:04 PM

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

淺析angular中怎麼使用monaco-editor 淺析angular中怎麼使用monaco-editor Oct 17, 2022 pm 08:04 PM

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

淺析Angular中的獨立組件,看看怎麼使用 淺析Angular中的獨立組件,看看怎麼使用 Jun 23, 2022 pm 03:49 PM

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

See all articles