Przejdź do treści głównej

Implementacja Wieloplatformowa

Nieoficjalne Tłumaczenie Beta

Ta strona została przetłumaczona przez PageTurner AI (beta). Nie jest oficjalnie zatwierdzona przez projekt. Znalazłeś błąd? Zgłoś problem →

Nieoficjalne Tłumaczenie Beta

Ta strona została przetłumaczona przez PageTurner AI (beta). Nie jest oficjalnie zatwierdzona przez projekt. Znalazłeś błąd? Zgłoś problem →

ostrzeżenie

Ten dokument odnosi się do Nowej Architektury, która jest obecnie w trakcie wdrażania.

Renderer React Native wykorzystuje podstawową implementację renderowania współdzieloną między platformami

W poprzednim systemie renderującym React Native, Drzewo Cieni React, logika układu oraz algorytm Spłaszczania Widoków były implementowane osobno dla każdej platformy. Obecny renderer został zaprojektowany jako rozwiązanie wieloplatformowe poprzez współdzielenie podstawowej implementacji w C++.

Zespół React Native planuje włączyć system animacji do systemu renderowania oraz rozszerzyć system renderowania React Native na nowe platformy, takie jak Windows, oraz systemy operacyjne w konsolach do gier, telewizorach i innych.

Wykorzystanie C++ dla podstawowego systemu renderowania wprowadza kilka zalet. Pojedyncza implementacja redukuje koszty rozwoju i utrzymania. Poprawia wydajność tworzenia Drzew Cieni React i obliczania układu, ponieważ narzut integracji Yoga z rendererem jest zminimalizowany na Androidzie (tzn. nie ma już JNI dla Yoga). Wreszcie, ślad pamięciowy każdego Węzła Cieni React jest mniejszy w C++ niż byłby, gdyby był alokowany w Kotlinie lub Swifcie.

Zespół wykorzystuje również funkcje C++, które wymuszają niezmienność, aby zapewnić brak problemów związanych z równoczesnym dostępem do współdzielonych, ale niechronionych zasobów.

Ważne jest, aby zdawać sobie sprawę, że przypadek użycia renderera dla Androida wciąż ponosi koszt JNI w dwóch głównych przypadkach:

  • Obliczanie układu złożonych widoków (np. Text, TextInput, itp.) wymaga przesyłania właściwości przez JNI.

  • Faza montowania wymaga przesyłania operacji mutacji przez JNI.

Zespół bada zastąpienie ReadableMap nowym mechanizmem serializacji danych przy użyciu ByteBuffer, aby zmniejszyć narzut JNI. Naszym celem jest zmniejszenie narzutu JNI o 35–50%.

Renderer udostępnia dwie strony swoich API w C++:

  • (i) do komunikacji z React

  • (ii) do komunikacji z platformą hostującą

Dla (i), React komunikuje się z rendererem, aby renderować Drzewo React i "nasłuchiwać" zdarzeń (np. onLayout, onKeyPress, dotyk, itp.).

Dla (ii), renderer React Native komunikuje się z platformą hostującą, aby zamontować widoki hosta na ekranie (tworzenie, wstawianie, aktualizowanie lub usuwanie widoków hosta) i nasłuchuje zdarzeń generowanych przez użytkownika na platformie hostującej.

Diagram implementacji wieloplatformowej