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
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:
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.
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
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 -
- Pobierz zegarek z listy
- sprawdź czy pozycja została zmieniona
- Jeśli nie ma zmian w pozycji to
- nie podjęto żadnych działań, przejdź do następnej pozycji na liście obserwowanych
Second -
- Pobierz zegarek z listy
- sprawdź, czy pozycja została zmieniona
- Jeśli w elemencie występuje zmiana
- 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.
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
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.
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.
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