APIが小さいのに、Reactのファイルサイズが非常に大きいのはなぜですか?


88

これが数字です

  • min + gzip 26k
  • gzip 90k
  • オリジナルの450+ k

そして、Reactのドキュメントには多くの機能がありません。なんでこんなに大きいの?

軽量DOMの実装だと感じています。しかし、私は確信したいです。


4
ソースを見て、それが何をするのかを確認しましたか?役立つヒント、縮小版を見ないでください。
リスター氏2013年

6
コードに飛び込む前に聞いてみることにしました。私はreactを使用する予定なので、とにかくそこにダイビングします;)
Eldar Djafarov 2013年

2
26Kは、すべての..ではそれほど大きくはない
BT

人々は反応は大きくないと言っています。はい、reactjs自体は非常に小さいです(バージョン16.1.1の場合は6.41KB)が、Reactが機能するにはReactDOMが必要であり、ReactDOMのサイズは92.4KBであることに注意してください
Dinh Tran

回答:


187

Reactはかなりのことをします!Reactの最大の非自明な部分は、おそらくイベントシステムです。Reactは独自のイベントディスパッチとバブリングを実装するだけでなく、ブラウザー間で共通のイベントを正規化するため、それほど心配する必要はありません。たとえば、SelectEventPluginは、組み込みのイベント「プラグイン」であり、onSelectすべてのブラウザで同じように動作イベントをです。

仮想DOMの実装では、同様のコードのまともな金額がかかります。パフォーマンスの最適化に多くの労力が費やされているため、縮小されていないバージョンにはReactPerfが含まれています、レンダリングパフォーマンスを測定するためのツールであるます。DOMを更新する際に、Reactは、入力の選択を維持したり、現在のスクロール位置を同じに維持したりするなど、便利なこともいくつか行います。

Reactには、他にもいくつかのトリックがあります。最もクールな点の1つは、ブラウザ環境がなくてもコンポーネントをHTML文字列にレンダリングすることを完全にサポートしているため、JSが読み込まれる前でも機能するページを送信できることです。


Reactを何と比較していますか?react-15.0.2.min.jsはですが43k (gzipped)、jQueryは33kですが、ember-2.6.0.prod.js363k (also gzipped)です。明らかに、これらのフレームワークはまったく同じことをしませんが、多くの重複があるので、比較は合理的だと思います。

ダウンロードサイズが心配な場合は、JSコードがそれに寄与することについてはあまり心配しません。これが私のStackOverflowページの右側に表示されている広告です。

ダウンロードサイズは95kです。そのような画像をページに含めることについては、(パフォーマンスが心配だったとしても)通常、パフォーマンスに関連する修正すべき点が他にもたくさんあるので、2度考えません。


要するに、Reactはそれほど大きいとは思いません。そして、Reactのサイズは、あなたを助けるために行う多くの小さなことから来ています。Reactのコードを小さくする必要がある理由としてReactの小さいAPIを挙げていますが、もっと良い質問は、「ReactのAPIは、すべての機能を考慮して、どうしてこんなにシンプルにできるのでしょうか」ということかもしれません。

…しかし、それはまったく別の質問です。:)私があなたの質問に答えたことを願っています-私が答えなかったなら、拡大して幸せです。


4
あなたは私の質問に完全に答えました。Reactは素晴らしいです。モバイルでの使用を考えているのでサイズが重要です。それが何をするかについての情報があまりないというだけです。そして、私は私が使用できるより多くのトリックがあると思っています:)私はjqueryのものを取り除くことができると感じています。そして、paulmillr / exoskeletonはジャストインタイムです:)
Eldar Djafarov 2013年

2
私はアプリ構築のまったく異なる概念を掘り下げています。vimeo.com/78151404github.com/component/componentを確認してください-jQueryまったく必要としないものを使用すると、compyはjsxtransformationsでうまく機能します。そして、Reactは最も難しい仕事をします-他のすべて(モデル、ルーティング、サーバー通信)はマイクロコンポーネントでカバーされる可能性があります。
Eldar Djafarov 2013年

30
サイズが非常に重要なFacebookのモバイルWebサイトでReactを使用していることに注意してください:)
Vjeux 2013年

4
@lightbladeうーん...いや。メモリ使用量は、コードが行う割り当ての数によって異なります。Reactは割り当てを回避するために非常に懸命に努力します。
ダンアブラモフ2015年

2
@ 1nfinitiわかりました、2年半が経過したので、いくつかの新しい番号で更新されました。
ソフィーアルパート2016年

-1

いくつか考えてみました。サイズについても同じ懸念がありましたが、使用した後は冗談ではなく、5MBのサイズであれば使用しました。それはそれだけで良いです。そうは言っても、私は他のライブラリへの依存関係をできるだけ減らすことにしました。私は2つの目的でjqueryを使用していました..ajaxと、ログイン後の応答にトークンが含まれている場合に処理する自動ajax応答と要求処理(beforeSendなど)。送信。これを、非常に小さな単純なネイティブJavaScriptに置き換えました。よく働く。また、私は_underscoreを使おうとしていました。現在は使用していないので、完全に削除する可能性がありますが、より小さくて高速なlodashに置き換えました。

これはグーグルの多くの記事の1つで、jqueryではなくネイティブJSを使用するいくつかの選択肢があることがわかりました。

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


1
複数のブラウザをターゲットにしている場合は、使用する部分を使用してjQueryのカスタムバージョンを構築することもできます。
Dan Heberden 2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.