搜尋
首頁web前端js教程Angular4效能最佳化方法總結

這次帶給大家Angular4效能優化方法總結,Angular4效能優化的注意事項有哪些,以下就是實戰案例,一起來看一下。

Summary

Angular 4的髒值偵測是個老話題了,而理解這個模型是做Angular效能優化的基礎。因此,今天我們再來聊聊Angular 4髒值偵測的原理,並看看效能最佳化的小提示。

進入點 - Zone.js

Angular 4是一個MVVM框架。資料模型(Model)轉換成視圖模型(ViewModel)後,綁定到視圖(View)上渲染成肉眼可見的頁面。因此,發現資料模型變化的時間點是更新頁面的關鍵,也是呼叫髒值偵測的關鍵。

經過分析,工程師發現,資料的變化往往由macrotask和microtask等非同步事件所引起。因此,透過重寫瀏覽器所有的非同步API,就能從源頭有效監聽資料變化。 Zone.js就是這樣一個猴子腳本(Monkey Patch)。 Angular 4使用了一個客製化的Zone(NgZone),它會通知Angular可能有資料變化,需要更新視圖中的資料(髒值偵測)。

髒值偵測(Change Detection)

髒值偵測的基本原理是儲存舊數值,並在進行偵測時,把當前時刻的新值和舊值比對。若相等則沒有變化,反之則偵測到變化,需要更新視圖。

Angular 4把頁面切割成若干個Component(元件),組成一棵元件樹。進入髒值偵測後,從根組件自頂向下進行偵測。 Angular有兩種策略:Default和OnPush。它們配置在組件上,決定髒值偵測過程中不同的行為。

Default - 預設策略

ChangeDetectionStrategy.Default。它也意味著一旦發生可能有資料變化的事件,就總是偵測這個元件。

髒值偵測的操作基本上可以理解為以下幾步。 1)更新子元件綁定的properties,2)呼叫子元件的NgDoCheck和NgOnChanges生命週期鉤子(Lifecycle hook),3)更新自己的DOM,4)對子元件髒值偵測。這是一個從根組件開始的遞歸方程式。

// This is not Angular code
function changeDetection(component) {
 updateProperties(component.children);
 component.children.forEach(child => {
  child.NgDoCheck();
  child.NgOnChanges();
 };
 updateDom(component);
 component.children.forEach(child => changeDetection(child));
}

我們開發者會非常關注DOM更新的順序,以及呼叫NgDoCheck和NgOnChanges的順序。可以發現:

  1. DOM更新是深度優先的

  2. NgDoCheck和NgOnChanges並不是(也不是深度優先)

#OnPush - 單次偵測策略

ChangeDetectionStrategy.OnPush。只在Input Properties變化(OnPush)時才檢測這個組件。因此當Input不變時,它只在初始化時被偵測,也叫單次偵測。它的其他行為和Default保持一致。

要注意的是,OnPush只偵測Input的引用。 Input物件的屬性變化並不會觸發目前元件的髒值偵測。

雖然OnPush策略提高了性能,但也是Bug的高發地點。解往往是將Input轉換成Immutable的形式,強制Input的引用改變。

Tips

資料綁定

#Angular有3種合法的資料綁定方式,但它們的性能是不一樣的。

直接綁定資料


     
  •   Name {{item.name}}   Classes {{item.classes}}  

大多數情況下,這都是效能最好的方式。

綁定一個function呼叫結果


     
  •   Name {{item.name}}   Classes {{classes(item)}}  

在每個髒值偵測過程中,classes方程式都要被呼叫一遍。設想使用者正在滾動頁面,多個macrotask產生,每個macrotask都至少進行一次髒值檢測。如果沒有特殊需求,應盡量避免這種使用方式。

綁定資料 pipe


     
  •   Name {{item.name}}   Classes {{item | classPipe}}  

它和綁定function類似,每次髒值偵測classPipe都會被呼叫。不過Angular給pipe做了優化,加了緩存,如果item和上次相等,則直接回傳結果。

NgFor

多数情况下,NgFor应该伴随trackBy方程使用。否则,每次脏值检测过程中,NgFor会把列表里每一项都执行更新DOM操作。

@Component({
 selector: 'my-app',
 template: `
  
       
  • {{item.id}}
  •   
    `, }) export class App {  collection;  constructor() {   this.collection = [{id: 1}, {id: 2}, {id: 3}];  }     getItems() {   this.collection = this.getItemsFromServer();  }     getItemsFromServer() {   return [{id: 1}, {id: 2}, {id: 3}, {id: 4}];  }     trackByFn(index, item) {   return index;  } }

Reference

  1. He who thinks change detection is depth-first and he who thinks it's breadth-first are both usually right

  2. Angular Runtime Performance Guide

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

vue-cli2.9.3使用步骤详解

vue webpack使用案例详解

以上是Angular4效能最佳化方法總結的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
JavaScript的演變:當前的趨勢和未來前景JavaScript的演變:當前的趨勢和未來前景Apr 10, 2025 am 09:33 AM

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

神秘的JavaScript:它的作用以及為什麼重要神秘的JavaScript:它的作用以及為什麼重要Apr 09, 2025 am 12:07 AM

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

Python還是JavaScript更好?Python還是JavaScript更好?Apr 06, 2025 am 12:14 AM

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

如何安裝JavaScript?如何安裝JavaScript?Apr 05, 2025 am 12:16 AM

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

在Quartz中如何在任務開始前發送通知?在Quartz中如何在任務開始前發送通知?Apr 04, 2025 pm 09:24 PM

如何在Quartz中提前發送任務通知在使用Quartz定時器進行任務調度時,任務的執行時間是由cron表達式設定的。現�...

在JavaScript中,如何在構造函數中獲取原型鏈上函數的參數?在JavaScript中,如何在構造函數中獲取原型鏈上函數的參數?Apr 04, 2025 pm 09:21 PM

在JavaScript中如何獲取原型鏈上函數的參數在JavaScript編程中,理解和操作原型鏈上的函數參數是常見且重要的任�...

微信小程序webview中Vue.js動態style位移失效是什麼原因?微信小程序webview中Vue.js動態style位移失效是什麼原因?Apr 04, 2025 pm 09:18 PM

在微信小程序web-view中使用Vue.js動態style位移失效的原因分析在使用Vue.js...

在Tampermonkey中如何實現對多個鏈接的並發GET請求並依次判斷返回結果?在Tampermonkey中如何實現對多個鏈接的並發GET請求並依次判斷返回結果?Apr 04, 2025 pm 09:15 PM

在Tampermonkey中如何對多個鏈接進行並發GET請求並依次判斷返回結果?在Tampermonkey腳本中,我們經常需要對多個鏈...

See all articles

熱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.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

SublimeText3 Mac版

SublimeText3 Mac版

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

DVWA

DVWA

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