Чому розмір файлу React такий великий з огляду на його невеликий API?


88

Ось цифри

  • хв + gzip 26k
  • gzip 90k
  • оригінал 450 + k

І React не має багато можливостей у своїй документації. Чому він такий великий?

У мене відчуття, що це реалізація полегшеного DOM. Але я хочу бути впевненим.


4
Ви заглянули в джерело, щоб побачити, що воно робить? Корисна порада, не дивіться на зменшену версію.
Містер Лістер,

6
Я вирішив запитати, перш ніж пірнати в коді. Хоча, оскільки я планую скористатися реакцією, я все одно занурююся туди;)
Ельдар Джафаров,

2
26k не так вже й великий взагалі ..
BT

Люди кажуть, що реакція не велика. Так, сама реакція дуже мала (6,41 КБ для версії 16.1.1), але пам’ятайте, що React вимагає ReactDOM для роботи, а ReactDOM має розмір 92,4 КБ
Dinh Tran

Відповіді:


187

React робить зовсім небагато! Найбільша неочевидна частина React - це, мабуть, система подій - React не тільки реалізує власну диспетчеризацію та бульбашку подій, вона нормалізує загальні події в браузерах, так що вам не потрібно так сильно турбуватися про це. Наприклад, SelectEventPlugin - це вбудований "плагін" onSelectподії, який забезпечує подію, яка поводиться однаково у всіх браузерах.

Віртуальна DOM реалізація дійсно займає пристойну кількість коду , а також; на оптимізацію продуктивності витрачається багато зусиль, саме тому немініфікована версія включає ReactPerf , який є інструментом для вимірювання продуктивності візуалізації. Оновлюючи DOM, React також робить для вас кілька зручних речей, як-от підтримка будь-якого вибору вхідних даних та збереження поточної позиції прокрутки незмінною.

У React також є кілька інших хитрощів. Одне з найкрутіших - це те, що він повністю підтримує візуалізацію компонента в рядку HTML, навіть якщо у вас немає середовища браузера, тому ви можете надіслати сторінку, яка працює ще до завантаження JS.


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

Якщо вас турбує розмір завантаження, я б не надто хвилювався, чи сприяє цьому код JS. Ось оголошення, яке я зараз бачу в правій частині сторінки переповнення стека:

Його розмір завантаження становить 95 тис. - Я б не думав двічі про те, щоб включити подібне зображення на сторінку, тому що (навіть якби я турбувався про продуктивність), як правило, існує так багато інших речей, пов’язаних з продуктивністю, які є більш вигідними.


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

... але це абсолютно окреме питання. :) Сподіваюся, я відповів на ваше запитання - із задоволенням розширю, якщо цього не зробив.


4
Ви повністю відповіли на моє запитання. Реагуйте чудово. Я думаю використовувати його для мобільних пристроїв, тому розмір дуже важливий. Просто навколо того, чим він займається, не так багато інформації. І я думаю, що є ще кілька прийомів, якими я можу скористатися :) Я відчуваю, що можу позбутися jquery-матеріалів. І paulmillr / exoskeleton встигає :)
Ельдар Джафаров,

2
Я копаюся в абсолютно іншій концепції створення додатків. Перевірте vimeo.com/78151404 та github.com/component/component - використовуючи ті, які вам взагалі не потрібні jQuery, а compy добре грає з jsxtransformations. І React робить найскладнішу роботу - все інше (моделі, маршрутизація, серверний зв’язок) може покриватися мікрокомпонентами.
Ельдар Джафаров

30
Зверніть увагу, ми використовуємо React на мобільному веб-сайті Facebook, де розмір є надзвичайно важливим :)
Vjeux

4
@lightblade Гм ... ні. Використання пам'яті залежить від того, скільки розподілів робить ваш код. React дуже намагається уникнути розподілу.
Дан Абрамов

2
@ 1nfiniti Гаразд, оновлений новими номерами, оскільки минуло два з половиною роки.
Софі Алперт

-1

Кілька думок .. У мене були однакові проблеми з його розміром, але після його використання, не жарт, я б використовував його, якби розмір був 5 Мб. Це просто так добре. Тим не менш, я вирішив зменшити якомога більше залежностей від інших бібліотек. Я використовував jquery для двох речей .. ajax та автоматичної відповіді та обробки запитів ajax (beforeSend тощо), які обробляли б, коли маркер був у відповіді після входу, а потім переконувався, що кожен запит ajax додавав його до заголовка авторизації до відправлення. Я замінив це супер маленьким простим шматочком рідного javascript. Чудово працює. Крім того, я намагався використовувати _underscore. Я замінив його на lodash, який менший і швидший, хоча зараз я його не використовую, тому може взагалі його видалити.

Ось одна із багатьох статей у Google, яку я виявив, що існує кілька альтернатив використання рідного JS над jquery.

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


1
Ви також можете просто створити власну версію jQuery з частинами, які ви використовуєте, якщо ви націлюєтеся на кілька браузерів
Ден Хеберден,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.