Warum ist die Dateigröße von React angesichts der kleinen API so groß?

87

Hier sind die Zahlen

  • min + gzip 26k
  • gzip 90k
  • Original 450 + k

Und React hat nicht viele Funktionen in seiner Dokumentation. Warum ist es so groß?

Ich habe das Gefühl, dass es sich um die Implementierung von leichtem DOM handelt. Aber ich möchte sicher sein.

Eldar Djafarov
quelle
4
Haben Sie sich die Quelle angesehen, um zu sehen, was sie bewirkt? Hilfreicher Tipp, schauen Sie sich nicht die verkleinerte Version an.
Herr Lister
6
Ich beschloss zu fragen, bevor ich in Code tauchte. Obwohl ich vorhabe zu reagieren, würde ich sowieso dort tauchen;)
Eldar Djafarov
2
26k ist überhaupt nicht so groß ..
BT
Die Leute sagen, reagieren ist nicht groß. Ja, reactjs selbst ist sehr klein (6,41 KB für Version 16.1.1), aber denken Sie daran, dass für React ein ReactDOM erforderlich ist und ReactDOM eine Größe von 92,4 KB hat
Dinh Tran

Antworten:

186

Reagieren macht ziemlich viel! Der größte nicht offensichtliche Teil von React ist wahrscheinlich das Ereignissystem. React implementiert nicht nur ein eigenes Ereignis-Dispatching und -Bubbling, sondern normalisiert auch allgemeine Ereignisse in verschiedenen Browsern, sodass Sie sich nicht so viele Sorgen machen müssen. Beispielsweise ist SelectEventPlugin ein integriertes Ereignis- "Plugin", das ein onSelectEreignis bereitstellt , das sich in allen Browsern gleich verhält.

Die virtuelle DOM- Implementierung benötigt auch eine anständige Menge an Code. Es wird viel Aufwand für die Leistungsoptimierung aufgewendet, weshalb die nicht minimierte Version ReactPerf enthält , ein Tool zum Messen der Renderleistung. Beim Aktualisieren des DOM erledigt React auch einige praktische Dinge für Sie, z. B. die Beibehaltung einer Eingabeauswahl und die Beibehaltung der aktuellen Bildlaufposition.

React hat noch ein paar andere Tricks im Ärmel. Eines der coolsten ist, dass es das Rendern einer Komponente in eine HTML-Zeichenfolge vollständig unterstützt, auch wenn Sie keine Browserumgebung haben, sodass Sie eine Seite senden können, die funktioniert, noch bevor JS geladen wird.


Womit vergleichen Sie React? react-15.0.2.min.jsist 43k (gzipped), aber jQuery ist 33k während es ember-2.6.0.prod.jsist 363k (also gzipped). Offensichtlich machen diese Frameworks nicht genau die gleichen Dinge, aber sie haben viele Überlappungen, daher halte ich den Vergleich für vernünftig.

Wenn Sie sich Sorgen über die Downloadgröße machen, würde ich mir keine Sorgen darüber machen, dass JS-Code dazu beiträgt. Hier ist eine Anzeige, die ich gerade auf der rechten Seite meiner Stapelüberlaufseite sehe:

Die Downloadgröße beträgt 95 KB - ich würde nicht zweimal darüber nachdenken, ein solches Bild in eine Seite aufzunehmen, da (selbst wenn ich mir Sorgen um die Leistung mache) normalerweise so viele andere leistungsbezogene Dinge zu beheben sind, die lukrativer sind.


Kurz gesagt, ich denke nicht, dass React so groß ist, und welche Größe es hat, hängt von den vielen kleinen Dingen ab, die es tut, um Ihnen zu helfen. Sie zitieren die kleine API von React als Grund dafür, dass der Code von React klein sein sollte, aber eine bessere Frage könnte sein: "Wie kann die API von React angesichts all der Dinge, die sie für Sie tut, so einfach sein?"

… Aber das ist eine ganz andere Frage. :) Hoffe, ich habe deine Frage beantwortet - freue mich zu erweitern, wenn ich es nicht getan habe.

Sophie Alpert
quelle
4
Du hast meine Frage total beantwortet. Reagieren ist großartig. Ich denke darüber nach, es für Handys zu verwenden, daher ist Größe wichtig. Es gibt nur nicht viele Informationen darüber, was es tut. Und ich denke, dass es mehr Tricks gibt, die ich anwenden kann :) Ich habe das Gefühl, dass ich jquery Zeug loswerden kann. Und Paulmillr / Exoskelett ist gerade noch rechtzeitig :)
Eldar Djafarov
2
Ich beschäftige mich mit einem völlig anderen Konzept der App-Erstellung. Überprüfen Sie vimeo.com/78151404 und github.com/component/component - verwenden Sie diejenigen, für die Sie jQuery überhaupt nicht benötigen, und compy spielt gut mit jsxtransformations. Und React macht den härtesten Job - alles andere (Modelle, Routings, Serverkommunikation) könnte von Mikrokomponenten abgedeckt werden.
Eldar Djafarov
29
Beachten Sie, dass wir React auf der mobilen Website von Facebook verwenden, wo die Größe definitiv extrem wichtig ist :)
Vjeux
4
@lightblade Ähm ... nein. Die Speichernutzung hängt davon ab, wie viele Zuordnungen Ihr Code vornimmt. React ist sehr bemüht, Zuweisungen zu vermeiden.
Dan Abramov
2
@ 1nfiniti Okay, aktualisiert mit einigen neuen Zahlen seit zweieinhalb Jahren.
Sophie Alpert
-2

Ein paar Gedanken ... Ich hatte einige der gleichen Bedenken hinsichtlich der Größe, aber nachdem ich es verwendet habe, kein Scherz, würde ich es verwenden, wenn es 5 MB groß wäre. Es ist einfach so gut. Trotzdem habe ich beschlossen, so viele Abhängigkeiten wie möglich von anderen Bibliotheken zu reduzieren. Ich habe jquery für zwei Dinge verwendet. Ajax und die automatische Ajax-Antwort- und Anforderungsbehandlung (beforeSend usw.), die behandelt wird, wenn sich ein Token nach der Anmeldung in einer Antwort befindet, und stellen Sie dann sicher, dass jede Ajax-Anforderung es zuvor zum Authorization-Header hinzugefügt hat Senden. Ich habe dies durch ein super kleines einfaches Stück natives Javascript ersetzt. Funktioniert super. Außerdem habe ich versucht, _underscore zu verwenden. Ich habe es durch lodash ersetzt, das kleiner und schneller ist, obwohl ich es derzeit nicht benutze, sodass es möglicherweise vollständig entfernt wird.

Hier ist ein Artikel von vielen auf Google, den ich gefunden habe und der einige Alternativen mit nativem JS über jquery bietet.

http://www.sitepoint.com/jquery-vs-raw-javascript-1-dom-forms/

user3317868
quelle
1
Sie können auch einfach eine benutzerdefinierte Version von jQuery mit den Teilen erstellen, die Sie verwenden, wenn Sie auf mehrere Browser abzielen
Dan Heberden