Начало нового времени или ExtJS 3.0. Первая бета Ext-Core

ext_bld_logo1Так как фреймворк ExtJS уже давно стал нашим основным и любимым инструментом, то мы очень ожидаем предстоящих анонсов на первой конференции для разработчиков и пользователей ExtJS. Пока же «екстовцы» порадовали нас, выпустив уже давно обещанный продукт, да еще и под отличной лицензией (для тех, кому это действительно было важно). И так, мы дождались Ext Core 3.0, видимо, первой ласточки из серии релизов третьей линейки, которую очень ожидаем (в первую очередь, это, конечно, релиз новой версии полного фреймворка, в частности, новые визуальные компоненты). Давайте поближе посмотрим на Ext Core 3.0.

И так, Ext Core — это попытка войти в мир простых веб-сайтов и разработок, где требуется некоторый минимум AJAX-инструментов, и где до этого времени работали такие средства как jQuery или Dojo. Если раньше разработка с использованием ExtJS требовала подключения всей библиотеки (ну или своей кастомной сборки), что для простых проектов, где использовалось всего пару процентов возможностей, было неприемлемо, теперь у нас есть полностью готовое ядро, имеющее идентичный с основной библиотекой API и возможности, достаточные для реализации множества необходимых функций. Да-да, возможно вы заметите сходство с основной библиотекой, которая также делится на ext-core, ext-adapter и основной файл. В данном случае мы имеем нечто среднее, объединение функционала из адаптеров (используете только собственный адаптер, который ext-base, использовать сторонние адаптеры в Ext Core нельзя) и базовых возможностей библиотеки, при этом все объединено в один файл, не требуя даже стилей, которых нет, так как нет возможности работать с виджетами и интерфейсными элементами. Да, Ext Core убирает из доступного нам богатства возможностей уникальную и лучшую, по моему мнению, систему визуальных компонент, оставляя только основные функции и методы, на основе которых мы можем строить все, что угодно.

Кстати, если присмотреться, в каталоге src есть полный набор компонентов, из которых состоит Core, что очень удобно для исследования его внутренностей. Хотя, если вы работали с обычным ExtJS Framework, то ничего нового для вас не будет, можете подключать библиотеку к проекту и сразу браться за работу. Лицензия MIT, под которой распространяется проект, позволяет, в отличие от GPL, который используется в ExtJS, использовать код в собственных закрытых и коммерческих проектах без необходимости открывать исходные коды. Так что, если вам в реальности не надо все возможности ExtJS, но, допустим, в будущем все же планируются, то можно использовать его уже здесь и сейчас, мне кажется, что добавить поддержку остальных компонент в проект, уже использующий Core-версию, не будет никаких сложностей (но надо поэксперементировать, чем я и займусь на днях).

base

Размер кода также оставляет приятные впечатления — без архивирования Core занимает всего 76 Кб, что, по моему, даже лучше, чем у jQuery, дебаг версия конечно, больше, целых 180 Кб, однако заявляется, что при использовании gzip сжатия размер сокращается до 25 Кб, что сравнимо с лучшими показателями современных библиотек аналогичного функционала.

Что же включено в Core библиотеку?
  • Все возможности по работе с элементами страницы — манипуляция с DOM, CSS, унифицированная работа с событиями, скрывающая браузерные нюансы, подсистема, отвечающая за визуальные эффекты, которые применяются при работе с элементами страницы, анимация и подобные уже классические функции. После беглого осмотра мне кажется, что API никак особо не изменен по сравнению с полной ExtJS, поэтому во многих случаях совместимость с кодом обеспечена. Приведу список классов, включенных в Core — Ext.CompositeElementLite, Ext.DomHelper, Ext.DomQuery, Ext.Element, Ext.EventManager, Ext.EventObject, Ext.Fx.
  • Поддержка системы шаблонов — Ext.Template, однако жаль, что не перенесена более мощная и расширенная система шаблонов XTemplate из основной версии. Однако все основные функции доступны, так что вполне можно работать на клиенте в практически том же стиле, что и на сервере (я имею ввиду что-то типа Smarty или другого шаблонизатора).
  • Поддержка AJAX. Для сохранения одинаковой архитектуры, в Core введен модуль Data, в котором пределен компонент Connection, предоставляющий низкоуровневый доступ к XMLHTTPRequest. К сожалению, в Core доступна только работа через этот компонент, соответственно, нет знакомых нам прокси для соединения через тег скрипт или iframe. Однако это не так часто используется, да и в основном уже в веб-приложении, а значит, тогда лучше использовать полный ExtJS. Традиционный Ajax класс расширяет компонент Connection, предоставляя унифицированный доступ к обработке запросов. Можно указывать и собственные HTTP-заголовки, отправлять формы и переопределять метод отсылки данных, перехватывать глобальные события. Странным и даже грустным выглядит отсутствие компонента UpadateManager, который для любого элемента предоставлял возможность одним методом update/load изменять содержимое через ajax. Хотя нет, стоп, метод load есть и доступен, однако с ограничением на выполнение скриптов, что во многих случаях все же ограничение и требует каких-то изворотов. Лично я попробую добавить традиционный UpdateManager в эту библиотеку.
  • Расширение базовых классов JavaScript. Указывая на то, что сам JS очень гибкий язык, разработчики дополняют и расширяют базовый функционал некоторых встроенных объектов, тем не менее пытаясь минимально влиять на сам язык, так, чтобы сохранилась возможность, к примеру, работать с несколькими библиотеками одновременно. Среди расширенных возможностей стоит выделить расширение функций — createCallback, createDelegate и defer, к возможностям класса Array добавлены методы определения индекса по значению элемента и его удаление. Примитив String расширен функцией format, которая по сути такой себе низкоуровневый шаблонизатор (в данном случае есть специальное замечание, что этот метод может конфликтовать при использовании на страницы Ajax.NET, речь идет, видимо, об этой библиотеке)
  • Служебные методы, включая основной функционал, инкапсулированный в глобальный класс Ext — определение платформы и браузера, работа с URL и JSON данными, работа с массивами через each, определение типов переменных.
  • Работа с таймерами и периодическими событиями. Мало описанные но очень полезные компоненты — отложенные задачи (DelayedTask), расширенная версия таймера TaskRunner для периодической обработки данных (запуска указанной функции). Вот этим возможностям я, честно, очень рад, так как достаточно часто использовал в проектах.
  • И, наконец, в Core включена вся мощная ОО инфраструктура, на базе которой, собственно, и построен весь фреймворк. Можно свободно создавать собственные классы, использовать наследование (в терминах библиотеки — extend), переопределение/перегрузку (override), работа с прототипами. Сюда же включены и реализации некоторых наиболее часто используемых паттернов — Singlton, Observable. И, в придачу, поддержка пространств имён.

Собственно, вот и все, чем нас радует ExtJS. Я бы сказал, что очень неплохо, хотя, выросши на основном фреймворке, иногда чувствуешь нехватку некоторых его возможностей, однако не следует забывать, что область применения Ext Core и основного фреймворка кардинально различается. Но если вы, к примеру, делаете веб-приложение, то сам сайт для него вполне логично сделать совместно с той же библиотекой, однако не заставляя посетителя загружать мегабайтный ExtJS, вместо этого просто берем Core, при этом никакого переобучения разработчикам по сути не надо, а дальнейшее расширения проекта не столкнется с необходимостью переписывать код. Мне кажется, что Core — это просто мост между разработками, когда для базового фронт-енда мы используем облегченную библиотеку, а дальше «подтягивается» тяжелая артиллерия в лице виджетов и компонентов для работы с данными. И вот здесь реализация динамической подгрузки новых компонент была бы очень кстати, аналогично сделанному в Dojo.

Core отлично подходит и для базового изучения возможностей всего фреймворка, так как здесь нет столько классов и их хитросплетения, а значит, начинающий разработчик сможет постепенно разобраться, а потом перейти к работе с уже более масштабным проектом. Хотя отсутствие некоторых привычных инструментов может поначалу смутить профессионального разработчика, но к этому быстро привыкнешь, да и статус текущей версии всего лишь бета, возможно, скоро там появится все, о чем мы так долго мечтали…
+22
6 апреля 2009, 16:39
17

комментарии (53)

+3
IIIEB4YK #
Скорость?
0
aleks_raiden #
чего именно?
–3
Ueasley #
Сортировки грида на 10000 записей, например.
+2
aleks_raiden #
1. При чем тут грид?
2. Материал вы читали? о Чем он?
3. Зачем надо сортировать столько записей на клиенте? конечно можно взять всегда какоето число и говорить что тормозит. а толку?
–2
Ueasley #
1. Интересно, изменилась ли скорость обработки более ли менее большого объема данных.
2.…
3. Столкнетесь — поймете. Отображать, понятное дело, не надо, обрабатывать — вполне.
–2
Ueasley #
Раньше у меня все висло намертво на таких обработках (jQuery летает).
+6
mecommayou #
Раньше я начинал задыхаться под водой (над водой все тип-топ).
0
aleks_raiden #
каких данных, ничего оно не обрабатывает и не должно. такое впечатление, что даже не читали материал.

3. Если не надо отображать, зачем гнать на клиент и что-то делать? какая другая технология это может сделать? может конечно JavaFXили что другое… но тогда 999 99999 записей не сможет. так что это сферический конь. конкретно- если у вас приложение с такими записями работает и это надо на клиенте, то просто неправильная архитектура без понимания специфики, либо тот 0.001% случаев, когда надо совсем нетривиальное решение.
–4
Ueasley #
Допустим, обрабатывать надо все, а отображать надо часть. Когда пойдет речь о невозможности применения AJAX'а, Flex'а и пр., поймете, о чем речь.

Я не говорю, что ExtJS — говно, я просто спросил.
–1
aleks_raiden #
зачем обрабатывать их на клиенте? это просто неправильно спроектированное приложение, в этом вините архитектора а не фреймворк
0
Fortop #
Мгм, такое понятие как толстый клиент вам незнаком :(

Жаль.
–1
mecommayou #
В рассматриваем случае просто кривой «тонкий» клиент.
+1
Fortop #
Вы телепат и знаете особенности рассматриваемого случая?

Делаете выводы на каких-то недомолвках.

Я, например, прекрасно могу себе представить вариант, когда необходимо манипулировать с достаточно большим объемом данных на клиенте.
0
aleks_raiden #
ну покажите, покажите!!! в студию!!!
+1
Fortop #
Что вам показать? Репортинговую систему? Управление складом?

Вы настолько наивны, что не понимаете зачем перекладывать часть персонализированных вычислений на локальные станции?
–2
aleks_raiden #
да, а что, это не проект или его просто нет?

Часть вычислений на станции? понимаю, от чего же. НО! я не понимаю, при чем тут инструмент интерфейсов, если это задача(сортировка) совсем другого.

Хорошо, что на клиенте (в браузере) позволит сортировку такую сделать? И что, уже сортировка столь операция сложная, что ее не делает приложение на сервере когда формирует ответ? И репортинговые системы уже строятся на клиенте?

Я вот заявлю, что миллион миллиардов записей не потянет ни одна технология, и что? и тоже скажу что вам показать. конкретики нет, есть неправильно спроектированая системаили 0.01% тех случаев, когда этот инструмент не подходит, так как создан совсем для другого, а не того, к чему вы это прицепляете.
+1
Zeroglif #
Разговор начинался всё-таки со вполне приемлемых «10000 записей», но потом как-то плавно перетёк в «миллион миллиардов записей». Не одно и то же. ;)
+1
Fortop #
Фффф, фу. Вы немного смешны в своем максимализме.

Во-первых, если бы вы имели опыт, то сами бы нашли.
Но раз нет, так нет. Как говорится — будем работать с тем, что есть под рукой.

www.netsuite.com — это так для примера, чтобы имели представление о чем идет речь.

Если вы не понимаете, что пользователь может захотеть посмотреть таблицу в 10ти различных вариантах сортировки.
Если вы не понимаете, что это будет 10 достаточно объемных (по данным) запросов.
Если вы не понимаете, что произойдет если 100 таких пользователей сделают это (а при одновременной работе 20к человек, это непременно произойдет).

То чем я могу помочь вам? Вы только скажите, и я постараюсь помочь.
0
mecommayou #
Я лично узнал у Ueasley все особенности, из которых следует что он вообще даже рядом с этим случаем не стоял, к тому же 91 год выпуска наталкивает на мысли о небольшом количестве реального опыта.

Толстый клиент на ExtJS сделать можно, и даже можно его красиво подать с помощью AIR.
0
aleks_raiden #
да, в котором есть SQLite, думаю вполне реально написать адаптер который будет работать с базой и реализовывать там ремотесортировку и даже часть задач сервера по обработке данных.
0
mecommayou #
Да, но, проблема в том что маленькие сопливые мальчишки об этом не упомянут потому что они не в курсе этих ништяков, а крутые дяди — подписали стопку бумажек о неразглашении и за ними следит НЛО.
0
Fortop #
Понятия не имею об особенностях ваших личных взаимотношений с Ueasley, но ваш 86й год выпуска меня тоже не сильно впечатляет, впрочем я не буду кричать об этом на каждом углу :)

Мне лень, неинтересно, нет времени (нужное подчеркните сами) проверять изменилась ли скорость работы с Dom, как работают улучшения Array и т.д. Если автор был бы в курсе, он бы просто дал линк на результаты тестирования производительности.

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

Теперь и с вами я тоже прощаюсь.
–2
aleks_raiden #
знакомо. и про неправильно спроектированный клиент тоже. конечно, есть много случаев, когда ни екст, ни любой другой фреймворк не поможет, более того, и браузер вообще не поможет. зачем вопить, что фреймворк не подходит для панели управления атомной станцией?
даже на толстом клиенте нет в 99% случаев необходимости работать с такими обьемами. снова повторю-если у вас такое приложениеи такие требования — в 99.9% это ошибка проектирования.
+2
Fortop #
Красиво бросаетесь процентами, неподкрепленными ничем.

Впрочем, если работать только с домашними страничками и социальными сетями, то легко получить опыт в ненужности толстого клиента. Говорит ли это о том что вы видели все? :) Отнюдь.

Так что, — увы и ах, — ваши слова, мягко говоря, неавторитетны.
–1
aleks_raiden #
ну оппоненты тоже не подкрепили свои слова ничем.
Я не говорил о ненужности толстого клиента. И во многих проектах моих применялся почти такой же подход. Но аякс, грубо говоря, далеко не единственная и даже не первая в списке технологих для создания толстых клиентов, почему ее надо нагружать несвойственными задачами, мне неведомо.

Пока что реальных проектов и цифр никто не показал.
0
Fortop #
Мгм, а как вам показать ОДБ банка? :)

При всем вашем желании, доступа к Приват-48, к примеру, вы не получите.
–1
aleks_raiden #
это лучший вариант в споре бросаться крутыми словами а потом на требование показать реальный проект сказать что он закрыт и вообще это техника для избранных…

Судя по тому, что я видел в приват24 — еще то уродство по виду как минимум
0
Fortop #
Мгм. Вы действительно не понимаете разницу между домашней страницей и корпоративным приложением? Или вам сюда habrahabr.ru/blogs/i_am_clever/56105/?

Приват-48 это просто образец какого рода системы могут требовать толстых клиентов и соответственных библиотек для них. Без оглядки на реализацию конкретного продукта. Но вам ведь это неважно, верно? :)

Вы предпочитаете, вместо признания своей ошибки, поругаться.

Что же — это ваше право. В эту игру можно играть и вдвоем. Но, при всем уважении к вам, как «автору многих сотен статей», риторика это не самая сильная область ваших навыков, да и ругаться можно более профессионально :)

За сим, откланиваюсь. Удачно вам продолжать пребывать в своем невежестве.
–1
mecommayou #
Понт засчитан.
–2
mecommayou #
Пернул мозгом оО?

Сортировка 10000 записей никоим образом не относиться к задачам которые должна решать данная библиотека. Ext предоставляет интерфейс для внедрения желаемого алгоритма сортировки, его реализация (в данном случае тупой кат-н-паст после 5 минут гугления) ложится на ваши мужественные плечи.
+1
Pilat #
mecommayou, неужели трудно понять, что никакой алгоритм сортировки не поможет?
–2
mecommayou #
Захотелось положить свои пять копеек?
0
Ueasley #
Тут проблемы не в производительности алгоритма сортировки, если ты не понял.
0
mecommayou #
Ага, я понял. Кастомное решение на одной библиотеке, оказалось эффективнее дефолтного на другой, то есть теплое лучше мягкого. Зачет.

Договаривайте до конца или не начинайте вообще.
0
Ueasley #
Проблемы с перестройкой и отображением/размещением в памяти пяти миллиардов элементов.
–2
mecommayou #
Глупость. Что еще с потолка возьмешь?
0
vrent #
у меня в Google Chtome, на атоме чудненько работает
0
mecommayou #
200!
НЛО прилетело и опубликовало эту надпись здесь
0
aleks_raiden #
вообще-то к Ext Core это не имеет никакого отношения, это же делается средствами полной версии ExtJS
НЛО прилетело и опубликовало эту надпись здесь
0
aleks_raiden #
там есть, если кто не заметил ;)
НЛО прилетело и опубликовало эту надпись здесь
–2
mecommayou #
Да-а-а… web desktop производит впечатление.

P. S.
У этого примера есть продолжение (qWikiOffice) и у этого продолжения есть продолжение (cometDesktop).
+2
sirus #
приятная новость, облегченный ExtJS действительно то чего не хватало…
0
ScREW #
Я поверхностно знаком с ExtJS и многие вещи для меня стали открытием. Напрмер: «возможностям класса Array добавлены методы определения индекса по значению элемента». Это, интересно, ещё для чего?

Вопрос к вам, как к профессионалу. Я люблю ExtJS именно за все эти гриды, асинхронные деревья, динамические комбо-боксы. На сколько тяжело будет какой-то конкретный компонент прикрутить к Ext Core? (И чтобы не тащить за собой всю библиотеку целиком.) Хочу использовать, например, Grid в публичной части сайта (потому что в админке он уже реализован), но боюсь напугать пользователя временем загрузки страницы.
+2
DEbuger #
Ветки разные EXTJS 3 вышел только Core в бете, об этом сам пост. А грид это виджет, который пока не показали.
Чтобы прикрутить грид из второй ветки нужно долго смотреть зависимости и переписывать код. А проще просто подождите когда выйдет ветка EXTJS 3.0, если хотите поставить grid со второй версии, то можно создать кастомную сборку с одним гридом, делается на сайте простыми кликами со всеми зависимостями.
0
aleks_raiden #
теоретически- можно, судя по всему, что я видел, API Сore не сильно отличается от обычной 2.2.1 версии, значит вполне реально вытащить все компоненты, требуемые для грида (стор и зависимости)и подключить. Но! так как грид самый основной и самый большой и мощный компонент, зависимостей будет много. Вторая проблема — совместимость лицензий, Core идет под MIT License, ExtJS 2.2.1 под LGPL 3 (если не изменяет память).

В Вашем случае, возможно, оптимальным будет создать кастомную сборку только с гридом и подключать ее-сжатая и минифицированная версия достаточно быстро загружается чтобы там, где реально нужен грид, пользователь смирился с небольшой задержкой
0
Xploit #
Причем тут ExtJS 3.0?
0
RayZ #
Хозяин новости хотел сказать:
As we approach the three year anniversary of the initial release of Ext, the Ext Team is proud to announce the immediate availability of Ext Core 3.0 beta for download.
0
Newton #
Меня давно мучает вопрос, почему почти все на Хабре пишут «итак» раздельно, «и так»? Что за бред?
0
Zeroglif #
Почему люди ошибаются? Потому что люди ошибаются. Если подразумевается вывод/следствие из предыдущего текста (ака созвучно «таким образом», «следовательно»), то слитно, ибо союз в начале предложения. Если сочетание союза и наречия, то раздельно.

Итак, и так можно писать, и эдак. Главное — прочуЙствовать… ;)
0
Newton #
Да, я хотел спросить, «почему союз итак почти все тут пишут раздельно». Просто уже далеко не первый раз замечаю, так сказать, эпидемический характер носят эти ошибки. Вот и поинтересовался, вдруг тут это модно?

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.