Jestem głównym autorem modułu wirtualnego domu , więc mogę być w stanie odpowiedzieć na twoje pytania. W rzeczywistości są tutaj 2 problemy, które należy rozwiązać
- Kiedy ponownie renderuję? Odpowiedź: Kiedy zauważę, że dane są brudne.
- Jak wydajnie renderować ponownie? Odpowiedź: Używanie wirtualnego DOM do wygenerowania prawdziwej poprawki DOM
W React każdy ze składników ma stan. Ten stan jest podobny do obserwowanego w nokautach lub innych bibliotekach typu MVVM. Zasadniczo React wie, kiedy ponownie renderować scenę, ponieważ jest w stanie obserwować zmiany tych danych. Brudne sprawdzanie jest wolniejsze niż obserwowalne, ponieważ należy odpytywać dane w regularnych odstępach czasu i sprawdzać rekurencyjnie wszystkie wartości w strukturze danych. Dla porównania ustawienie wartości w stanie zasygnalizuje słuchaczowi, że jakiś stan się zmienił, więc React może po prostu nasłuchiwać zmian w stanie i kolejkować ponowne renderowanie.
Wirtualny DOM służy do wydajnego renderowania DOM. To nie jest tak naprawdę związane z brudnym sprawdzaniem danych. Możesz ponownie renderować za pomocą wirtualnego DOM z brudnym sprawdzaniem lub bez. Masz rację, że obliczenie różnicy między dwoma wirtualnymi drzewami jest pewne, ale wirtualny DOM DOM polega na zrozumieniu, co wymaga aktualizacji w DOM, a nie na tym, czy Twoje dane uległy zmianie. W rzeczywistości algorytm porównywania sam w sobie jest brudnym narzędziem sprawdzającym, ale służy do sprawdzania, czy DOM jest zamiast tego brudny.
Naszym celem jest ponowne renderowanie drzewa wirtualnego tylko w przypadku zmiany stanu. Zatem użycie obserwowalnego do sprawdzenia, czy stan się zmienił, jest skutecznym sposobem zapobiegania niepotrzebnym ponownym renderowaniu, które powodowałoby wiele niepotrzebnych różnic w drzewach. Jeśli nic się nie zmieniło, nic nie robimy.
Wirtualny DOM jest fajny, ponieważ pozwala nam pisać nasz kod tak, jakbyśmy renderowali całą scenę. Za kulisami chcemy obliczyć operację poprawki, która aktualizuje DOM, aby wyglądał tak, jak oczekujemy. Tak więc, chociaż algorytm wirtualnego porównania / różnicowania DOM DOM nie jest prawdopodobnie optymalnym rozwiązaniem , daje nam to bardzo dobry sposób na wyrażenie naszych aplikacji. Po prostu deklarujemy dokładnie to, czego chcemy, a React / virtual-dom wypracuje sposób, aby Twoja scena wyglądała tak. Nie musimy wykonywać ręcznej manipulacji DOM ani mylić się co do poprzedniego stanu DOM. Nie musimy też ponownie renderować całej sceny, co może być znacznie mniej wydajne niż łatanie.