Perché la dimensione del file di React è così grande data la sua piccola API?


88

Ecco i numeri

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

E React non ha molte funzionalità nella sua documentazione. Perché è così grande?

Ho la sensazione che sia l'implementazione del DOM leggero. Ma voglio essere sicuro.


4
Hai dato un'occhiata alla fonte, per vedere cosa fa? Suggerimento utile, non guardare la versione ridotta.
Mr Lister

6
Ho deciso di chiedere prima di immergermi in codice. Anche se ho intenzione di usare
React, mi tufferei

2
26k non è affatto così grande ..
BT

La gente dice che reagire non è grande. Sì, reactjs stesso è molto piccolo (6,41 KB per la versione 16.1.1) ma ricorda che React richiede un ReactDOM per funzionare e ReactDOM ha una dimensione di 92,4 KB
Dinh Tran

Risposte:


187

React fa un bel po '! La parte più grande e non ovvia di React è probabilmente il sistema degli eventi: non solo React implementa il proprio invio e il bubbling degli eventi, ma normalizza gli eventi comuni nei browser in modo che tu non debba preoccuparti troppo di esso. Ad esempio, SelectEventPlugin è un "plugin" di eventi integrato che fornisce un onSelectevento che si comporta allo stesso modo in tutti i browser.

L' implementazione del DOM virtuale richiede anche una discreta quantità di codice; molto impegno viene speso per l'ottimizzazione delle prestazioni, motivo per cui la versione non ridotta include ReactPerf , che è uno strumento per misurare le prestazioni di rendering. Nell'aggiornamento del DOM, React fa anche alcune cose utili per te come mantenere qualsiasi selezione di input e mantenere la stessa posizione di scorrimento corrente.

React ha anche qualche altro asso nella manica. Uno dei più interessanti è che supporta completamente il rendering di un componente in una stringa HTML anche se non si dispone di un ambiente browser, quindi è possibile inviare una pagina che funziona anche prima che JS venga caricato.


Con cosa stai confrontando React? react-15.0.2.min.jsè 43k (gzipped), ma jQuery è 33k mentre lo ember-2.6.0.prod.jsè 363k (also gzipped). Ovviamente questi framework non fanno esattamente le stesse cose ma hanno molte sovrapposizioni, quindi penso che il confronto sia ragionevole.

Se sei preoccupato per la dimensione del download, non mi preoccuperei troppo del contributo del codice JS. Ecco un annuncio che vedo sul lato destro della mia pagina Stack Overflow in questo momento:

La dimensione del download è di 95k: non ci penserei due volte a includere un'immagine del genere in una pagina perché (anche se ero preoccupato per le prestazioni) di solito ci sono così tante altre cose relative alle prestazioni da correggere che sono più redditizie.


In breve, non penso che React sia così grande, e le dimensioni che ha derivano dalle tante piccole cose che fa per aiutarti. Citi la piccola API di React come motivo per cui il codice di React dovrebbe essere piccolo, ma una domanda migliore potrebbe essere: "Come può l'API di React essere così semplice, date tutte le cose che fa per te?"

... ma questa è una domanda completamente separata. :) Spero di aver risposto alla tua domanda - felice di espandere se non l'ho fatto.


4
Hai risposto totalmente alla mia domanda. React è fantastico. Sto pensando di usarlo per i dispositivi mobili, quindi le dimensioni sono importanti. È solo che non ci sono molte informazioni su ciò che fa. E sto pensando che ci sono più trucchi che posso usare :) Sento che posso sbarazzarmi di cose jquery. E paulmillr / esoscheletro è giusto in tempo :)
Eldar Djafarov

2
Sto scavando in un concetto completamente diverso di creazione di app. Controlla vimeo.com/78151404 e github.com/component/component - usando quelli che non ti servono per niente jQuery e compy funziona bene con jsxtransformations. E React fa il lavoro più difficile: tutto il resto (modelli, instradamenti, comunicazioni del server) potrebbe essere coperto da microcomponenti.
Eldar Djafarov

30
Nota, stiamo usando React sul sito web mobile di Facebook dove la dimensione è decisamente estremamente importante :)
Vjeux

4
@lightblade Um ... no. L'utilizzo della memoria dipende dal numero di allocazioni eseguite dal codice. React si sforza molto di evitare le allocazioni.
Dan Abramov

2
@ 1nfiniti Va bene, aggiornato con alcuni nuovi numeri da quando sono passati due anni e mezzo.
Sophie Alpert

-1

Un paio di pensieri .. Ho avuto alcune delle stesse preoccupazioni con le sue dimensioni, ma dopo averlo usato, non è uno scherzo, lo userei se fosse di 5 MB. È proprio così buono. Detto questo, ho deciso di ridurre il maggior numero possibile di dipendenze da altre librerie. Stavo usando jquery per due cose ... ajax e la risposta automatica ajax e la gestione delle richieste (beforeSend, ecc.) Che gestiva quando un token era in una risposta dopo il login, quindi assicurati che ogni richiesta ajax lo aggiungesse prima all'intestazione di autorizzazione invio. L'ho sostituito con un piccolissimo e semplice bit di javascript nativo. Funziona alla grande. Inoltre, stavo cercando di utilizzare _underscore. L'ho sostituito con lodash, che è più piccolo e più veloce, anche se attualmente non lo sto usando, quindi potrei rimuoverlo del tutto.

Ecco un articolo, tra i tanti su Google, che ho scoperto che ha alcune alternative utilizzando JS nativo su jquery.

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


1
Potresti anche creare una versione personalizzata di jQuery con i pezzi che usi se stai prendendo di mira più browser
Dan Heberden
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.