Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Разработка под ASP.NET > Проект: Библиотека GUI для ASP.NET |
Автор: mdevils 13.12.2007, 20:57 |
Я хотел немного рассказать о проекте, который пришел мне в голову, надеюсь на помощь в его реализации. В настоящее время ASP.NET контролы очень тяжелые и неповоротливые. Будучи очень универсальными они выполняют много лишней работы, хранят очень много лишних данных в ViewState, из которых я, например, использую максимум 10%. Также скудно обстоят дела с JavaScript. Очень много работы производится на сервере, минимум на клиенте. Серверные контролы слабо поддаются управлению на клиентской стороне. Падает интерактивность сайта. Идея состоит в том, чтобы разработать библиотеку базовых классов для разработки легких, быстрых и интерактивных компонентов. Суть в том, чтобы: 1. Обойти использование ViewState, а использовать другой, более производительный метод. 2. Создать возможность легкой разработки объектного представления серверного контрола на клиентской стороне и реализовать все возможности для простого взаимодействия контролов на клиенте, который будет не сильно уступать серверному. 3. На основе пункта 2 реализовать AJAX-библиотеку, суть работы которой будет состоять не в обмене HTML-кодов и переправкой огромных ViewState с клиента на сервер, а в отсылке клиентским реализациям контролов только данных! Чтобы они на их основе обновляли свое представление. Идея еще сырая, надо думать. Кто хотел бы присоединиться? |
Автор: mdevils 13.12.2007, 23:15 | ||||
Например, Hidden-поля. Причем по-умолчанию сделать хранение в них открытым текстом, но с возможность выборочно включить шифрование для конфиденциальных данных. Такой метод даст возможности чтения данных JS-скриптам, что очень важно!
Я не говорю о готовых AJAX-Библиотеках. Реализовав подобную схему - несложно будет написать свою AJAX-систему без явных недостатков MS AJAX и тп. |
Автор: tol05 13.12.2007, 23:28 |
Замечательно!!! А чем ViewState - не Hidden-поле?! К тому же открытый текст .... Данные открытым тектстом?! Я правильно понял? Т.е. кто-то там SSL, https разрабатывает, на VPN лицензии покупают, а мы тут все проблемы им решить нашими контролами предложим?! Я небольшой специалист по веб-хакингу, но думаю это будет просто новый виток карьеры многих и многих поколений этих креативных товарищей. P.S. А да, просмотрел фразу "но с возможность выборочно включить шифрование"... Т.е. клиент наших контролов (или вообще дэвишка-веб-клиент) должен включать шифрование сам, для каждого контрола по-отдельности (и может быть даже алгоритм шифрования для каждого контрола выбирать)? Нет. По судам затаскают. ![]() |
Автор: mdevils 14.12.2007, 00:00 | ||
ViewState - это Hidden-поле, в котором данные хранятся одним фрагментом, сериализованные и переведенные в Base64. Такие даные невозможно прочитать из JS'а, изменить с помощью JS и тп. Я говорю о том, что каждое отдельное значение следует хранить в отдельном скрытом поле. Причем каждый контрол сам определяет какие свойства он хранит в открытом виде(и которые будут доступны для JS), а какие данные только серверные и должны быть зашифрованы симметричным методом с переменным(возможно сессионным, тут думать надо) ключем на сервере. Соответственно, шифрованные данные не доступны для JS. А к открытым данным не надо будет применять Base64 и сериализацию. Можно использовать конверторы. Это, возможно, потребует больше усилий для хранения данных на первых этапах, но со временем можно реализовать нужные интерфейсы для наиболее популярных типов. Конверторы работают гораздо быстрее сериализаторов. |
Автор: Zakonnic 14.12.2007, 15:44 |
Ну зачем так с человеком? Он и сам на все грабли наступит, а тут его этими граблями сразу по голове. ![]() mdevils, ![]() В общем библиотека быстрых компонентов - это хорошо. Серьезно. Давай думать. 1. ViewState используется чтобы запоминать состояние контролов, когда оно изменяется программно. Label1.Text="Hello,world!"; -> записалось во ViewState. Опытные погроммисты используют это аккуратно и не раздувают его. Но если надо радикально, убираешь нафиг постбаки - вот и не нужен вьюстейт. Постбаки, как я понял, в твоей модели заменяются аяксом. Одна беда - синхронизация клиента и сервера. Как заставить их "думать об одном и том же" при сохранении "простоты разработки" с помощью таких контролов? Хорошо бы пару идей сюда... 2. Я не представляю, какое может быть взаимодействие контролов на клиенте в HTML. Поэтому во-первых ![]() 3. Аякс никогда не отправляет на сервер вьюстейт. Для этого нужен сабмит формы. А чтобы построить html по данным требуется очень серьезный код. Переправка кода может обойтись довольно дорого. Для самопальных контролов без настроек это еще работает, но в общем случае отправить готовый html может быть даже выгоднее. |
Автор: mdevils 14.12.2007, 22:58 | ||
1. Постбеки сохраняются в такой модели, но: Данные хранятся не во ViewState, а в скрытых полях, что дает JavaScript'у возможность читать их(открытые). + Для ограничения размера таких данных ввести возможности частичного отключения хранения таких данных. Например, в 95% случаев оформление хранить не надо, т.к. оно задается на стадии Init декларативно. 2. Silverlight и Flash пролетают. Есть много статей с критикой. Например, Silverlight и Flash нереально полно индексировать поисковиками, а если они еще и подгружают что-то - то [censored 6]). Взаимодействие на клиенте подобно взаимодействию на сервере, только без конвейра. Каждый контрол - класс. Он содержит все необходимые методы работы с контролом. Тут надо учитывать тот момент, что необходимо сохранить функциональность для броузеров без JavaScript. ASP.NET не смогли даже в этом плане до ума довести. Элемент LinkButton не работает без JS. В нем надо было делать наоборот: Обработчик писать в onclick, а href оставить по умолчанию "#", чтобы можно было указать адрес для поисковиков и броузеров без JS. По этим причинам ASP.NET сайты нормально не индексируются, и приходится прикладывать много сил чтобы наладить индексацию. 3. Microsoft AJAX при каждом асинхронном запросе полностью отправляет ViewState на сервер и обратно. Все библиотеки AJAX для .NET работают аналогично. |
Автор: mdevils 15.12.2007, 04:04 |
Также хочется встроить в данную библиотеку DragAndDrop возможности, эффекты. Такие вещи могут привлечь людей не только функционалом, но и визуальным представлением. |
Автор: Zakonnic 17.12.2007, 14:07 |
Ага. Понятно... что ничего не понятно. :( То есть я конечно могу предположить, что задача сводится к переписыванию System.Web на JS + кучу серверных классов, рулящих потоками JS, но все таки не буду - ![]() И еще - как их писать? Если я хочу изменить цвет текста по нажатию кнопки, нужен JS. Сделать это я могу и сейчас. Чем оно будет лучше? PS. Сильверлайт кстати теоретически можно успешно индексировать - XAML все-таки. И ссылки почти как настоящие ![]() |
Автор: Mymik 17.12.2007, 21:55 |
mdevils, у тебя не получится созвать команду до тех пор, пока ты не начнешь писать хоть что-нибудь сам. Т.е. напиши хотя бы один сложненький контрол, типа GridView пускай у него будет только способность редактировать, вставлять и отображать записи (не нужно там всякие провайдеры подключать). Покажи его достоинства, чем твой GridView лучше другого. Но словах оно то красиво звучит, но ребята в M$ далеко не дураки, и я совсем не согласен, что asp.net ajax коряво реализован (где-то там вверху видел). А ты пробовал реализовывать его самому ??? ты пробовал управлять событиями, восстанавливать состояние страницы. Ведь это все тоже не так уж и просто. Да и потом, программисты по своей натуре народ ленивый ![]() |