Моя основная дневная работа - создание приложений HTML. Под этим я подразумеваю внутренне используемые приложения типа CRUD с множеством редактируемых видов сетки, текстовых полей, выпадающих списков и т. Д. В настоящее время мы используем веб-формы ASP.NET, которые выполняют свою работу, но производительность в основном мрачная, и довольно часто вы придется прыгать через обручи, чтобы получить то, что вам нужно. Обручи, которые подвешены к потолку и подожжены.
Поэтому мне интересно, возможно, было бы неплохо перенести весь пользовательский интерфейс на сторону JavaScript. Разработайте надежный набор многоразовых элементов управления, специально предназначенных для наших нужд, и обменивайтесь данными только с сервером. Да, мне нравится парадигма «контроль» (он же «виджет»), она вполне подходит для таких приложений. Таким образом, на стороне сервера у нас все еще будет базовый макет, похожий на нашу текущую разметку ASPX, но тогда он будет отправлен клиенту только один раз, а часть Javascript позаботится обо всех последующих обновлениях пользовательского интерфейса.
Проблема в том, что я никогда не делал этого раньше, и я никогда не видел, чтобы кто-то делал это, поэтому я не знаю, какие будут проблемы. В частности, я беспокоюсь о:
- Производительность еще. Сравнительный анализ показывает, что в настоящее время основная задержка происходит на стороне клиента, когда браузер пытается повторно выполнить рендеринг большей части страницы после обновления AJAX. Сгенерированная разметка веб-форм ASP.NET придает новое значение слову «сеть», а богатые элементы управления Devexpress добавляют собственный уровень сложности Javascript в дополнение к этому. Но будет ли быстрее пересчитать все необходимые изменения на стороне Javascript, а затем обновить только то, что нужно обновить? Обратите внимание, что я говорю о формах, которые имеют несколько редактируемых видов сетки, множество текстовых полей, множество выпадающих списков, в каждом из которых содержится полмиллиона фильтруемых элементов и т. Д.
- Удобство разработки . Теперь было бы намного больше Javascript, и это, вероятно, смешалось бы с HTML-разметкой страницы. Этот или какой-то новый двигатель представления должен был быть произведен. Intellisense для Javascript также намного хуже, чем для кода C #, и из-за динамической природы Javascript его нельзя ожидать намного лучше. Практика кодирования может немного улучшить, но не намного. Кроме того, большинство наших разработчиков в первую очередь разработчики на C #, так что будет некоторая кривая обучения и начальные ошибки.
- Безопасность . Много проверок безопасности нужно будет выполнить дважды (на стороне сервера и на стороне пользовательского интерфейса), а на стороне сервера обработки данных придется включить намного больше из них. В настоящее время, если вы установите текстовое поле как доступное только для чтения на стороне сервера, вы можете зависеть от того, не изменяется ли его значение в клиенте. Фреймворк уже имеет достаточно кода для обеспечения этого (с помощью шифрования viewstate). С подходом, основанным только на данных, это становится сложнее, потому что вам нужно все проверять вручную. С другой стороны, возможно, дыры в безопасности будет легче обнаружить, потому что у вас будут только данные для беспокойства.
В целом, это решит наши проблемы или ухудшит их? Кто-нибудь когда-нибудь пытался это сделать, и каковы были результаты? Существуют ли какие-либо рамки, которые помогают в этом виде деятельности (за исключением jQuery и моральных эквивалентов)?
So on the server side we would still have a basic layout simliar to our current ASPX markup, but that then would get sent to the client only once, and the Javascript part would take care of all the subsequent UI updates.
Вы точно описываете , что такое ASP.NET, что говорит мне о том, что вы, вероятно, используете его неправильно. :) В ваших приложениях ASP.NET, если вы размещаете компоненты на панелях обновления, тогда библиотека javascript ASP.NET будет выполнять асинхронные обратные передачи на стороне сервера и только повторно отображать компоненты, которые вы укажете.