Co nowego w React 18? Czy poprawa wydajności aplikacji internetowych to temat numer 1 w tej aktualizacji?

Software house, Aplikacje • 12.02.2024 • 5 minut

Wstęp


React 18, czyli kolejna aktualizacja jednego z najpopularniejszych frameworków JavaScript, przynosi ze sobą szereg zmian. Niektóre z nich można uznać jako kosmetyczne, natomiast pojawiają się też dosyć duże ulepszenia. Wpływają one na wydajność aplikacji i pozwalają rozwiązywać szereg problemów z którymi borykamy się na codzień. Zazwyczaj da się je ominąć, natomiast prawda jest taka, że perspektywa ich wyeliminowania pozwala zaoszczędzić czas i skupić się na realnych funkcjach, które są istotne z punktu widzenia produktu. Można powiedzieć, że ta aktualizacja nie jest spektakularna sama w sobie i nie przynosi wiele nowości jeżeli chodzi o hooki czy funkcje. Wprowadza za to bardzo dużą zmianę optymalizacyjną, którą postaram się opisać w kolejnym akapicie.

Concurrent Mode czyli renderowanie współbieżne


Jedną z tych najbardziej porywających nowości w React 18 jest wprowadzenie tzw. "Concurrent Mode". Mimo, że tej zmiany nie widać na pierwszy rzut oka, wprowadza ona gigantyczny skok naprzód jeżeli chodzi o wydajność samego frameworka. Ten tryb pracy, oparty na koncepcji współbieżności, umożliwia Reactowi lepszą kontrolę nad priorytetami w renderowaniu komponentów. W rezultacie aplikacje mogą reagować na interakcje użytkownika szybciej i płynniej, co prowadzi do znaczącej poprawy w doświadczeniu użytkownika.


Nie będę zagłębiał się w szczegóły implementacji trybu współbieżnego, natomiast najważniejsze jest to, że wszystko odbywa się wewnątrz biblioteki React. Aktualizacja ta nie wprowadza żadnych zmian jeżeli chodzi o implementację komponentów czy wykorzystanie hooków. Co za tym idzie zrozumienie działania tego mechanizmu nie jest konieczne do poprawy efektywności aplikacji internetowych. Wydaje się, że to dopiero przyczynek do wprowadzania kolejnych aktualizacji, które dadzą więcej kontroli programistom nad procesem renderowania i które spowodują jeszcze większy wzrost responsywności aplikacji. Z opisywaną aktualizacją przyszło kilka takich metod, dlatego postaram się przybliżyć je w dalszej części.

Suspense - czy już wszystko gotowe?


Wraz z wprowadzeniem "Concurrent Mode", React 18 także udoskonala obsługę "Suspense". Dotychczas Suspense był używany głównie do ładowania komponentów, teraz jednak można go stosować również do opóźniania pobierania danych. Ta funkcjonalność jest niezwykle przydatna w przypadku aplikacji, które pobierają dane asynchronicznie, umożliwiając programistom bardziej przystępne rozwiązania zarządzania stanem aplikacji.

Automatic Batching - automatyczne grupowanie


Jednym z kluczowych aspektów, który przynosi React 18, jest automatyczne grupowanie aktualizacji stanu komponentów. Mechanizm ten, znany jako "Automatic Batching", pozwala na zbiorcze przetwarzanie wielu aktualizacji w jednej operacji, co zmniejsza liczbę niepotrzebnych ponownych renderowań. Dzięki temu aplikacje stają się bardziej wydajne i responsywne, szczególnie w przypadku aplikacji złożonych. Weźmy na przykład aktualizację stanu aplikacji za pomocą hooków. Przed wprowadzeniem tej zmiany, aktualizacja więcej niż jednego stanu powodowała wielokrotne renderowanie komponentu. Dzięki "Automatic Batching" problem ten nie powinien występować w naszych aplikacjach.


Kolejne z elementów, które zwiększają kontrolę nad procesem rednerowania są metoda "startTransition" oraz hook "useDefferedValue". Metoda "startTransition" umożliwia oznaczenie części aplikacji jako "przejściowa", co pozwala na odroczenie niektórych aktualizacji interfejsu użytkownika, aby zachować płynność jego interakcji. Jest to szczególnie przydatne w przypadku interfejsów z dużą liczbą zmian stanu, które mogą prowadzić do opóźnień w reakcji na interakcje użytkownika. Poprzednio programiści musieli implementować skomplikowane rozwiązania, aby osiągnąć podobne efekty - teraz ”startTransition” oferuje prosty i przejrzysty sposób na zarządzanie tym procesem.


Z drugiej strony, ”useDeferredValue” to nowy hook, który umożliwia opóźnienie propagacji zmiany stanu do komponentów potomnych, co pozwala na zoptymalizowanie wydajności aplikacji. Ten hook jest szczególnie przydatny w przypadku przekazywania dużej ilości danych pomiędzy komponentami, gdzie natychmiastowe aktualizacje mogą prowadzić do spadku płynności interfejsu użytkownika. Wykorzystanie hooka "useDeferredValue" pozwala na kontrolowanie, kiedy aktualizacje stanu są propagowane, co z kolei pozwala na zoptymalizowanie wydajności i responsywności interfejsu użytkownika. W poprzednich wersjach Reacta programiści musieli stosować różne techniki, takie jak memoizacja lub optymalizacja renderowania, aby osiągnąć podobne rezultaty. Hook "useDeferredValue" oferuje teraz wbudowane rozwiązanie, które jest prostsze w użyciu oraz bardziej wydajne.

Server side rendering? Z pomocą przyjdą komponenty serwerowe


Oprócz ulepszeń dotyczących wydajności i reaktywności, React 18 przynosi również szereg ulepszeń w zakresie renderowania po stronie serwera. Poprawiony mechanizm renderowania po stronie serwera sprawia, że aplikacje działają szybciej i bardziej niezawodnie, co przekłada się na lepsze doświadczenia użytkowników końcowych oraz wsparcie dla optymalizacji SEO.

Nowe API Root


Nowa wersja Reacta wprowadza również nowe API Root. Jest to jedyna, kosmetyczna zmiana jaką trzeba przeprowadzić aby dostosować aplikację do działania z React 18. Dzięki niej możemy korzystać ze wszystkich ulepszeń, które wprowadza nowa wersja frameworku.

Podsumowanie


React 18 to znaczący krok naprzód w świecie tworzenia interfejsów użytkownika. Dzięki wprowadzonym zmianom i ulepszeniom, programiści mają teraz do dyspozycji narzędzia, które umożliwiają tworzenie jeszcze bardziej zaawansowanych i responsywnych aplikacji internetowych. Ta aktualizacja stanowi kolejny dowód na to, że React nadal pozostaje w czołówce technologii front-endowych.

O autorze

Michał od ponad dekady projektuje aplikacje internetowe zbudowane w oparciu o framework ReactJS. Jego podejście do UX pozwala aveneo, jako software house, dostarczać czytelne i proste w obsłudze narzędzia, które adresują najbardziej zaawansowane potrzeby biznesowe.

Michał
Frontend lead & UX designer
Jesteś gotowy, żeby porozmawiać o swoim projekcie?