本篇文章跟大家介紹一下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中文網其他相關文章!

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

Python更适合数据科学和机器学习,JavaScript更适合前端和全栈开发。1.Python以简洁语法和丰富库生态著称,适用于数据分析和Web开发。2.JavaScript是前端开发核心,Node.js支持服务器端编程,适用于全栈开发。

JavaScript不需要安裝,因為它已內置於現代瀏覽器中。你只需文本編輯器和瀏覽器即可開始使用。 1)在瀏覽器環境中,通過標籤嵌入HTML文件中運行。 2)在Node.js環境中,下載並安裝Node.js後,通過命令行運行JavaScript文件。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

Atom編輯器mac版下載
最受歡迎的的開源編輯器

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),