Merge и эффективность

62 views
Skip to first unread message

Daulet Urazalinov

unread,
Jul 13, 2011, 11:49:06 AM7/13/11
to Ext.NET
Кратко опишу ситуацию.

У меня есть приложение, которое грузит страницы через Panel AutoLoad
IFrame, думаю все поняли как это делается :)

Однако по моим замерам в любом случае на предварительную загрузку
скриптов и инициализацию уходит 2-3 секунды на средней машине. И само
собой поднимается отдельный extjs singleton и все его скрипты и
прелести, что не есть гуд. До какого-то момента меня это устраивало и
заказчика тоже, но теперь они хотят быстрее и модель "куча фреймов"
себя не оправдала :(

Предварительно я решил перейти на AutoLoad Mode="Merge", что надеюсь
улучшит производительность.

Плюс зная что ExtJS не самый экономный к памяти и процессору фреймворк
(я как то писал на нем проект) и отжирает кучу всег (рекорд 2 гига
памяти в FireFox). И само собой Ext.NET тоже "унаследовал" данную
проблему, но думаю уйдя от фреймов я пожалею нервы и время
пользователей :)

Вопрос такой, какие вы порекомендуете средства для оптимизации в общем
и как для этих целей подходит Mode="Merged"? И насколько я понимаю,
все удобство работы с уникальными ID контролов при таком способе
уйдет?

quirkmind

unread,
Jul 13, 2011, 1:27:46 PM7/13/11
to Ext.NET
Я не понимаю любви к фреймам. Да, есть случаи когда они удобно, но
огульно их использовать не стоит (ибо это тяжело для браузера)
Ext.Net умеет динамически рендерить контролы поэтому фреймы можно
заменить юзер контролами (типа вьюхи в MVC (упрощено))

Пример

- Страница http://pastebin.com/h2DkMGPt
- Хендлер http://pastebin.com/Wz8HHc0K
- User Control 1 http://pastebin.com/JmuPVNXM
- User Control 2 http://pastebin.com/ssnphXKy
- User Control 3 http://pastebin.com/M1w4A49z

Ext.Net.UserControlRenderer ещё не совсем удобный в плане
использования (будет значительно улучшен в версии 2), но вы можете
допилить его сами под ваши нужды, там очень простой код
К примеру, если хотите использовать одинаковые айдишники в юзер
контролах и избежать конфликтов, то надо вручную присвоить уникальный
ID для юзер контрола внутри метода Build (сейчас используется
автоматический GUID) и поставить IDMode="Parent" для топового виджета.
В этом случае, ID виджетов на клиенте будут иметь вид
"UserControlID_WidgetID"

public virtual string Build(string userControlPath, string
controlIdToRender, RenderMode mode, string element, int? index)
{
string id = "ID_" + Guid.NewGuid().ToString().Replace("-",
""); // you can change Build method signature and pass own user
control id


Daulet Urazalinov

unread,
Jul 14, 2011, 12:15:02 AM7/14/11
to Ext.NET
Хм, довольно интересно, обязательно попробую. Меня правда некоторые
вопросы смущают, но думаю разберусь.

А использование DirectEvent и DirectMethod в данном способе
реализуемо? Просто они делают разработку намного проще.

И в чем отличие предложенного метода от AutoLoad Merge?

On 13 июл, 23:27, quirkmind <vscheg...@gmail.com> wrote:
> Я не понимаю любви к фреймам. Да, есть случаи когда они удобно, но
> огульно их использовать не стоит (ибо это тяжело для браузера)
> Ext.Net умеет динамически рендерить контролы поэтому фреймы можно
> заменить юзер контролами (типа вьюхи в MVC (упрощено))
>
> Пример
>
> - Страницаhttp://pastebin.com/h2DkMGPt
> - Хендлерhttp://pastebin.com/Wz8HHc0K
> - User Control 1http://pastebin.com/JmuPVNXM
> - User Control 2http://pastebin.com/ssnphXKy

> - User Control 3http://pastebin.com/M1w4A49z

quirkmind

unread,
Jul 14, 2011, 6:40:33 AM7/14/11
to Ext.NET
Если DirectEvent и DirectMethod объявлены внутри юзер контрола, то
конечно нельзя
Нужно поступать наподобие MVC, объявить методы в вебсервисе или в хттп
хендлере и вызывать их

Никакого отличия от AutoLoad Merge нет, он и работает в данном случае,
просто мы возвращает скрипт, который выполняется на клиенте (и
никакого html)

Саят Абузов

unread,
Jul 21, 2011, 5:22:56 AM7/21/11
to Ext.NET
1)У меня имеется следующая проблема при отработке пользовательского
контрола http://pastebin.com/6szMAw6w не отрабатывается блок кода
(<content> в северной панели(он закомментен))
выдает следующую ошибку Error executing child request for handler
'Ext.Net.SelfRenderingPage'.
http://pastebin.com/cSL6tcYU -страница
http://pastebin.com/VZc7USpV- хэндлер
http://pastebin.com/6szMAw6w-контрол

2)Как можно получить доступ к ResourceManger в пользовательском
контроле?

quirkmind

unread,
Jul 21, 2011, 5:31:07 AM7/21/11
to Ext.NET
Хендлер обрабатывает только юзер контролы, у Вас же контрол оформлен
как страница (с формой и прочим)
В юзер контроле оформите только необходимую разметку

По поводу ресурс менеджера, зачем он вам в том юзер контроле? Тот юзер
контрол оторван от серверной страницы (не знает её, да она и
уничтожена давно потому что уже отренедерена) и рендерит только свой
код

On 21 июл, 13:22, Саят Абузов <abuz...@gmail.com> wrote:
> 1)У меня имеется следующая проблема при отработке пользовательского

> контролаhttp://pastebin.com/6szMAw6wне отрабатывается блок кода


> (<content> в северной панели(он закомментен))
> выдает следующую ошибку Error executing child request for handler

> 'Ext.Net.SelfRenderingPage'.http://pastebin.com/cSL6tcYU-страницаhttp://pastebin.com/VZc7USpV-хэндлерhttp://pastebin.com/6szMAw6w-контрол

Daulet Urazalinov

unread,
Sep 5, 2011, 12:21:12 PM9/5/11
to Ext.NET
Метод хороший. Вопрос такой, помимо autoLoad, как можно отрисовать
контрол в панели? Например при нажатии на кнопку?

quirkmind

unread,
Sep 5, 2011, 12:25:30 PM9/5/11
to Ext.NET
Серверная или клиентская реализация?
Если на сервере, то где именно? В самой странице, веб сервисе или
хендлере?

Daulet Urazalinov

unread,
Sep 5, 2011, 12:30:21 PM9/5/11
to ext...@googlegroups.com
В данном случае на клиенте. Попробовал через выставление autoLoad и вызов Panel.reload, не помогло. До хэндлера стучится, но ничего не отображает.

quirkmind

unread,
Sep 5, 2011, 12:33:12 PM9/5/11
to Ext.NET
Значит я не понял вопроса. Я имел ввиду где Вы контрол создаете: на
сервере или на клиенте?
Лучше показать пример, так быстрее можно понять что вы делаете

Daulet Urazalinov

unread,
Sep 5, 2011, 12:39:15 PM9/5/11
to ext...@googlegroups.com
Для TabPanel
http://pastebin.com/RBLPUAkx

Для просто обновления уже существующей страницы
http://pastebin.com/dkBJ5x3A

Хэндлер почти такой же как определен был выше.
--------
Это получается я на сервере строю. В как возможно построить контрол на клиенте? Стандартными средствами ExtJS?

quirkmind

unread,
Sep 5, 2011, 12:48:06 PM9/5/11
to Ext.NET
В принципе, должно работать
Можете показать респонс для запроса?

On 5 сен, 20:39, Daulet Urazalinov <d.urazali...@gmail.com> wrote:
> Для TabPanelhttp://pastebin.com/RBLPUAkx
>
> Для просто обновления уже существующей страницыhttp://pastebin.com/dkBJ5x3A

Daulet Urazalinov

unread,
Sep 5, 2011, 1:02:03 PM9/5/11
to ext...@googlegroups.com
Это для TabPanel
http://pastebin.com/1Yg60AGG

Это для Panel
http://pastebin.com/aMSs6FMw

quirkmind

unread,
Sep 5, 2011, 1:10:46 PM9/5/11
to Ext.NET
У вас инвалидный json генерируется
Скорее всего, юзер контрол обёрнут лейаут контролом и вы указываете
'controlIdToRender' в вызове ToScript.
Уберите либо лейаут контрол (он не нужен если 'controlIdToRender'
используется) либо не указывайте 'controlIdToRender'

On 5 сен, 21:02, Daulet Urazalinov <d.urazali...@gmail.com> wrote:

> Это для TabPanelhttp://pastebin.com/1Yg60AGG
>
> Это для Panelhttp://pastebin.com/aMSs6FMw

Daulet Urazalinov

unread,
Sep 5, 2011, 1:39:02 PM9/5/11
to ext...@googlegroups.com
Код следующий http://pastebin.com/v74zgA5n, ну он в принципе не изменился.

Вот для такого контрола http://pastebin.com/Wmivxb6H он генерит http://pastebin.com/dXDt9ZZj.

Что самое интересное, если то что он поместил в script запущу в FireBug, отрабатывает на ура. А так как хочу нет

quirkmind

unread,
Sep 5, 2011, 1:48:29 PM9/5/11
to ext...@googlegroups.com
Там может быть проблема с загрузкой ресурсов
Этот урл "/extnet/extnet-data-js/ext.axd?v=42036" корректный?
В фиддлере он нормально грузится? Загрузка может быть пропущена если ресурс уже загружен, тогда коллбек будет вызван сразу
Коллбек вызывается? Попробуйте алерт в скрипт запихать для проверки
Reply all
Reply to author
Forward
0 new messages