RealWorld Сравнение интерфейсных фреймворков 2020
Мы делаем это снова. Это 2020 год, есть еще 2019, 2018 и 2017.
Позвольте мне начать с этого - это ни в коем случае не сравнение того, каким должен быть ваш следующий выбор для Front-End. Это небольшое, относительно простое сравнение трех вещей: производительности, размера и строк кода очень похожего приложения.
Имея это в виду, вот как это работает:
Мы сравниваем приложение RealWorld с чем-то большим, чем просто приложение для работы. Обычно «задачи» не передают достаточно знаний и перспектив для создания реальных приложений.
Это как-то стандартизовано - проект, который соответствует определенным правилам - есть спецификация. Предоставляет внутренний API, статическую разметку и стили.
Написано или рассмотрено экспертом - последовательный, реальный проект, который в идеале мог бы создать или проанализировать эксперт в этой технологии.
Какие библиотеки / фреймворки мы сравниваем?
На момент написания в репозитории RealWorld находится 24 реализации Conduit. Неважно, у него много подписчиков или нет. Единственная оговорка - она появляется на странице Репо RealWorld.
На какие показатели мы смотрим?
Производительность - сколько времени нужно, чтобы это приложение показало контент и стало пригодным для использования?
Размер: насколько велико приложение? Мы будем сравнивать только размер скомпилированного файла (ов) JavaScript. HTML и CSS являются общими для всех вариантов и загружаются из CDN (сети доставки контента). Все технологии компилируются или транслируются в JavaScript, поэтому мы изменяем размер только этого файла (ов).
Строки кода - сколько строк кода понадобилось автору для создания приложения RealWorld на основе спецификации? Честно говоря, в некоторых приложениях немного больше наворотов, но это не должно иметь значительного влияния. Единственная папка, которую мы определяем количественно, - это src/
в каждом приложении. Не имеет значения, был он создан автоматически или нет - вам все равно нужно поддерживать его.
Показатель № 1: Производительность
Мы проверим оценку производительности из Lighthouse Audit, поставляемого с Chrome. Lighthouse возвращает оценку производительности от 0 до 100. 0 - это минимально возможная оценка. Подробнее см. Руководство по подсчету очков Lighthouse.
Настройки аудита
Обоснование
Чем раньше вы начнете рисовать и чем раньше кто-то сможет что-то сделать, тем лучше будет опыт для человека, использующего приложение.
Замечания
Примечание. PureScript был пропущен из-за отсутствия демонстрационного приложения.
Заключение
Lighthouse Audit не спит. В этом году вы можете увидеть, что приложения, которые не обслуживаются / не обновляются, падают с обрыва 90. Если ваше приложение наберет ›90, это, вероятно, не будет иметь большого значения. При этом AppRun, Elm и Svelte действительно впечатляют.
Показатель № 2: Размер
Размер передачи указан на вкладке сети Chrome. Заголовки ответа в формате GZIP плюс тело ответа, доставленное сервером.
Это зависит от размера фреймворка, а также от любых добавленных дополнительных зависимостей. Также насколько хорошо инструмент сборки может исключить неиспользуемый код из пакета.
Обоснование
Чем меньше размер файла, тем быстрее загрузка и меньше времени для анализа.
Замечания
PureScript был пропущен из-за отсутствия демонстрационного приложения.
Angular + ngrx + nx, пожалуйста, не обвиняйте меня в Angular + ngrx + nx - проверьте вкладку Chrome Dev Tools Network и, если я ошибся, дайте мне знать.
Rust + Yew + WebAssembly включает также файлы .wasm
Заключение
Потрясающая работа сообщества Svelte и Stencil, размер которой составляет менее 20 КБ, действительно является достижением.
Показатель № 3: Строки кода
Используя cloc, мы подсчитываем строки кода в папке src каждого репо. Пустые строки и строки с комментариями не участвуют в этом расчете. Почему это важно?
Если отладка - это процесс устранения ошибок программного обеспечения, тогда программирование должно быть процессом их внесения - Эдсгер Дейкстра
Обоснование
Это показывает, насколько лаконична данная библиотека / фреймворк / язык. Сколько строк кода вам нужно, чтобы реализовать почти одно и то же приложение (в некоторых из них немного больше поясов и свистков) в соответствии со спецификацией.
Замечания
Svelte был добавлен после публикации статьи - спасибо Svelte master.
riotjs -ffector-universal-hot был пропущен из-за того, что cloc не может обрабатывать .riot
файлы.
Angular + ngrx: Расчет LoC выполняется с папкой /libs
, включая файлы .ts
и .html
. Если вы считаете, что это неверно, дайте мне знать, какое число правильное и как вы его вычислили.
Заключение
Только Imba и ClojureScript с re-frame могут реализовать приложение под 1000LoC. Clojure известен своей необычайной выразительностью. Имба здесь впервые (в прошлом году cloc, не знала формат файла .imba), и похоже, что он здесь надолго. Если вы заботитесь о себе, LoC, вы знаете, что делать.
Резюме
Имейте в виду, что это не совсем сравнение яблок с яблоками. Некоторые реализации используют разделение кода, а некоторые - нет. Некоторые из них размещены на GitHub, некоторые - на Now, а некоторые - на Netlify. Вы все еще хотите знать, какой из них лучший? Я оставляю это на ваше усмотрение.
часто задаваемые вопросы
# 1 Почему рамки X, Y и Z не были включены в это сравнение?
Потому что на RealWorld repo реализация не завершена. Рассмотрите возможность участия! Внедрите решение в вашу любимую библиотеку / фреймворк, и мы включим его в следующий раз!
# 2 Почему вы называете это реальным миром?
Потому что это нечто большее, чем просто приложение To-Do. Под RealWorld мы не имеем в виду, что мы будем сравнивать зарплаты, техническое обслуживание, производительность, кривые обучения и т. Д. Существуют другие опросы, которые дают ответы на некоторые из этих вопросов. Под RealWorld мы подразумеваем приложение, которое подключается к серверу, проверяет подлинность и позволяет пользователям использовать CRUD - точно так же, как это делает реальное приложение.
# 3 Почему вы не включили мой любимый фреймворк?
Пожалуйста, смотрите №1 выше, но на всякий случай, здесь снова: потому что реализация не завершена на RealWorld repo. Я не занимаюсь всеми реализациями - это усилия сообщества. Рассмотрите возможность участия, если хотите увидеть свою структуру в сравнении.
# 4 Какую версию библиотеки / фреймворка вы включили?
Тот, который доступен на момент написания (март 2020 г.). Информация взята из репо RealWorld. Я уверен, что вы можете узнать это из репозитория GitHub.
# 5 Почему вы забыли включить фреймворк, который более популярен, чем сравниваемый?
Опять же, см. №1 и №3. Внедрение на RealWorld repo не завершено; это так просто.
Если вам понравилась эта статья, вы должны подписаться на меня в Twitter. Я пишу / пишу только о программировании и технологиях.
🎉 Изучите ClojureScript и повторно фармите - видеоурок 🎉