Einführung
In diesem Artikel geht es um die Einschränkungen von React Native. Manche Einschränkungen gibt es sowohl bei iOS als auch bei Android und manchmal auch bei einem davon (manchmal sind die iOS- und Android-Versionen einer bestimmten App getrennt).
React Native hat noch einen langen Weg vor sich, um einige leistungsbezogene Einschränkungen und Herausforderungen wie Multithreading, Parallelverarbeitung, Animationen, Scrolllisten usw. zu überwinden.
Facebook möchte nicht, dass Sie die folgenden Einschränkungen von React Native kennen
Sie können in der heutigen Hightech-Welt unmöglich konkurrenzfähig sein, wenn Sie der weltweiten Nachfrage nach qualitativ hochwertiger UI und UX nicht gerecht werden. Wenn Sie Ihr Unternehmen auf die nächste Stufe heben und exponentiell wachsen lassen möchten, müssen Sie den Einsatz von React Native ernsthaft überdenken.
Anstatt einen traditionellen Ansatz bei der Anwendungsentwicklung zu verfolgen, der zu einer mittelmäßigen Anwendung mit Leistungseinschränkungen führt, sollten Sie bedenken, dass die von Ihnen verwendete Programmiersprache und das Entwicklungsframework eine starke Alternative bieten.
Leistungseinschränkungen von React Native
Die Reaktionsfähigkeit der Benutzeroberfläche ist ein Schlüsselmaß für den Erfolg jeder Dashboard-App. Um eine schnelle und reaktionsfähige Benutzeroberfläche zu gewährleisten, muss das Dashboard durch die Anzeige möglichst weniger Widgets so einfach wie möglich gestaltet werden.
Benutzer haben Schwierigkeiten, die vielen Textspalten und -zeilen zu lesen, die erforderlich sind, um alle Informationen anzuzeigen, die eine Dashboard-App enthalten kann.
Widgets sind eine großartige Möglichkeit, Informationen zu organisieren und auf eine Weise anzuzeigen, die Benutzer leicht verstehen, aber es kann schwierig und überwältigend sein, wenn zu viele Widgets gleichzeitig auf dem Bildschirm angezeigt werden.
Bis zu diesem Punkt stellen wir nur eine Webansicht bereit. Und wenn wir dies tun, versuchen wir nicht, diese Ansicht auf mehreren Threads auszuführen.
Wenn Sie beispielsweise eine Dashboard-App erstellen, wird dieser Teil der Seite durch die Verwendung der React Native Page Class gleichzeitig auf mehreren Threads gerendert, um die Benutzeroberfläche reaktionsfähig zu halten.
Aber was wäre, wenn wir mehrere Widgets anzeigen möchten und dies auch gleichzeitig auf mehreren Threads angezeigt werden soll?
Multithreading
Wenn ein Mobilgerät über mehrere Kerne verfügt, können Sie 4 bis 8 Kerne in das Gerät einbauen und alle an einen einzigen Bildschirm senden, um eine Schaltfläche zu verarbeiten. Multithread-Anwendungen sind einfach, aber bei nativen Mobilanwendungen ist das nicht so einfach. Sie müssen einige Echtzeitbibliotheken wie Struts2 oder Apache Thrift verwenden.
Genauer gesagt: Wenn Sie React Native mit zwei oder mehr Threads verwenden, würde React Native gelegentlich und unvorhersehbar bei einem Stacktrace anhalten und für einige Sekunden hängen bleiben, um eine bessere Leistung zu erzielen.
Dann dauert es fast eine Minute, bis die Verbindung zur App wiederhergestellt ist. Wenn Sie also zehn ähnliche Threads haben, kann es zu etwa 20 Hängern kommen. Das würde bedeuten, dass Sie fast dreißig Sekunden lang nicht in der App sind. Das ist ein unvermeidlicher Nachteil von React Native. Gegen diese Einschränkung können Sie nichts tun.
Unter iOS und Android müssen Sie die UI-Elemente als Speicherpuffer behandeln. Sie können temporäre Informationen zwischen den Threads speichern und zwischendurch einen neuen aktiven Status erhalten. Auch die Akkulaufzeit wird nicht geschont. Daher ist React Native nicht so ideal für die Verwendung auf einem Hochleistungsgerät wie einem iPhone X.
Abhängigkeit von Drittanbieterbibliotheken
React Native ist ein großartiges Framework, aber aufgrund der Drittanbieterbibliothek verursacht es Leistungsprobleme. Leistungsprobleme führen dazu, dass die Leute auf native Entwicklung umsteigen oder ein anderes Framework wie PhoneGap oder Ionic wählen. Und wenn Ihr Unternehmen auf React Native angewiesen ist, wird der Verlust von Kunden sicherlich einen erheblichen Schaden für Ihren Umsatz bedeuten.
Um dieses Problem zu beheben, müssen Sie nur die bereits installierten Bibliotheken mit dem Modul react-native-library-cache zwischenspeichern. Der Rest Ihrer Anwendung wird reibungslos laufen, da Sie die Drittanbieterbibliotheken weiterhin ohne Leistungsprobleme verwenden können!
Nicht jeder Entwickler kann eine App selbst erstellen. Aus diesem Grund gibt es viele Drittanbieterbibliotheken (genannt „view“). Und diese Tatsache stellt tendenziell die Hauptbeschränkung von React Native dar.
Obwohl Sie diese Bibliotheken verwenden können, ohne den Originalcode zu ändern, verursacht dies die meisten Leistungsprobleme.
Zusätzlich zu den Framework-Einschränkungen muss ein Entwickler die Zeitprobleme zwischen Ihren Anwendungen und der Außenwelt im Auge behalten. In den meisten Fällen müssen Entwickler eine oder mehrere Netzwerkbedingungen unter Kontrolle halten, um eine bessere Leistung zu erzielen.
Einschränkungen der Abstraktionsschicht
Obwohl die Abstraktionsschicht von React Native die Leistung verbessern soll, finden viele Entwickler, dass sie nicht die beste ist, was häufig zu fehlerhaften Apps führt.
Aufgrund der häufigen Probleme mit diesem Framework zögern die meisten Unternehmen, React Native in ihr Portfolio aufzunehmen. JavaScript ist für Ihre App-Anforderungen eine weitaus bessere Option.
Es ist eine schnelle plattformübergreifende Entwicklungsplattform, die hohe Leistung, Geschwindigkeit, Stabilität und Skalierbarkeit für die Entwicklung mobiler Anwendungen bietet. JS verbessert die Produktivität der Entwickler, indem es sauberen Code bereitstellt und die Komplexität minimiert.
Wenn es um Leistungsprobleme geht, denke ich, dass die „Abstraktionsschicht“, die von den React Native-Entwicklern eingeführt wurde, für viele Entwickler ein großes Hindernis war. Sie bietet ein sehr vereinfachtes, transparentes Framework mit viel zu vielen Komplexitäten, mit denen man sich befassen muss.
React Native verbirgt alles für Sie und Sie erhalten am Ende Implementierungsdetails, die sehr schwer zu verstehen und zu debuggen sind.
Schlimmer noch, React Native geht sogar noch weiter und verschleiert viele Leistungsprobleme ohne ersichtlichen Grund oder Begründung. Es ist ein häufiges Problem, dass React Native viele versteckte Faktoren hat.
Animationen
Eines der größten Probleme bei Leistungsproblemen von React Native (manchmal) ist die Animation. Bei der Verwendung von React Native beschäftigen wir uns mit Ansichtsanimationen, bei denen die Ansicht als Funktion definiert ist.
Was wir jedoch nicht tun können, ist Inline-Animation wie bei JavaScript-Code, indem wir eine Funktion definieren, die die Animation für uns durchführt. Mit React Native können wir die Ansicht nicht definieren, die die Animation durchführt. Wir müssen uns also mit vielen Varianten von „Inline“-Animationen befassen.
Dies ist die Einschränkung der React Native Animations API. Wir haben viele benutzerdefinierte Ansichts-APIs. Eine davon (React Native Animations Platform) ist nicht leistungsfähig. Sie ist langsam und einfach zu handhaben. Wenn wir beispielsweise ein animiertes UI-Element verwenden, sind sie langsam. Aber wir brauchen sie trotzdem, da sie uns helfen, die Arbeit mit Animationen zu vermeiden.
Initialisierungszeiten
Jeder JS-Code muss in der JS Virtual Machine analysiert und ausgeführt werden. Dies hat seinen Preis, und binäres Laden und kompilierte Programme werden immer gewinnen. Es mag einige Möglichkeiten geben, dies zu verbessern, wie z. B. Bytecode-Caching, aber das scheint noch weit entfernt zu sein.
Die Verwendung von Emulatoren und Tutorials während der Ersteinrichtung war bekannt dafür, die Leistung zu beeinträchtigen. Aber React Native verbessert sie ständig mit jedem Tag.
React bietet einen Ersteinrichtungsassistenten, der die grundlegende React Native-Anwendung mit einem einzigen Klick generiert. Um mit React Native jedoch erfolgreich zu sein, müssen Sie mit seinen Herausforderungen und Einschränkungen vertraut sein.
Führen Sie daher unbedingt Prüfungen durch, sobald Sie die React Native-Anwendung erstellen. Der Code wird von der Google V8-Engine in Bytecode kompiliert. Da er vom Browser kompiliert wurde, funktioniert er nicht mit regulären JS-Laufzeitumgebungen wie Webpack oder Browserify.
Dies kann also nicht für minimierten/optimierten JavaScript-Code verwendet werden. Aufgrund all dieser Einschränkungen scheint das React Native-Framework nicht vielversprechend, um die Art und Weise, wie Menschen für iOS und Android codieren müssen, weiter voranzutreiben.
Scrollende Listen
Das Scrollen von Listen in React Native sollte man am besten vermeiden. Ich weiß, ich habe gerade gesagt, man solle das allgemeine Problem vermeiden, aber ich sehe immer noch, wie Entwickler einen Workaround zusammenschustern, anstatt das native Navigationssystem zu verwenden.
Die Lösung besteht darin, alle Elemente im Vollbildmodus zu scrollen und die Liste wie folgt anzuzeigen: (Große Version anzeigen) An dieser Lösung ist nichts auszusetzen, aber sie ist trotzdem nur eine vorübergehende Lösung. Lassen Sie uns zunächst das Konzept hinter diesem speziellen Navigationssystem verstehen.
Alle Listenelemente werden in Richtung ihres Anfangs gescrollt. Wenn ein Listenelement also mehrere Ebenen hat (z. B. eine Dashboard-Ansicht), muss das Navigationssystem die Liste der Elemente innerhalb dieser Ebenen weiter scrollen. Und wenn das nicht geschieht, wird jede Ebene zu einem separaten Listenelement.
Die Bereitstellung von Android ist mit React Native nicht einfach
Anders als bei der iOS-Bereitstellung müssen wir Android vor der Bereitstellung testen. Für iOS müssen wir nur ein brandneues Projekt erstellen und es mit Dateien aus Xcode füllen.
Die Android-Bereitstellung ist für alle immer ein großes Problem, sie ist kompliziert und voller Probleme. Bei der Bereitstellung von Android-Anwendungen können so viele Probleme auftreten – die App stürzt auf dem Simulator oder Gerät ab, auf einigen Geräten ist kein Ton zu hören usw.
Das Problem bei Android ist, dass Sie nur eine Chance haben, Ihre App richtig zu machen, oder Ihre Kunden deinstallieren Ihre App innerhalb von Sekunden! Deshalb sollten Sie einen Emulator für iOS- und Android-Plattformen verwenden.
Die Android-Bereitstellung ist nicht so einfach wie die iOS-Bereitstellung, daher müssen Sie vor der Bereitstellung testen. Für iOS müssen wir mit iCloud ein brandneues Projekt für iPhone, iPad und iPod Touch erstellen und es dann mit Dateien aus Xcode füllen.
Danach müssen wir alle Geräte mit dem Mac verbinden und sie manuell auf die Server von Apple hochladen. Wenn Sie eine Android-App haben, wird Ihre App kaum beliebt sein, wenn sie auf nur eine Gerätefamilie beschränkt ist. Sie müssen für alle Geräte schreiben. Wenn Sie Apps unter Windows entwickeln, werden diese nie populär sein, wenn sie auf nur eine Plattformfamilie beschränkt sind.
Abschluss
React Native ist ein JavaScript-Framework, das die Erstellung mobiler Apps nur mit JavaScript ermöglicht. Es ist eines der beliebtesten Frameworks für die Entwicklung mobiler Apps. Das Framework erfordert weder das Erlernen neuer Sprachen noch die Erstellung einer völlig neuen App für verschiedene Plattformen; daher ist es bei iOS- und Android-Entwicklern beliebt geworden.
React Native hat jedoch auch seine Einschränkungen. Beispielsweise unterstützt es keine Webkomponenten, die in der JavaScript-Entwicklungswelt immer beliebter werden. Deshalb könnte es in Zukunft eine gute Idee sein, React Native durch andere Frameworks wie Pega oder VueJS zu ersetzen, da Webkomponenten nach und nach die Webplattform selbst übernehmen.