Моя основна робота щодня - це створення програм HTML. З цим я маю на увазі внутрішньо використовувані програми типу CRUD з безліччю редагованих переглядів сітки, текстових полів, спасних місць і т. Д. Ми зараз використовуємо веб-форми ASP.NET, які справді виконують роботу, але продуктивність в основному похмура, і досить часто ви доведеться стрибати через обручі, щоб отримати те, що потрібно. Обручі, які вішають на стелю і встановлюють полум’я.
Тож мені цікаво, чи, можливо, було б гарною ідеєю перемістити весь інтерфейс користувача на сторону JavaScript. Розробіть потужний набір елементів багаторазового керування, які спеціально підібрані до наших потреб, та обмінюйтесь лише даними з сервером. Так, мені подобається парадигма "control" (він же "віджет"), вона цілком підходить для таких програм. Таким чином, на стороні сервера у нас все ще буде основний макет, подібний до нашої поточної розмітки ASPX, але потім він буде надісланий клієнту лише один раз, і частина Javascript подбає про всі наступні оновлення інтерфейсу користувача.
Проблема в тому, що я ніколи цього не робив, і я ніколи не бачив, щоб хтось це робив, тому не знаю, які б проблеми були. Зокрема, мене хвилює:
- Продуктивність досі. Бенчмаркінг показує, що в даний час основна затримка знаходиться на стороні клієнта, коли браузер намагається відновити більшу частину сторінки після оновлення AJAX. Розроблена розмітка веб-форм ASP.NET надає нового значення слову "web", а багаті елементи управління 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 виконуватиме асинхронні поштові повідомлення на стороні сервера та відтворюватиме лише ті компоненти, які ви вказали.