Почему размер файла React такой большой, учитывая его небольшой API?

88

Вот цифры

  • мин + gzip 26k
  • gzip 90 КБ
  • оригинал 450 + k

И у React не так много функций в документации. Почему он такой большой?

У меня такое ощущение, что это реализация облегченного DOM. Но я хочу быть уверенным.

Эльдар Джафаров
источник
4
Вы смотрели на источник, чтобы узнать, что он делает? Полезный совет, не смотрите на уменьшенную версию.
Мистер Листер
6
Я решил спросить, прежде чем погрузиться в код. Хотя, поскольку я планирую использовать React, я бы все равно туда нырнул;)
Эльдар Джафаров
2
26k - это совсем не так уж и много ...
BT
Люди говорят, что реакция невелика. Да, Reactjs сам по себе очень мал (6,41 КБ для версии 16.1.1), но помните, что React требует для работы ReactDOM, а размер ReactDOM 92,4 КБ,
Динь ​​Тран

Ответы:

187

React действительно немало! Самая большая неочевидная часть React, вероятно, - это система событий - React не только реализует свою собственную диспетчеризацию и всплытие событий, но и нормализует общие события в браузерах, так что вам не нужно так сильно об этом беспокоиться. Например, SelectEventPlugin - это встроенный «плагин» onSelectсобытий, который предоставляет событие, которое ведет себя одинаково во всех браузерах.

Реализация виртуальной DOM также требует приличного количества кода; много усилий тратится на оптимизацию производительности, поэтому неминифицированная версия включает ReactPerf , который является инструментом для измерения производительности рендеринга. При обновлении DOM React также делает для вас некоторые удобные вещи, такие как сохранение любого выбора ввода и сохранение текущей позиции прокрутки неизменной.

У React есть еще несколько уловок в рукаве. Одним из самых крутых является то, что он полностью поддерживает рендеринг компонента в строку HTML, даже если у вас нет среды браузера, поэтому вы можете отправить страницу, которая работает даже до загрузки JS.


С чем вы сравниваете React? react-15.0.2.min.jsесть 43k (gzipped), но jQuery - 33k, а ember-2.6.0.prod.jsесть 363k (also gzipped). Очевидно, что эти фреймворки не делают одно и то же, но у них много общего, поэтому я считаю, что сравнение разумно.

Если вас беспокоит размер загрузки, я бы не стал слишком беспокоиться о том, что код JS способствует этому. Вот объявление, которое я вижу в правой части страницы Stack Overflow прямо сейчас:

Его размер загрузки составляет 95 КБ - я бы не стал дважды думать о включении такого изображения на страницу, потому что (даже если бы я беспокоился о производительности) обычно есть много других более прибыльных вещей, связанных с производительностью, которые нужно исправить.


Короче говоря, я не думаю, что React такой большой, и его размер зависит от множества мелких вещей, которые он делает, чтобы помочь вам. Вы цитируете небольшой API React как причину, по которой код React должен быть маленьким, но лучше задать вопрос: «Как API React может быть таким простым, учитывая все то, что он делает для вас?»

… Но это совершенно отдельный вопрос. :) Надеюсь, я ответил на ваш вопрос - буду рад расширяться, если я этого не сделаю.

Софи Альперт
источник
4
Вы полностью ответили на мой вопрос. React потрясающий. Я подумываю использовать его для мобильных устройств, поэтому размер важен. Просто информации о том, что он делает, не так много. И я думаю, что есть еще трюки, которые я могу использовать :) Я чувствую, что могу избавиться от вещей jquery. И paulmillr / exoskeleton как раз вовремя :)
Эльдар Джафаров
2
Я копаюсь в совершенно другой концепции создания приложений. Проверьте vimeo.com/78151404 и github.com/component/component - используя те, которые вам совсем не нужны, jQuery и compy отлично работают с jsxtransformations. А React делает самую тяжелую работу - все остальное (модели, маршрутизация, связь с сервером) может быть покрыто микрокомпонентами.
Эльдар Джафаров
30
Обратите внимание, мы используем React на мобильном веб-сайте Facebook, где размер чрезвычайно важен :)
Vjeux
4
@lightblade Эм ... нет. Использование памяти зависит от того, сколько распределений делает ваш код. React очень старается избегать выделения памяти.
Дэн Абрамов
2
@ 1nfiniti Хорошо, обновил некоторые новые цифры, так как прошло два с половиной года.
Sophie Alpert
-1

Пара мыслей ... У меня были те же проблемы с его размером, но после его использования, без шуток, я бы использовал его, если бы он был размером 5 МБ. Это просто так хорошо. Тем не менее, я решил уменьшить как можно больше зависимостей от других библиотек. Я использовал jquery для двух вещей ... ajax и автоматического ответа ajax и обработки запросов (beforeSend и т.д.), которые будут обрабатывать, когда токен был в ответе после входа в систему, а затем убедитесь, что каждый запрос ajax добавляет его в заголовок авторизации перед отправка. Я заменил это супер маленьким простым фрагментом нативного javascript. Работает отлично. Кроме того, я пытался использовать _underscore. Я заменил его на lodash, который меньше и быстрее, хотя в настоящее время я его не использую, поэтому могу удалить его совсем.

Вот одна из многих статей в Google, в которых я нашел несколько альтернатив, использующих собственный JS вместо jquery.

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

пользователь3317868
источник
1
Вы также можете просто создать собственную версию jQuery с частями, которые вы используете, если вы ориентируетесь на несколько браузеров,
Дэн Хеберден