什麼是髒檢測,angular的雙向繫結機制為什麼叫髒檢測,雙向繫結具體細節是怎麼樣的?

時間 2021-05-07 11:59:22

1樓:

在angular中你無法判斷你的資料做了更改,所以它設定了一些條件,當你觸發這些條件之後,他就執行乙個檢測來遍歷所有的資料,對比你更改的地方,然後執行變化,這種檢查很不科學,而且效率還不高,有很多多餘的地方,所以官方叫做髒檢查機制

2樓:拿回憶下酒

髒檢查機制。

雙向資料繫結是 AngularJS 的核心機制之一。當 view 中有任何資料變化時,會更新到 model ,當 model 中資料有變化時,view 也會同步更新,顯然,這需要乙個監控。

原理就是,Angular 在 scope 模型上設定了乙個監聽佇列,用來監聽資料變化並更新 view 。每次繫結乙個東西到 view 上時 AngularJS 就會往 $watch 佇列裡插入一條 $watch,用來檢測它監視的 model 裡是否有變化的東西。當瀏覽器接收到可以被 angular context 處理的事件時,$digest 迴圈就會觸發,遍歷所有的 $watch,最後更新 dom。

3樓:

DI / 雙向資料繫結中:

使用者 -> 記憶體 :

瀏覽器提供有User Event觸發事件的API,如click,change...等等等;記憶體 -> 使用者:

瀏覽器並沒有提供資料監測的API,故任何記憶體資料變動(定時、非同步請求、事件觸發...導致的資料變動)都無法被Listen,自然也就沒辦法再處理callback了;

但我們可以基於這些大部分能夠產生資料變動的事件進行封裝(如:click、mouse-enter、Timeout...),在每次事件發生後,執行完事件後,檢查一遍資料的變化,如果資料和上次的值有變化,則執行這個值(註冊時)對應的callback(框架中),這個callback可能是view層的乙個資料展現,也可能是一段處理function;

在檢查資料變化的時候,由於你並不知道這個事件是對哪些資料進行了更改,以及這個事件有可能造成事件之外的其他任何地方的資料更改,所以必須進行一次大檢查,將所有「註冊」過的值全部檢查一遍,一次檢查稱為乙個週期,每次最少檢查兩遍,因為第二遍用來確認,前一遍的變動中是否有資料的變動,導致了其他資料的變動,如果第二次有變動的話,會再執行一遍,直到最後兩次完全一致,則停止檢查(其實就是個(遞迴(遍歷))的過程),考慮到記憶體的消耗和死迴圈的風險,髒檢查每個週期最多遞迴執行10遍,所以在程式結構設計中,盡量避免資料與資料之間的緊耦合;

所以我們看到的

ng-click,ng-change,ng-blur...就是對各類使用者事件的封裝

$timeout,$http,$window,$location...就是對各種JS/API事件的封裝

ng-model,以及控制器中的資料,就是對值的「註冊」

$scope 本質是乙個總的事件邏輯的封裝容器,同時抽象為資料載體,

實質上資料都存在於瀏覽器堆記憶體中digest() 即Angular中的「資料大檢查」的function

所以如果我們使用了非Angular封裝的事件改編資料時,要手動執行一次大檢查由於Angular這種髒檢查的方法效率不高,如果乙個頁面繫結的view超過2000個,就可能存在比較明顯的效能問題,官方稱之為「髒檢查」

類似的Vue.js框架則使用definePropertyAPI來實現資料與檢視的繫結關係

參考:Object.defineproperty實現資料和檢視的聯動

什麼是核酸混合檢測技術

瀟灑過寒冬愛學術 可參考國家衛生健康委員會的檔案 大概是神仙 這樣理解沒錯,但是問題就在於上面那位說的,你沒辦法確保每個樣本都是正常取到樣的,我所了解的核酸檢測試劑盒中所用的探針是FAM VIC CY5,前兩個為探針,Cy5為染料,正常樣本兩個探針是不會擴增的,只有Cy5擴增,Cy5就是作為內參指示...

2016 年的今天,Angular 1 還有什麼使用價值?

對於新專案使用價值,不用考慮了,用新的框架吧。angular 1.x 的很多特性細節設計的非常蛋疼,這個是沒有做好規劃的結果。說點學習價值 髒檢測 各種優化手段 表示式的解析器 非常有用的知識 依賴注入 指令的基礎部分。不用看太深入,很多特性的設計和實現都很蛋疼。promise 和 http 的實現...

機器視覺中的缺陷檢測都檢測什麼?

COBOT機械人大腦 前面已經說了很多,這裡具體一點,從自身做過香菇行業稍微描述哈,但是總的來說,都是依據現實需求而來,而且產品不一樣,需求就不一樣,也有可能每家廠商的標準也不一樣,不能一概而論。以香菇為例,過去很長一段時間裡都是人工分選,什麼資料都沒有。香菇種類多,大小 形狀甚至紋路都不一樣,香菇...