Brudne sprawdzanie kątowe

Czytałem jakiś artykuł, aby zrozumieć trochę więcej, jak kanciasty.JS działa.

Jednym z pojęć, których nie rozumiałem, jest " brudne sprawdzanie ".

Co to właściwie jest? Wygląda to na wzór obserwatora, ale najwyraźniej jest lepszy.

Pomożesz mi to zrozumieć?

Z góry dzięki.

EDIT: może być również przydatny dla osób, które chcą dowiedzieć się więcej na ten temat, aby obejrzeć ten film z swiip w NgEurope kilka lat temu

Author: mfrachet, 2014-07-11

6 answers

From this link :

Angular definiuje pojęcie tzw. digest cykl. Cykl ten można uznać za pętlę, podczas której kątowy sprawdza czy są jakieś zmiany we wszystkich zmiennych obserwowanych przez wszystkich $ scopes. Więc jeśli masz $ scope.myVar zdefiniowany w kontrolerze i ta zmienna została oznaczona jako obserwowana, wtedy jesteś wyraźnie mówi Angular do monitorowania zmian na myVar w każdym iteracja pętli.

To " digest" jest również nazywany "brudnym sprawdzaniem", ponieważ w pewnym sensie skanuje zakres zmian. Nie mogę powiedzieć, czy to na dobre, czy na złe, niż obserwowalny wzór. To zależy od twoich potrzeb.

Niektóre linki:

 49
Author: lante,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:36

Kątowy przepływ pracy mechanizmu sprawdzającego.

Tutaj wpisz opis obrazka

Dirty checking to prosty proces, który sprowadza się do bardzo podstawowego koncepcja: sprawdza, czy zmieniła się wartość, która jeszcze nie została synchronizacja w całej aplikacji.

Nasza aplikacja Angular śledzi wartości aktualnych zegarków. Kątowe spacery po $watch list, a jeśli zaktualizowana wartość nie zmieniła się od starej wartość, to kontynuuje w dół listy. Jeśli wartość ma zmieniony, aplikacja zapisuje nową wartość i kontynuuje w dół listy $ watch.

Zobacz cały artykuł tutaj

 14
Author: fluffyBatman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-10 09:44:10

Co to jest brudne sprawdzanie?

Proces sprawdzania każdego zegarka w celu wykrycia zmian nazywa się dirty checking. Mogą być dwa scenariusze

Pierwszy -

  1. Pobierz zegarek z listy
  2. sprawdź czy pozycja została zmieniona
  3. Jeśli nie ma zmian w pozycji to
  4. nie podjęto żadnych działań, przejdź do następnej pozycji na liście obserwowanych

Second -

  1. Pobierz zegarek z listy
  2. sprawdź, czy pozycja została zmieniona
  3. Jeśli w elemencie występuje zmiana
  4. DOM wymaga aktualizacji, powrót do pętli digest

W drugim przypadku loop kontynuuje, dopóki nie znajdzie żadnych zmian w całej pętli. A gdy się zakończy, DOM zostanie zaktualizowany w razie potrzeby.

 7
Author: Sanjay Dwivedi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-27 10:13:23

Po prostu modyfikuję poprzednią odpowiedź...

Angular ma pojęcie 'cyklu digest'. Można to uznać za pętlę. W którym Angular sprawdza, czy istnieją jakiekolwiek zmiany we wszystkich zmiennych obserwowanych przez wszystkie zakresy $(wewnętrznie funkcje $watch () I $apply () są połączone z każdą zmienną zdefiniowaną w $scope).

Więc jeśli masz $scope.myVar zdefiniowany w kontrolerze (oznacza to, że ta zmienna 'myVar' została oznaczona jako obserwowana) jawnie mówi Angular do monitorowania zmian na "myVar" w każdej iteracji pętli. Więc kiedy wartość' myVar ' się zmienia, za każdym razem gdy $watch() powiadomi i wykona $apply (), aby zastosować zmiany w DOM.

Ten "Digest" jest również nazywany "dirty checking", ponieważ w pewien sposób skanuje zakres zmian. Ponieważ wszystkie obserwowane zmienne znajdują się w jednej pętli(cykl digest), dowolna zmiana wartości dowolnej zmiennej wymusza zmianę wartości innych obserwowanych zmiennych w DOM.

PLUSY: w ten sposób Angular osiąga dwukierunkowe powiązanie danych.

Wady: Jeśli na jednej stronie jest więcej obserwowanych zmiennych (>2000-3000), możesz zobaczyć lag podczas ładowania strony.(Ale mówię, że jeśli jest tak wiele "obserwowanych zmiennych" na jednej stronie, to jest to zły projekt strony :p).

Są też inne minusy ,a także obejścia: d

 3
Author: Deepanjan Ghosh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-23 13:28:47

Przeczytałem świetny artykuł o brudnym sprawdzaniu w ten wpis na blogu . Było też to więc odpowiedz

TLDR; version

Kiedy rozpoczyna się cykl $digest, obserwatorzy sprawdzą, czy nie ma żadnych zmian w modelu scope i jeśli istnieją (zmiana może również pochodzić z poza-of-Angular-domain), odpowiednie funkcje listenera są wykonywane. Spowoduje to ponowne uruchomienie pętli $digest i sprawdzenie, czy model zakresu został zmieniony (funkcja listener może również zmodyfikować model zakresu).

Ogólnie rzecz biorąc, cykl $digest będzie przebiegał dwa razy, nawet jeśli słuchacz nie zmieni modelu lub dopóki nie osiągnie maksymalnej liczby pętli wynoszącej 10.

 2
Author: Twin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:01

Brudne sprawdzanie sprawdzi wszelkie zmiany w zmiennej $scope i zaktualizuje je do DOM. To zrobić przez angular js, można również zaimplementować brudne sprawdzanie przez własne.

 1
Author: AbhishekIIIT,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-26 05:26:17