ASP.NET Core 2.0 Razor против Angular / React / и т. Д.


101

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

Меня назначили главным архитектором проекта, поэтому я занимаюсь некоторыми исследованиями последних веб-фреймворков. Что касается серверной части, мы провели некоторое тестирование и решили использовать платформу Azure SQL. Пока что мне нравятся улучшения, которые были внесены и вносятся в ASP.NET с Core 2.0. В частности, движок Razor по сравнению с предыдущими версиями ASP.NET MVC.

Я хотел узнать мнение экспертов о «новой» Razor против Angular / React и тому подобном. Меня особенно больше беспокоит производительность. Насколько Core 2.0 Razor соответствует фреймворкам рендеринга на стороне клиента? Различия незначительны? Наше приложение нацелено на 1 000 000 потенциальных пользователей (примерно 100 000 одновременно).

Заранее спасибо!


4
Под « новой бритвой » вы имеете в виду страницы Razor?
Вернер

36
Итак, какой из них вы выбрали в итоге и как оно продвигается?
stt106

5
Как вы справились (или продолжаете) с этим проектом? Я сейчас в почти идентичной вам ситуации и хотел бы получить обновления!
JLo

10
Привет, JLo и stt106. Извините, что так долго не отвечал. В итоге мы выбрали интерфейс Angular и серверную часть API ASP.NET Core с использованием Azure SQL. До сих пор у нас все получалось отлично! Я бы предположил, что React будет похожей заменой Angular, если вам это удобнее. Мне пришлось изучить Angular, это был очень простой переход, и теперь мне он нравится!
TchPowDog

Сравнение скорости ASP.Net Core и Angular / React не по теме? На него могут быть канонические ответы. На сегодняшний день у нас Core 2.2 и скоро 3.0.
MikroDel

Ответы:


75

В итоге мы выбрали интерфейс Angular и серверную часть API ASP.NET Core с использованием Azure SQL. Мы протестировали Core Razor, и, хотя и лучше, чем предыдущая версия Razor, Angular в итоге оказался для нас намного быстрее. Что касается взаимодействия с пользователем, Angular (или React) намного превосходит по производительности. Аспекты привязки к модели Angular, которые мы обнаружили, являются огромным преимуществом серверного рендеринга. Однако использование Razor (или рендеринга на стороне сервера в целом), тем не менее, обеспечивает лучшую общую целостность данных и способствует лучшему переходу данных от внешнего интерфейса к внутреннему. Между интерфейсной структурой и API существует настоящая пропасть. Все данные, которые передаются на сервер, должны быть преобразованы в типизированные объекты - это означает, что вам нужно управлять двумя отдельными наборами моделей POCO. Это может вызвать проблемы, если объекты сервера и объекты интерфейса не совпадают. На данный момент Entity Framework Core не очень развит, поэтому у нас есть проблемы с обновлением объектов, запросами объектов, включая дочерние объекты и т. Д.

В целом, эта установка пока работает для нас отлично! Я бы предположил, что React будет похожей заменой Angular, если вам это удобнее. Мне пришлось изучить Angular, это был очень простой переход, и теперь мне он нравится!


6
Что касается синхронизации двух наборов моделей POCO, существует действительно полезное расширение для VS, которое создает угловые интерфейсы из моделей MVC, проверьте пишущую машинку
Энди Брэхэм

ну, лично, если бы мне пришлось использовать Angular, я бы использовал NoSql для части БД.
Venzentx 05

2
Я не могу себе представить, чтобы выбрать бритву ASP.NET выше Angular. В прошлом ASP.NET давал разработчикам .NET знакомый код, но с RAZOR кривая обучения выше, чем с использованием Angular. MVC отделяет логику от HTML.
Марк

1
@Mark Я не верю в это. Razor Pages идеальны, особенно в том, как они обрабатывают привязку данных. Они слишком ГОТОВЫ. Но, конечно, для его сценария angular как нельзя лучше подходит.
Mosia Thabo

2
@MosiaThabo, Марк говорит не о Razor Pages, он говорит о Razor. Это то, что упоминал мой ОП. В моем первоначальном сообщении я не имел в виду Razor Pages (или, как мне кажется, теперь называется Blazor). Я специально говорил о рендеринге на стороне клиента и рендеринге на стороне сервера. Razor Pages - это разновидность Angular / React от Microsoft, которую, я думаю, они считают необходимой из-за преимуществ, которые у вас есть с Angular и React.
TchPowDog

49

Используя Angular / React с API на стороне сервера:

  • вы устраняете процесс генерации HTML на стороне сервера и сохраняете процессор
  • api создает небольшую полезную нагрузку (json), а Razor (html) курса будет намного больше по размеру, постоянная полная перезагрузка страницы и обратная передача в оба конца. так что api и spa экономят пропускную способность
  • api и spa могут иметь разные сценарии управления версиями, масштабирования и развертывания.
  • Используя api, вы также можете поддерживать мобильное приложение, и если вы начнете с Razor, вам может понадобиться api в будущем

Но используя Angular / React, вы должны беспокоиться о клиентах:

  • клиент должен включить javascript
  • клиент должен иметь современные браузеры
  • у клиента должно быть достаточно мощное оборудование
  • SEO

1
Я понимаю разницу в двух фреймворках, меня больше интересовала производительность.
TchPowDog

Для обоих существует один и тот же конвейер, но я не знаю, существует ли какой-либо тест для бритвенных страниц. эта ссылка может помочь - ASP.NET Razor Pages против MVC: как страницы Razor подходят для вашей панели инструментов?
Мохсен Эсмаилпур,

1
Razor поддерживает мобильные устройства, перечисленные недостатки не имеют особого значения. Оба по-своему быстры. Я предпочитаю Angular, но оба они оптимизированы. Razor оптимизирует код, не используя дерево, как это делает MVC. Angular - это клиентская сторона, поэтому на самом деле он не использует дерево, но также в определенной степени оптимизирует данные в HTML.
Ник Тернер

@NickTurner Я понял это не просто как просмотр веб-страницы на вашем смартфоне, а как полноценное собственное приложение. Например, приложение для Android, которое может получать данные из неизмененного серверного API как есть, с другой стороны, используя функции, предоставляемые Android - лучшую поддержку анимации, уведомления, всплывающие сообщения и т. Д.
Рафаэль Шмитц

23

У меня нет тестов. Но у меня есть несколько проектов под управлением JQuery, Razor, .NET MVC (C #), AJAX. Не в том масштабе, за который вы беретесь.

Совет .. Обязательно все продумайте и следуйте лучшим практикам. Чтобы поддерживать удобство обслуживания, не забудьте разбить контроллеры, представления, модели на более мелкие и значимые группы. Когда я начал, я совершил ошибку, поместив все в один домашний контроллер и множество представлений в общей папке. Сначала все было хорошо, но когда началось расползание функций, это превратилось в беспорядок, и было трудно вернуться и изменить дизайн.

Я также использую Linq2SQL. Я совершил ошибку, создав модели для всего, а затем понял, что могу просто вернуть набор результатов из моих запросов в качестве модели. ага.

Если вы используете .NET MVC и беспокоитесь о производительности, вот с чем я столкнулся:

НЕ возвращайте частичные представления, которые создают большие блоки HTML! Обязательно все свести к минимуму. Избавьтесь от всего белого пространства. Используйте меньшие имена ID. Найдите время, чтобы создать как можно более легкий HTML-код. Верните JSON и попросите клиента выполнить часть работы.

Будьте осторожны при разработке CSS. Не используйте кучу встроенных стилей, найдите время, чтобы включить их в файлы CSS, которые впоследствии можно будет минимизировать.

То же самое касается JS на стороне клиента. Заманчиво поместить JS в частичные представления. Держите вещи организованными.

Рендеринг в IE ужасен. Особенно, если изображений много. Обязательно сжимайте изображения как можно сильнее, конечно без потери качества.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.