- PVSM.RU - https://www.pvsm.ru -

Angular vs. React vs. Vue: Сравнение 2017

Выбор JavaScript-фреймворка для вашего веб-приложения может быть невыносим. В настоящее время очень популярны Angular [1] и React [2], и есть также выскочка, получающий много внимания в последнее время: VueJS [3]. Кроме них, лишь эти несколько новичков [4].

Angular vs. React vs. Vue: Сравнение 2017 - 1

Итак, как же нам выбрать? Список плюсов и минусов никогда не повредит. Проделаем это в стиле моей предыдущей статьи, “9 шагов: выбор технологического стэка для вашего веб-приложения [5]”.

Прежде чем начнем — SPA или нет?

Сперва вы должны принять четкое решение, нужно ли вам одностраничное веб-приложение(SPA), или вы предпочли бы многостраничный подход. Больше на эту тему в моем посте “Одностраничные веб-приложения(SPA) против Многостраничных веб-приложений(MPA) [6]”(скоро выйдет, следите за обновлениями в Twitter [7]).

Участники сегодняшнего состязания: Angular, React and Vue

Сначала я хотел бы обсудить жизненный цикл и стратегические соображения. Затем мы перейдем к возможностям и идеям всех трех JavaScript-фреймворков. Наконец, мы придем к выводам.

Вопросы, которые мы сегодня рассмотрим:

  • Насколько зрелые эти фреймворки/библиотеки?
  • Будут ли эти фреймворки существовать еще какое-то время?
  • Насколько велики и полезны сообщества вокруг них?
  • Насколько легко найти разработчиков под каждый из этих фреймворков?
  • Каковы основные идеи этих фреймворков?
  • Насколько просто использовать эти фреймворки для небольших и крупных веб-приложений?
  • Какова кривая обучения для каждого из фреймворков?
  • Какую производительность вы ожидаете от этих фреймворков?
  • Где вы можете подробнее узнать, что у них под капотом?
  • Как начать разрабатывать с выбранным фреймворком?

На старт, внимание, марш!

Жизненный цикл и стратегические соображения

Angular vs. React vs. Vue: Сравнение 2017 - 2
React vs. Angular vs. Vue

1.1 Немного истории

Angular — это JavaScript-фреймворк, основанный на TypeScript. Разработанный и поддерживаемый Google, он описывается как “Супергеройский JavaScript MVW [8] фреймворк”. Angular(известный также как “Angular 2+”, “Angular 2” или “ng2”) — переписанный, по большей части несовместимый преемник AngularJS(известный как “Angular.js” или “AngularJS 1.x”). Хотя AngularJS(старый) был впервые выпущен в октябре 2010-го, он до сих пор получает багфиксы [9] и т.д. Новый Angular(без JS) был представлен как версия №2 в сентябре 2016. Последний мажорный релиз — версия 4, так как версию 3 пропустили [10]. Angular используется Google, Wix, weather.com, healthcare.gov и Forbes(в соответствии с madewithangular [11], stackshare [12] и libscore.com [13]).

React характеризуется как “JavaScript-библиотека для создания пользовательских интерфейсов”. Впервые выпущенный в марте 2013-го, React разработан и поддерживается Facebook-ом, который использует React-компоненты на нескольких страницах(однако, не являясь одностраничным веб-приложением). В соответствии с этой статьей [14] Криса Кордла, React в Facebook применяется значительно шире, чем Angular в Google. React также используют в Airbnb, Uber, Netflix, Twitter, Pinterest, Reddit, Udemy, Wix, Paypal, Imgur, Feedly, Stripe, Tumblr, Walmart и других(в соотв. с Facebook [15], stackshare [16] и libscore.com [17]).

В данный момент Facebook работает над выпуском React Fiber. Это изменит React под капотом — в результате, рендеринг должен значительно ускориться — но обратная совместимость сохранится после изменений. В Facebook рассказывали [18] об этих изменениях на их конференции для разработчиков в апреле 2017-го, также была опубликована неофициальная статья о новой архитектуре [19]. Предположительно, React Fiber будет выпущен вместе с React 16.

Vue — один из самых быстроразвивающихся JS-фреймворков в 2016-м. Vue описывает себя как “Интуитивный, Быстрый и Интегрируемый MVVM [20] для создания интерактивных интерфейсов”. Впервые он был выпущен в феврале 2014-го бывшим сотрудником Google Эваном Ю [21](кстати, Эван тогда написал интересный пост про маркетинговую деятельность и цифры в первую неделю после старта [22]). Это был неплохой успех, особенно учитывая, что Vue привлекает столько внимания, будучи театром одного актера, без поддержки крупной компании. На данный момент, у Эвана есть команда из дюжины основных разработчиков. В 2016 была выпущена вторая версия. Vue используют Alibaba, Baidu, Expedia, Nintendo, GitLab. Список более мелких проектов можно найти на madewithvuejs.com [23].

И Angular, и Vue доступны под лицензией MIT, в то время как React — под BSD3-license. Есть много обсуждений по поводу патентного файла [24]. Джеймс Аид(бывший инженер Facebook) объясняет причины и историю, лежащую за этим файлом: Патент Facebook касается распространения их кода при сохранении возможности защитить себя от патентных исков. Файл патента обновлялся единожды и некоторые люди утверждают, что React можно использовать, если ваша компания не собирается подавать в суд на Facebook. Можете ознакомиться с обсуждением вокруг этого Github issue [25]. Я не являюсь адвокатом, поэтому вы сами должны решить, создает ли лицензия React проблемы для вас или вашей компании. Есть еще много статей на эту тему: Дэннис Уолш пишет, почему вам не стоит бояться [26]. Рауль Крипалани предостерегает от использования в стартапах [27], у него также есть обзор [28] в формате “изложение мыслей”. Также существует недавнее оригинальное заявление от Facebook на эту тему: “Разъяснение лицензии React [29]”.

1.2 Core development

Как было отмечено ранее, Angular и React поддерживаются и используются крупными компаниями. Facebook, Instagram и Whatsapp используют их на своих страницах. Google использует их во многих своих проектах: например, новый пользовательский интерфейс Adwords был реализован с помощью Angular и Dart [30]. Опять же, Vue разрабатывается группой лиц, чья работа поддерживается через Patreon и другие средства спонсирования. Решайте сами, хорошо это или плохо. Маттиас Гёцке считает, что небольшая команда Vue — это плюс, потому что это ведет к более чистому коду / API, и меньшему оверинженерингу [31].

Посмотрим на статистику: на странице команды Angular перечислено 36 человек, у Vue — 16 человек, у React страницы команды нет. На GitHub-е у Angular больше 25 000 звезд и 463 контрибьютора, у React — больше 70 000 звезд и 1000 контрибьюторов, и у Vue почти 60 000 звезд и лишь 120 контрибьюторов. Можете также проверить страничку “Github Stars History for Angular, React and Vue [32]”. Опять же, Vue, похоже, очень хорошо развивается. В соответствии с bestof.js, за последние три месяца Angular 2 получал в среднем 31 звезду в день, React — 74 звезды, Vue — 107 звезд.

Angular vs. React vs. Vue: Сравнение 2017 - 3
A Github Stars History для Angular, React и Vue (Источник [32])

Апдейт: Спасибо Полу Хеншелю за то, что указал на npm trends. Они показывают количество скачиваний для данных npm-пакетов и даже полезнее, как чистый взгляд на звезды GitHub.

Angular vs. React vs. Vue: Сравнение 2017 - 4
Количество скачиваний для заданных npm-пакетов в течение двух лет

1.3 Жизненный цикл на рынке

Angular, React и Vue сложно сравнить в Google Trends из-за их разнообразных имен и версий. Одним из способов получить приблизительные значения может быть поиск в категории “Internet & technologies”. Вот результат:

Angular vs. React vs. Vue: Сравнение 2017 - 5

Ну, что ж. Vue до 2014 года не существовало — значит, тут что-то не так. La Vue по-французски — “вид”, “взгляд”, или “мнение”. Может быть, дело в этом. Сравнение “VueJS” с “Angular” или “React” несправедливо, так как у VueJS почти нет результатов, которые можно сравнить с остальными.

В таком случае, попробуем кое-что другое. Technology Radar [33] от ThoughtWorks дает хорошее представление о том, как технологии эволюционируют в течение времени. Redux находится на стадии принятия [34](принятия в проектах!) и он был бесценен на ряде проектов ThoughtWorks. Vue.js на стадии испытаний [35](испытайте!). Его описывают, как легковесную и гибкую альтернативу Angular с более низкой кривой обучения. Angular 2 находится на стадии оценки [36] — он успешно используется командами ThoughtWorks, но пока не имеет настоятельных рекомендаций.

В соответствии с последним опросом StackOverflow 2017 [37], React любят 67% опрошенных разработчиков, а AngularJS — 52%. “Отсутствие интересу к продолжению разработки” регистрирует большие значения для AngularJS(48%) в сравнении с React(33%). Vue не входит в первую десятку ни в одном из случаев. Далее, есть опрос statejs.com, сравнивающий “front-end фреймворки [38]”. Самые интересные факты: React и Angular обладают 100%-й известностью, Vue незнаком 23%-м опрошенных людей. Касательно “удовлетворенности”, React набрал 92% для варианта “использовал бы снова”, Vue — 89%, Angular 2 — только 65%.

Как насчет другого опроса об удовлетворенности пользователей? Эрик Элиотт запустил один в октябре 2016-го, чтобы оценить Angular 2 и React. Лишь 38% опрошенных людей использовали бы Angular 2 снова, в то время как 84% использовали бы снова React.

1.4 Долгосрочная поддержка и миграции

API React-а достаточно стабилен, как заявляет об этом Facebook в своих принципах проектирования [39]. Существуют также скрипты, помогающие мигрировать с вашего текущего API на новый: попробуйте react-codemod [40]. Миграции достаточно просты и здесь нет такой вещи(и необходимости в ней), как LTS версии. В этом посте на Reddit люди отмечают, что апгрейд на самом деле никогда не был проблемой [41]. Команда React написала пост об их схеме версионирования [42]. Когда они добавляют предупреждение об устаревании, они оставляют его для остальной части текущей релизной версии до того момента, пока поведение не будет изменено в следующей мажорной версии. Планов выпустить новую мажорную версию нет — v14 выпущена в октябре 2015-го, v15 опубликована в апреле 2016-го, а у v16 пока нет даты релиза. Обновление не должно стать проблемой, как недавно заметил один из основных разработчиков React [43].

Что касается Angular, есть пост о версионировании и релизах [44] Angular начиная с релиза v2. Будет одно мажорное обновление каждые шесть месяцев и период устаревания(deprecation period), как минимум шесть месяцев(два мажорных релиза). Существуют экспериментальные API, помеченные в документации более коротким периодом устаревания. Официального анонса нет, но в соответствии с этой статьей [45], команда Angular анонсировала LTS версии начиная с Angular 4. Они будут поддерживаться как минимум год после следующего мажорного релиза. Это значит, что Angular 4 будет поддерживаться багфиксами и важными патчами как минимум до сентября 2018-го. В большинстве случаев, обновление со второй до четвертой версии Angular также просто, как обновление зависимостей Angular. Angular также предоставляет руководство [46] с информацией о том, какие понадобятся изменения в дальнейшем.

Процесс обновления с Vue 1.x до 2.0 должен быть простым для небольшого приложения — команда разработчиков утверждает, что 90% API [47] осталось без изменений. Имеется приятный инструмент [48] для диагностики обновления и помощи во время миграции, работающий из консоли. Один из разработчиков отметил [49], что обновление с v1 до v2 до сих пор не приносит особого удовольствия на больших приложениях. К сожалению, roadmap-а для следующего мажорного релиза или информации о планах создания LTS версий нет.

Еще кое-что: Angular — это цельный фреймворк, предлагающий кучу вещей в комплекте. React гибче, чем Angular, и вы, вероятно, столкнетесь с использованием более независимых, неустаканенных, быстроразвивающихся библиотек — это означает, что вам придется самостоятельно заботиться о соответствующих обновлениях и миграциях. Это может нанести вред, если определенные пакеты больше не поддерживаются или если какой-то другой пакет в определенный момент становится стандартом де-факто.

1.5 Кадровые ресурсы и найм

Если у вас есть HTML-разработчики, которые не хотят углубляться в JavaScript, вам лучше выбрать Angular или Vue. React повлечет за собой увеличение количества JavaScript-а(позже мы поговорим об этом).

У вас есть дизайнеры, работающие в непосредственной близости с кодом? Пользователь “pier25” отмечает в своем Reddit-посте, что выбирать React имеет смысл, если вы работаете в Facebook, где каждый разработчик — супергерой [50]. В реальном мире, вы не всегда найдете дизайнера, способного модифицировать JSX — по существу, работать с HTML-шаблонами будет намного проще.

Хорошая новость относительно Angular это то, что новый Angular 2-разработчик из другой компании сможет быстро ознакомиться со всеми необходимыми соглашениями. Каждый проект на React отличается в плане архитектурных решений и разработчикам нужно будет знакомиться с настройками конкретного проекта.

Angular также хорош, если у вас есть разработчики с ООП-бэкграундом или те, кто не любят JavaScript. Чтобы заострить на этом внимание, цитата Манеша Чанда:

“Я не JavaScript-девелопер. Мой бэкграунд — создание крупномасштабных корпоративных систем с использованием “настоящих” платформ для разработки ПО. Я начинал в 1997-м, разрабатывая приложения на C, C++, Pascal, Ada и Fortran. (...) Я могу точно сказать, что JavaScript для меня просто белиберда. Будучи MVP в Microsoft и экспертом, я хорошо понимаю TypeScript. Я также не рассматриваю Facebook, как компанию-разработчика ПО. Однако, Google и Microsoft уже крупнейшие инноваторы в этой сфере. Я чувствую себя более комфортно, работая с продуктом, у которого есть хорошая поддержка от Google или Microsoft. Также (...) с моим бэкграундом, я знаю, что у Microsoft даже большие планы для TypeScript”

Ну… Видимо, я должен упомянуть, что Манеш Чанд является региональным директором в Microsoft.

Сравнение React, Angular и Vue

2.1 Компоненты

Все обсуждаемые фреймворки основаны на компонентах. Компонент получает что-то на вход и после внутренних вычислений возвращает отрендеренный шаблон UI(область входа / выхода с сайта или элемент списка to-do) на выходе. Определенные компоненты должно быть легко переиспользовать на веб-странице или в других компонентах. Например, у вас мог бы быть компонент сетки(состоящий из шапки и нескольких компонентов для рядов) с разнообразными свойствами(колонки, информация о шапке, data rows, и т.д.) и возможностью переиспользования этого компонента с разными данными на другой странице. Вот всеобъемлющая статья [51] о компонентах на тот случай, если вам захочется изучить их получше.

И React, и Vue превосходно подходят для работы с “тупыми” компонентами: небольшие функции, не имеющие состояния, которые получают что-то на вход и возвращают элементы на выходе.

2.2 TypeScript vs ES6 vs. ES5

React фокусируется на использовании JavaScript ES6. Vue использует JavaScript ES5 либо ES6.

Angular зависит от TypeScript. Это дает большую консистентность в примерах и в опенсорсных проектах(примеры React можно найти в ES5 или в ES6). Это также вводит такие понятия, как декораторы или статическая типизация. Статическая типизация полезна для инструментов для анализа кода, типа автоматического рефакторинга, перехода к определению и т.д. — они должны уменьшить количество багов в приложении, хотя консенсус по поводу их использования, определенно, не достигнут. Эрик Элиот не согласен с этим в своей статье “Шокирующий секрет статических типов [52]”. Дэниэл С Вонг говорит, что использование статических типов не вредит [53] и что хорошо иметь разработку через тестирование(TDD) и статическую типизацию одновременно.

Вам, вероятно, следует знать о том, что вы можете использовать Flow, чтобы включить проверку типов в React [54]. Это инструмент для статической проверки типов, разработанный Facebook для JavaScript. Flow также можно интегрировать в VueJS [55].

Если вы пишете код на TypeScript, вы уже не пишете стандартный JavaScript. Несмотря на рост, у TypeScript до сих пор крошечное число пользователей, по сравнению со всем языком JavaScript. Один из рисков может заключаться в том, что вы будете двигаться в неверном направлении, поскольку TypeScript может — хотя и вряд ли — исчезнуть со временем. Помимо того, TypeScript создает приличный оверхед на проектах(на обучение) — можете больше почитать об этом в Сравнении Angular 2 и React [56] от Эрика Элиотта.

Апдейт: Джеймс Рейвенскрофт написал к этой статье комментарий о том, что у TypeScript первоклассная поддержка JSX — компоненты можно легко проверить на соответствие типу. Так что, если вам нравится TypeScript и вы хотите использовать React, это не должно быть проблемой.

2.3 Шаблоны — JSX или HTML

React нарушает устоявшиеся best practices. Десятилетиями разработчики пытались разделить шаблоны и встроенную джаваскриптовую логику, но в JSX они опять перемешаны. Может быть, это звучит ужасно, но вам следует послушать речь Питера Ханта “React: Переосмысление best practices [57]”(от октября 2013-го). Он указывает на то, что разделение шаблонов и логики — это просто разделение технологий, а не ответственности. Вы должны создавать компоненты вместо шаблонов. Компоненты переиспользуемы, интегрируемы и удобны для unit-тестирования.

JSX — это опциональный препроцессор с HTML-подобным синтаксисом, который затем компилируется в JavaScript. Отсюда некоторые странности — например, вам нужно использовать className вместо class, потому что последний является в JavaScript зарезервированным ключевым словом. JSX — большое преимущество для разработки, так как у вас все будет в одном и том же месте, а также быстрее будут работать автокомплит и проверки на стадии компиляции. Когда вы допускаете ошибку в JSX, React не компилирует код и выводит номер строки, в которой допущена ошибка. Angular 2 тихо падает в рантайме(возможно, этот аргумент некорректен, если вы пользуетесь AOT с Angular).

JSX подразумевает, что все в React = JavaScript — он используется и для JSX-шаблонов, и для логики. Кори Хаус указывает в своей статье [58] от января 2016-го: “Angular 2 продолжает внедрять ‘JS’ в HTML. React внедряет ‘HTML’ в JS”. Это хорошо, потому что JavaScript мощнее, чем HTML.

Шаблоны в Angular представляют собой усовершенствованный HTML со специальным языком Angular(штуки, вроде ngIf или ngFor). В то время, как React требует знания JavaScript, Angular заставляет вас учить специфичный для Angular синтаксис [59].

Vue предлагает “однофайловые компоненты [60]”. Это похоже на компромисс относительно разделения ответственности — шаблоны, скрипты и стили в одном файле, но в трех различных, упорядоченных секциях. Это значит, что вы получаете подсветку синтаксиса, поддержку CSS и возможность легко использовать препроцессоры типа Jade или SCSS. Я прочитал в других статьях, что JSX проще дебажить, потому что Vue не показывает синтаксические ошибки в HTML. Это не так, поскольку Vue конвертирует HTML в render-функции [61] — поэтому ошибки показываются без проблем(Спасибо Винициусу Рейзу за комментарий и поправки!).

Примечание: Если вам нравится задумка с JSX и вам хочется использовать его в Vue, вы можете использовать babel-plugin-transform-vue-jsx [62].

2.4 Фреймворки против библиотек

Angular — больше фреймворк, чем библиотека, так как предоставляет убедительные предложения о том, как ваше приложение должно быть структурировано, а также имеет больше функционала из коробки. Angular — это “цельное решение” — включены “батарейки” и вам предоставляется возможность удобного старта. Вам не нужно проводить анализ библиотек, решать вопрос с роутингом и т.п. — вы можете просто начать работать.

React и Vue, с другой стороны, универсально гибки. Их библиотеки можно совмещать с любого рода пакетами(их достаточно много для React в npm [63], но у Vue пакетов меньше, так как он еще достаточно молод). Используя React, вы можете даже заменить саму библиотеку на ее API-совместимую альтернативу, такую как Inferno [64]. С большей гибкостью, однако, появляется большая ответственность — для React не существует правил и и ограничительных рекомендаций. Каждый проект требует принятия решения относительно его архитектуры, и все может легко пойти не так, как планировалось.

С другой стороны, Angular поставляется с запутанным клубком систем для сборки, бойлерплейтов, линтеров и других пожирателей времени, с которыми придется иметь дело. Это верно и для React в случае использования стартер-китов или бойлерплейтов. Конечно, они очень полезны, React работает из коробки, и это, может быть для вас способ его изучить. Иногда разнообразие инструментов, необходимых для работы в JavaScript-окружении называют “усталостью от JavaScript”. Вот статья [65] Эрика Клеммонса, который сказал следующее:

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

Vue кажется самым чистым и легким из трех фреймворков. У GitLab есть пост о принятии решения в пользу Vue.js [66](октябрь 2016-го):

Vue.js прекрасно поставляется отлично сбалансированным в плане того, что он может сделать для вас и того, что вам нужно делать самостоятельно. (...) Vue.js всегда находится в пределах досягаемости; прочная, но гибкая сетка готова помочь сохранить эффективность вашего программирования и свести связанные с DOM страдания к минимуму.

Им нравится простота и легкость использования — исходный код очень читабелен и документация или внешние библиотеки не нужны. Все достаточно просто. Vue.js “не делает далекоидущих предположений о большей части чего-либо”. Имеется также подкаст о решении GitLab [67].

Другой пост о переходе на Vue [68] от Pixeljets. React “был большим шагом вперед для мира JS в плане state-awareness [69], и он показал множеству людей реальное функциональное программирование хорошим, практичным способом”. Одним из серьезных минусов React по сравнению с Vue является проблема разбиения компонентов на более мелкие компоненты из-за ограничений JSX. Вот цитата из статьи:

Для меня и моей команда важна читабельность кода, но также крайне важно то, чтобы написание кода приносило удовольствие. Нет ничего приятного в том, чтобы создать 6 компонентов, если вы разрабатываете простенький виджет-калькулятор. Во многих ситуациях это также плохо в плане поддержки, модификаций или визуальной переработки какого-то виджета, так как вам надо перемещаться по множеству файлов/функций и по-отдельности проверять каждый маленький кусочек HTML. Опять же, я не предлагаю писать монолиты — я предлагаю использовать в повседневной разработке компоненты вместо микрокомпонентов.

Hacker news [70] и Reddit [71] есть интересные дискуссии об этом посте — в наличии аргументы от недовольных и дальнейших сторонников Vue.

2.5 Управление состоянием и связывание данных

Разрабатывать UI сложно, так как состояния присутствуют везде — данные меняются с течением времени, что влечет за собой увеличение сложности. Определенные способы работы с состоянием оказывают большую помощь, когда приложение разрастается и становится более сложным. Для небольших приложений это может быть перебор, и что-то типа Vanilla JS было бы достаточно.

Как это работает? Компоненты описывают UI в определенный момент времени. Когда данные изменяются, фреймворк перерисовывает UI-компонент целиком — отображаемые данные всегда актуальны. Мы может назвать эту идею “UI как функция”.

React часто работает в паре с Redux. Redux описывает себя в трех фундаментальных принципах [72]:

  • Единственный источник правды
  • Состояние доступно только для чтения
  • Изменения делаются с помощью чистых функций

Другими словами: состояние приложения целиком находится в дереве объектов внутри единого хранилища. Это помогает отлаживать приложение и кое-какая функциональность становится проще для реализации. Состояние в read-only режиме и может быть изменено только через “экшены”, чтобы избежать состояния гонки(также полезно для отладки). “Редьюсеры” пишутся, чтобы указать, как “экшены” могут трансформировать состояние.

Большая часть туториалов и бойлерплейтов включают в себя Redux, но вы можете использовать React без него(или вам может быть вообще не нужен Redux в вашем проекте). Redux добавляет сложность и достаточно серьезные ограничения для вашего кода. Если вы изучаете React, вам стоит подумать об изучении чистого React перед тем, как вы перейдете к Redux. Вам определенно стоит прочесть “Вам может быть не нужен Redux [73]” Дэна Абрамова.

Некоторые разработчики [74] предлагают использовать Mobx [75] вместо Redux. Можете думать о нем, как о “автоматическом Redux”, который упрощает использование и понимание с самого начала. Если хотите посмотреть, вам стоит начать с введения [76]. Вы можете также почитать это полезное сравнение Redux и MobX [77] от Робина. Тот же автор также предлагает информацию о переходе с Redux на MobX [78]. Этот список [79] полезен, если вы хотите проверить другие Flux-библиотеки. И, если вы пришли из мира MVC, вы захотите прочесть статью “Философия Redux (если вы уже знаете MVC) [80]” Михаила Левковского.

Vue можно использовать с Redux, но он предлагает Vuex [81] как свое собственное решение.

Большое отличие между React и Angular — одно- или двустороннее связывание. Двустороннее связывание в Angular меняет модель состояния, когда элемент пользовательского интерфейса(к примеру, поле ввода) обновляется. React идет только одним путем: сначала обновляет модель и затем отрисовывает элемент. Подход Angular чище в коде и проще для реализации разработчиком. Подход React позволяет получить лучшее понимание о том, что происходит с данными, потому что поток данных течет лишь в одном направлении(это делает отладку проще).

Оба подхода имеют плюсы и минусы. Вам нужно понять эти идеи и определить, влияют ли они на ваше решение о выборе фреймворка. И статья “Двустороннее связывание: Angular 2 и React [82]”, и этот вопрос [83] на StackOverflow предоставляют хорошие объяснения. Здесь [84] вы можете найти интерактивные примеры кода(возрастом в 3 года, только для Angular 1 и React). Последнее, но тем не менее важное: Vue поддерживает и одностороннее, и двустороннее связывание [85](одностороннее по-умолчанию).

Если хотите почитать больше, имеется длинная статья о различных типах состояния и управлении состоянием в Angular-приложениях [86](от Виктора Савкина).

2.6 Другие концепции программирования

Angular включает в себя dependency injection, паттерн, в котором один объект(сервис) предоставляет зависимости другому объекту(клиенту). Это дает большую гибкость и более чистый код. Статья “Понять dependency injection [87]” в деталях объясняет эту идею.

Паттерн Модель-Вид-Контроллер [88](MVC) делит проект на три части — модель, вид и контроллер. У Angular, как у MVC-фреймворка, имеется поддержка MVC из коробки. У React есть лишь V — что будет M и C нужно решить вам самим.

2.7 Гибкость и переход к микросервисам

Вы можете работать с React или Vue просто добавляя JavaScript-библиотеку к исходникам. Это невозможно с Angular, потому что он использует TypeScript.

Мы все больше движемся в сторону микросервисов и микроприложений. React и Vue предоставляют вам полный контроль над размером приложения, позволяя включить только те вещи, которые действительно нужны. Они дают больше гибкости при переходе от SPA к микросервисам, используя части бывшего приложения. Angular лучше подходит для SPA, так как для использования в микросервисах он, вероятно, слишком раздут.

Как отмечает Кори Хаус:

JavaScript быстро развивается, и React позволяет вам заменять небольшие фрагменты вашего приложения более подходящими библиотеками вместо того, чтобы ждать и надеяться на то, что ваш фреймворк обновят. Философия маленьких, интегрируемых, узкоспециализированных инструментов никогда не выйдет из моды.

Некоторые люди также используют React для не-SPA вебсайтов(например, для сложных форм или мастеров). Даже Facebook использует React не для главной страницы, а, скорее, для определенных страниц и возможностей.

2.8 Размер и производительность

Обратная сторона функциональности: Angular довольно-таки раздут. Размер сжатого gzip-ом файла — 143кб, по сравнению с 23кб Vue и 43кб React.

И у React, и у Vue есть Virtual DOM, который должен увеличивать производительность. Если вам интересно, можете почитать об отличиях между Virtual DOM и DOM [89], а также о реальных преимуществах Virtual DOM в React [90]. Один из авторов Virtual DOM также отвечает на вопросы, связанные с производительностью [91] на StackOverflow.

Чтобы проверить производительность, я посмотрел великолепный js-framework-benchmark [92]. Вы можете сами скачать и запустить его или посмотреть на интерактивную таблицу с результатами [93]. Перед тем, как проверить результаты, вам нужно знать, что фреймворки обманывают бенчмарки [94] — такие замеры производительности не должны быть основой принятия решений.

Angular vs. React vs. Vue: Сравнение 2017 - 6
Производительность Angular, React и Vue (Источник [93])

Angular vs. React vs. Vue: Сравнение 2017 - 7
Выделение памяти в Мб (Источник [93])

Чтобы подытожить: у Vue прекрасная производительность и лучшее распределение памяти, но все фреймворки действительно довольно рядом друг с другом, по сравнению с особенно медленными или особенно быстрыми фреймворками(типа Inferno [93]). Еще раз: тесты производительности следует рассматривать как побочные данные, не для вынесения вердикта.

2.9 Тестирование

Facebook использует Jest [95], чтобы тестировать свой код на React. Здесь есть сравнение Jest и Mocha [96], и есть статья о том, как использовать Enzyme с Mocha [97]. Enzyme — библиотека для тестирования, написанная на JavaScript, используемая Airbnb(в сочетании с Jest, Karma и другими тест-раннерами). Если вы хотите почитать побольше, имеются старые статьи про тестирование в React(здесь [98] и здесь [99]).

Далее, существует Jasmine, как тестовый фреймворк для Angular 2. В статье Эрика Элиотта говорится о том, что Jasmine “приводит к миллионам способов написания тестов и утверждений, нуждающихся в тщательном прочтении каждого из них, чтобы понять, что он делает”. Вывод также раздут и труден для чтения. Есть несколько информативных статей про интеграцию Angular 2 с Karma [100] и Mocha [101]. Также есть старое видео(от 2015-го) о тестовых стратегиях в Angular 2 [102].

У Vue есть недостатки в тестировании, но Эван написал в своем превью от 2017-го, что команда планирует поработать над этим [103]. Они рекомендуют использовать Karma [104]. Vue работает с Jest [105], также есть тестовая утилита avoriaz [106].

2.10 Универсальные и нативные приложения

Универсальные приложения внедряются в веб, на десктопы, а также в мир нативных приложений.

И React, и Angular поддерживают нативную разработку. У Angular есть NativeScript [107](при поддержке Telerik) для нативных приложений и Ionic Framework для гибридных приложений. С React вы можете попробовать react-native-renderer [108], чтобы разрабатывать кроссплатформенные приложения для iOS или Android, или react-native [109] для нативных приложений. Большое число приложений(включая Facebook; за подробностями на Showcase [110]) сделаны с помощью react-native.

JavaScript-фреймворки рендерят страницы на клиенте. Это плохо для воспринимаемой производительности, пользовательского опыта в целом и SEO. Серверный рендеринг — это плюс. У всех трет фреймворков имеются библиотеки, чтобы помочь с этим. Для React это next.js [111], у Vue есть nuxt.js [112], и у Angular есть… Angular Universal [113].

2.11 Кривая обучения

У Angular, определенно, крутая кривая обучения. Он обладает всеобъемлющей документацией, но иногда это может вас расстраивать, потому что ряд вещей сложнее, чем кажется [114]. Даже если вы глубоко понимаете JavaScript, вам нужно изучить, что происходит под капотом фреймворка. Вначале установка магическая, предлагает большое число встроенных пакетов и кода. Это можно рассматривать, как минус из-за большой, сразу существующей экосистемы, которую вам нужно со временем изучить. С другой стороны, это может и хорошо в определенных ситуациях, поскольку многие решения уже приняты. С React вам, скорее всего, придется принять множество внушительных решений относительно использования third-party библиотек. Существует 16 различных flux-пакетов для управления состоянием [79], которые можно выбрать для React.

Vue довольно прост для изучения. Компании переходят на Vue из-за того, что он кажется значительно более простым для начинающих разработчиков. Тут вы сможете почитать, как некто описывает переезд своей команды с Angular на Vue [115]. По информации от другого пользователя [116], приложение на React в его компании было таким сложным, что новый разработчик не идти в ногу с кодом. С Vue разрыв между младшим и старшим разработчиком сокращается, и они могут взаимодействовать проще и с меньшим количеством багов, проблем и времени на разработку.

Некоторые люди утверждают, что то, что они сделали на React было бы написано лучше с использованием Vue. Если вы — неопытный JavaScript разработчик — или в последние 10 лет работали в основном с jQuery — вам стоит подумать об использовании Vue. Сдвиг парадигмы более выражен при переходе на React. Vue выглядит больше как чистый JavaScript в тоже время привнося некоторые новые идеи: компоненты, событийная модель и однонаправленный data-flow. Также у него небольшой размер.

Тем временем, у Angular и React свой собственный подход к вещам. Они могут мешать вам, потому что вам нужно приспосабливаться под них, чтобы заставить их работать. Это может быть вредно из-за меньшей гибкости и крутой кривой обучения. Это также может быть и полезно, поскольку вас заставляют изучать правильные подходы в процессе изучения технологии. С Vue вы можете работать в стиле старомодного JavaScript. Это может быть проще вначале, но может стать проблемой в долгосрочной перспективе, если все сделать не верно.

Когда речь заходит об отладке, плюс React и Vue в меньшем количестве магии. Охота на баги проще, потому что есть лишь несколько мест, куда нужно смотреть, и у стектрейсов лучше видны отличия между собственным кодом и исходниками библиотеки. Работающие с React сообщают, что им никогда не требовалось читать исходный код библиотеки. Однако, отлаживая ваш код вашего приложения на Angular, вам часто нужно отлаживать внутренности Angular, чтобы понять лежащую в его основе модель. С другой стороны, сообщения об ошибках должны стать более чистыми и информативными начиная с Angular 4.

2.12 Под капотом Angular, React и Vue

Хотите проверить исходники самостоятельно? Хотите увидеть, как все складывается?

Возможно, вам стоит сначала проверить вот эти GitHub-репозитории: React(github.com/facebook/react [117]), Angular(github.com/angular/angular [118]) и Vue(github.com/vuejs/vue [119]).

Как выглядит синтаксис? ValueCoders сравнивают синтаксис Angular, React и Vue.

Хорошо бы также увидеть все на продакшене — вместе с исходным кодом, на котором все основано. На TodoMVC есть список из десятков вариантов одного и того же Todo-приложения, написанного на различных JavaScript-фреймворках — можете сравнить решения на Angular, React и Vue. RealWorld разрабатывает реальное приложение(клон Medium) и у них есть готовые решения для Angular(4+) и React(с Redux). Для Vue работа в процессе.

Также есть некоторые реальные приложения, на которые вы можете посмотреть. Решения на базе React:

Приложения на Angular:

А также решения на Vue:

Заключение

Выберите фреймворк сейчас

И React, и Angular, и Vue достаточно круты, и никто из них нельзя поставить сильно выше остальных. Доверьтесь своему нутру. Эта последний кусочек развлекательного цинизма [137] может помочь вам принять решение:

Грязный маленький секрет — “современная JavaScript-разработка” не имеет ничего общего с созданием веб-сайтов — это создание пакетов, которые могут использоваться людьми, создающими библиотеки, которые могут использоваться людьми, создающими фреймворки, которым люди, пишущие туториалы и ведущие курсы могут обучать. Не уверен, что кто-то действительно что-то создает для настоящих пользователей.

Это преувеличение, конечно, но в нем возможно есть доля правды. Да, в экосистеме JavaScript есть много лишнего шума. Может быть, вы найдете множество более привлекательных альтернатив во время ваших поисков — постарайтесь не быть ослепленным новейшим блестящим фреймворком.

Что я должен выбрать?

  • Если вы работаете в Google: Angular
  • Если вы любите TypeScript: Angular(или React)
  • Если вам нужно руководство, структура и рука помощи: Angular
  • Если вы работаете в Facebook: React
  • Если вам нравится гибкость: React
  • Если вы любите большие экосистемы: React
  • Если вам нравится выбирать из десятков пакетов: React
  • Если вы любиле JS и подход “все-есть-JavaScript”: React
  • Если вам нравится действительно чистый код: Vue
  • Если вы хотите простейшая кривую обучения: Vue
  • Если вы хотите самый легковесный фреймворк: Vue
  • Если вам хочется разделения ответственности в пределах одного файла: Vue
  • Если вы работаете один или в небольшой команде: Vue(или React)
  • Если ваше приложение имеет тенденцию разрастаться: Angular(или React)
  • Если вы хотите иметь большой пул девелоперов: Angular или React
  • Если вы работаете с дизайнерами и вам нужны чистые HTML-файлы: Angular или Vue
  • Если вам нравится Vue, но пугает ограниченная экосистема: React
  • Если вы не можете решить, изучите сначала React, затем Vue, затем Angular

Итак, вы приняли решение?

Angular vs. React vs. Vue: Сравнение 2017 - 8
Дааа, вы его приняли!

Отлично! Читайте о том, как начать разрабатывать с Angular, React или Vue (скоро, подписывайтесь на меня в Twitter [7] для обновлений).

Дополнительные ресурсы

React JS, Angular & Vue JS — Quickstart & Comparison [138] (восьмичасовое введение и сравнение трех фреймворков)
Angular vs. React (vs. Vue) — the DEAL breaker [139] (короткое, но превосходное сравнение от Доминика Т [140])
Angular 2 vs. React — the ultimate dance off [56] (неплохое сравнение от Эрика Элиотта [141])
React vs. Angular vs. Ember vs. Vue.js [142] (сравнение трех фреймворков в форме заметок от Гекана Сари [143])
React vs. Angular [144] (понятное сравнение двух фреймворков)
Can Vue fight for the Throne with React? [145] (приятное сравнение с большим количеством примеров кода)
10 reasons, why I moved from Angular to React [146] (еще одно неплохое сравнение от Робина Вируча)
All JavaScript frameworks are terrible [147] (большая заметка обо всех основных фреймворках от Мэтта Берджесса [148])

Автор: Synoptic

Источник [149]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/javascript/264031

Ссылки в тексте:

[1] Angular: https://angular.io/

[2] React: https://facebook.github.io/react/

[3] VueJS: https://vuejs.org/

[4] эти несколько новичков: https://hackernoon.com/top-7-javascript-frameworks-c8db6b85f1d0

[5] 9 шагов: выбор технологического стэка для вашего веб-приложения: https://medium.com/unicorn-supplies/9-steps-how-to-choose-a-technology-stack-for-your-web-application-a6e302398e55

[6] Одностраничные веб-приложения(SPA) против Многостраничных веб-приложений(MPA): https://medium.com/unicorn-supplies/angular-vs-react-vs-vue-a-2017-comparison-c5c52d620176#

[7] Twitter: https://twitter.com/jensneuhaus/

[8] MVW: https://plus.google.com/+AngularJS/posts/aZNVhj355G2

[9] багфиксы: https://github.com/angular/angular.js

[10] версию 3 пропустили: https://www.infoworld.com/article/3150716/application-development/forget-angular-3-google-skips-straight-to-angular-4.html

[11] madewithangular: https://www.madewithangular.com/

[12] stackshare: https://stackshare.io/angular-2

[13] libscore.com: http://libscore.com/#angular

[14] этой статьей: https://medium.com/@chriscordle/why-angular-2-4-is-too-little-too-late-ea86d7fa0bae

[15] Facebook: https://github.com/facebook/react/wiki/Sites-Using-React

[16] stackshare: https://stackshare.io/react

[17] libscore.com: http://libscore.com/#React

[18] рассказывали: https://developers.facebook.com/videos/f8-2017/the-evolution-of-react-and-graphql-at-facebook-and-beyond/

[19] неофициальная статья о новой архитектуре: https://github.com/acdlite/react-fiber-architecture

[20] MVVM: https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93viewmodel

[21] Эваном Ю: https://github.com/yyx990803

[22] маркетинговую деятельность и цифры в первую неделю после старта: http://blog.evanyou.me/2014/02/11/first-week-of-launching-an-oss-project/

[23] madewithvuejs.com: https://madewithvuejs.com/

[24] патентного файла: https://github.com/facebook/react/blob/master/PATENTS

[25] этого Github issue: https://github.com/facebook/react/issues/7293

[26] почему вам не стоит бояться: https://medium.com/@dwalsh.sdlr/react-facebook-and-the-revokable-patent-license-why-its-a-paper-25c40c50b562

[27] предостерегает от использования в стартапах: https://medium.com/@raulk/if-youre-a-startup-you-should-not-use-react-reflecting-on-the-bsd-patents-license-b049d4a67dd2

[28] обзор: https://medium.com/@raulk/further-notes-and-questions-arising-from-facebooks-bsd-3-strong-patent-retaliation-license-c6386e8e1d60

[29] Разъяснение лицензии React: https://code.facebook.com/posts/112130496157735/explaining-react-s-license/

[30] Angular и Dart: http://news.dartlang.org/2016/03/the-new-adwords-ui-uses-dart-we-asked.html?m=1

[31] ведет к более чистому коду / API, и меньшему оверинженерингу: https://medium.com/@mgoetzke/some-people-have-been-asking-about-the-dependability-of-vue-jss-9dc2842b3709

[32] Github Stars History for Angular, React and Vue: http://www.timqian.com/star-history/#facebook/react&angular/angular&vuejs/vue

[33] Technology Radar: https://www.thoughtworks.com/de/radar#

[34] стадии принятия: https://www.thoughtworks.com/de/radar/languages-and-frameworks/redux

[35] стадии испытаний: https://www.thoughtworks.com/de/radar/languages-and-frameworks/vue-js

[36] стадии оценки: https://www.thoughtworks.com/de/radar/languages-and-frameworks/angular-2

[37] последним опросом StackOverflow 2017: https://insights.stackoverflow.com/survey/2017#most-loved-dreaded-and-wanted

[38] front-end фреймворки: http://stateofjs.com/2016/frontend/

[39] в своих принципах проектирования: https://facebook.github.io/react/contributing/design-principles.html#stability

[40] react-codemod: http://react-codemod

[41] никогда не был проблемой: https://www.reddit.com/r/reactjs/comments/5a45ai/is_react_a_good_choice_for_a_stable_longterm_app/

[42] схеме версионирования: https://facebook.github.io/react/blog/2016/02/19/new-versioning-scheme.html

[43] заметил один из основных разработчиков React: https://github.com/facebook/react/issues/8854#issuecomment-312527769

[44] пост о версионировании и релизах: http://angularjs.blogspot.ru/2016/10/versioning-and-releasing-angular.html

[45] этой статьей: https://www.infoq.com/news/2017/04/ng-conf-2017-keynote

[46] руководство: https://angular-update-guide.firebaseapp.com/

[47] 90% API: https://vuejs.org/v2/guide/migration.html

[48] приятный инструмент: https://github.com/vuejs/vue-migration-helper

[49] отметил: https://news.ycombinator.com/item?id=13151966

[50] выбирать React имеет смысл, если вы работаете в Facebook, где каждый разработчик — супергерой: https://www.reddit.com/r/webdev/comments/5ho71i/why_we_chose_vuejs_over_react/deuynwc/

[51] всеобъемлющая статья: https://derickbailey.com/2015/08/26/building-a-component-based-web-ui-with-modern-javascript-frameworks/

[52] Шокирующий секрет статических типов: https://medium.com/javascript-scene/the-shocking-secret-about-static-types-514d39bf30a3

[53] использование статических типов не вредит: https://medium.com/@danwang74/the-economics-between-testing-and-types-4a3f8c8a86eb

[54] можете использовать Flow, чтобы включить проверку типов в React: https://www.sitepoint.com/writing-better-javascript-with-flow/

[55] можно интегрировать в VueJS: https://alligator.io/vuejs/components-flow/

[56] Сравнении Angular 2 и React: https://medium.com/javascript-scene/angular-2-vs-react-the-ultimate-dance-off-60e7dfbc379c

[57] React: Переосмысление best practices: https://www.youtube.com/watch?v=x7cQ3mrcKaY

[58] своей статье: https://medium.freecodecamp.org/angular-2-versus-react-there-will-be-blood-66595faafd51?gi=4e77c1ed4921

[59] специфичный для Angular синтаксис: https://angular.io/guide/cheatsheet

[60] однофайловые компоненты: https://vuejs.org/v2/guide/single-file-components.html

[61] конвертирует HTML в render-функции: https://vuejs.org/v2/guide/render-function.html

[62] babel-plugin-transform-vue-jsx: https://github.com/vuejs/babel-plugin-transform-vue-jsx

[63] npm: https://www.npmjs.com/search?q=react&page=1&ranking=popularity

[64] Inferno: https://infernojs.org/

[65] статья: https://medium.com/@ericclemmons/javascript-fatigue-48d4011b6fc4

[66] пост о принятии решения в пользу Vue.js: https://about.gitlab.com/2016/10/20/why-we-chose-vue/

[67] подкаст о решении GitLab: https://www.youtube.com/watch?v=ioogrvs2Ejc#action=share

[68] переходе на Vue: http://pixeljets.com/blog/why-we-chose-vuejs-over-react/

[69] state-awareness: https://en.wikipedia.org/wiki/Single_source_of_truth

[70] Hacker news: https://news.ycombinator.com/item?id=13151317

[71] Reddit: https://www.reddit.com/r/webdev/comments/5ho71i/why_we_chose_vuejs_over_react/

[72] трех фундаментальных принципах: http://redux.js.org/docs/introduction/ThreePrinciples.html

[73] Вам может быть не нужен Redux: https://medium.com/@dan_abramov/you-might-not-need-redux-be46360cf367

[74] Некоторые разработчики: https://news.ycombinator.com/item?id=13151577

[75] Mobx: https://github.com/mobxjs/mobx

[76] введения: https://mobx.js.org/getting-started.html

[77] полезное сравнение Redux и MobX: https://www.robinwieruch.de/redux-mobx-confusion/

[78] переходе с Redux на MobX: https://www.robinwieruch.de/mobx-react/

[79] Этот список: https://github.com/voronianski/flux-comparison

[80] Философия Redux (если вы уже знаете MVC): https://medium.com/p/thinking-in-redux-when-all-youve-known-is-mvc-c78a74d35133?source=user_popover

[81] Vuex: https://github.com/vuejs/vuex

[82] Двустороннее связывание: Angular 2 и React: https://www.accelebrate.com/blog/two-way-data-binding-angular-2-and-react/

[83] этот вопрос: https://stackoverflow.com/questions/34519889/can-anyone-explain-the-difference-between-reacts-one-way-data-binding-and-angula

[84] Здесь: http://n12v.com/2-way-data-binding/

[85] и одностороннее, и двустороннее связывание: https://medium.com/js-dojo/exploring-vue-js-reactive-two-way-data-binding-da533d0c4554

[86] управлении состоянием в Angular-приложениях: https://blog.nrwl.io/managing-state-in-angular-applications-22b75ef5625f

[87] Понять dependency injection: https://github.com/angular/angular.js/wiki/Understanding-Dependency-Injection

[88] Модель-Вид-Контроллер: https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller

[89] отличиях между Virtual DOM и DOM: http://reactkungfu.com/2015/10/the-difference-between-virtual-dom-and-dom/

[90] реальных преимуществах Virtual DOM в React: https://www.accelebrate.com/blog/the-real-benefits-of-the-virtual-dom-in-react-js/

[91] отвечает на вопросы, связанные с производительностью: https://stackoverflow.com/questions/21109361/why-is-reacts-concept-of-virtual-dom-said-to-be-more-performant-than-dirty-mode

[92] js-framework-benchmark: https://github.com/krausest/js-framework-benchmark

[93] интерактивную таблицу с результатами: http://www.stefankrause.net/js-frameworks-benchmark6/webdriver-ts-results/table.html

[94] фреймворки обманывают бенчмарки: https://medium.com/@localvoid/how-to-win-in-web-framework-benchmarks-8bc31af76ce7

[95] Jest: http://facebook.github.io/jest/

[96] сравнение Jest и Mocha: https://spin.atomicobject.com/2017/05/02/react-testing-jest-vs-mocha/

[97] как использовать Enzyme с Mocha: https://semaphoreci.com/community/tutorials/testing-react-components-with-enzyme-and-mocha

[98] здесь: https://medium.com/@bruderstein/the-missing-piece-to-the-react-testing-puzzle-c51cd30df7a0

[99] здесь: http://reactkungfu.com/2015/07/approaches-to-testing-react-components-an-overview/

[100] с Karma: https://medium.com/@lacolaco/setting-up-angular-2-testing-environment-with-karma-and-webpack-e9b833befd99

[101] Mocha: https://medium.com/@PeterNagyJob/angular2-configuration-and-unit-testing-with-mocha-and-chai-4ada9484e569

[102] тестовых стратегиях в Angular 2: https://www.youtube.com/watch?v=C0F2E-PRm44

[103] планирует поработать над этим: https://medium.com/the-vue-point/vue-in-2016-8df71d98bfb3

[104] Karma: http://karma-runner.github.io/1.0/index.html

[105] Jest: https://github.com/locoslab/vue-jest-utils

[106] тестовая утилита avoriaz: https://github.com/eddyerburgh/avoriaz

[107] NativeScript: https://docs.nativescript.org/tutorial/ng-chapter-0

[108] react-native-renderer: http://angularjs.blogspot.ru/2016/04/angular-2-react-native.html

[109] react-native: https://facebook.github.io/react-native/

[110] Showcase: https://facebook.github.io/react-native/showcase.html

[111] next.js: https://github.com/zeit/next.js

[112] nuxt.js: https://nuxtjs.org/

[113] Angular Universal: https://universal.angular.io/

[114] ряд вещей сложнее, чем кажется: https://www.reddit.com/r/webdev/comments/5ho71i/why_we_chose_vuejs_over_react/db1vppj/

[115] с Angular на Vue: https://medium.com/@Hemantisme/moving-from-angular-to-vue-a-vuetiful-journey-c29842ab2039

[116] от другого пользователя: https://news.ycombinator.com/item?id=13151716

[117] github.com/facebook/react: https://github.com/facebook/react

[118] github.com/angular/angular: https://github.com/angular/angular

[119] github.com/vuejs/vue: https://github.com/vuejs/vue

[120] Do: https://github.com/1ven/do

[121] sound-redux: https://github.com/andrewngu/sound-redux

[122] Brainfock: https://github.com/Brainfock/Brainfock

[123] react-hn: https://github.com/insin/react-hn

[124] react-news: https://github.com/echenley/react-news

[125] react-native-whatsapp-ui: https://github.com/himanshuchauhan/react-native-whatsapp-ui

[126] туториал: https://www.codementor.io/codementorteam/build-a-whatsapp-messenger-clone-in-react-part-1-4l2o0waav

[127] phoenix-trello: https://github.com/bigardone/phoenix-trello/blob/master/README.md

[128] slack-clone: https://github.com/avrj/slack-clone

[129] другой туториал: https://medium.com/@benhansen/lets-build-a-slack-clone-with-elixir-phoenix-and-react-part-1-project-setup-3252ae780a1

[130] angular2-hn: https://github.com/housseindjirdeh/angular2-hn

[131] hn-ng2: https://github.com/hswolff/hn-ng2

[132] неплохой туториал о создании еще одного: https://medium.com/@Sureshkumar_Ash/angular-2-hackernews-clone-dynamic-components-routing-params-and-refactor-340773d82e6f

[133] Эшвина Сурешкумара: https://medium.com/@Sureshkumar_Ash

[134] vue-hackernews-2.0: https://github.com/vuejs/vue-hackernews-2.0

[135] Loopa news: https://github.com/Angarsk8/loopa-news

[136] vue-soundcloud: https://github.com/mul14/vue-soundcloud

[137] последний кусочек развлекательного цинизма: https://wildermuth.com/2017/02/12/Why-I-Moved-to-Vue-js-from-Angular-2#comment-3153455874

[138] React JS, Angular & Vue JS — Quickstart & Comparison: https://www.udemy.com/angular-reactjs-vuejs-quickstart-comparison/

[139] Angular vs. React (vs. Vue) — the DEAL breaker: https://hackernoon.com/angular-vs-react-the-deal-breaker-7d76c04496bc

[140] Доминика Т: https://medium.com/@dominik.t

[141] Эрика Элиотта: https://medium.com/@_ericelliott

[142] React vs. Angular vs. Ember vs. Vue.js: https://medium.com/@gsari/react-vs-angular-vs-ember-vs-vue-js-e186c0afc1be

[143] Гекана Сари: https://medium.com/@gsari

[144] React vs. Angular: https://www.sitepoint.com/react-vs-angular/

[145] Can Vue fight for the Throne with React?: https://rubygarage.org/blog/vuejs-vs-react-battle

[146] 10 reasons, why I moved from Angular to React: https://www.robinwieruch.de/reasons-why-i-moved-from-angular-to-react/

[147] All JavaScript frameworks are terrible: https://medium.com/@mattburgess/all-javascript-frameworks-are-terrible-e68d8865183e

[148] Мэтта Берджесса: https://medium.com/@mattburgess

[149] Источник: https://habrahabr.ru/post/338068/