Главная > AJAX, ExtJS Framework, Open Source, Разное > Начало нового времени или ExtJS 3.0. Первая бета Ext-Core

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

6 апреля 2009

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 отлично подходит и для базового изучения возможностей всего фреймворка, так как здесь нет столько классов и их хитросплетения, а значит, начинающий разработчик сможет постепенно разобраться, а потом перейти к работе с уже более масштабным проектом. Хотя отсутствие некоторых привычных инструментов может поначалу смутить профессионального разработчика, но к этому быстро привыкнешь, да и статус текущей версии всего лишь бета, возможно, скоро там появится все, о чем мы так долго мечтали...

  1. IgorN
    6 апреля 2009 в 17:11 | #1

    Хороший обзор. Кстати, вроде http://abrdev.com/?p=766 писалось про динамическую подгрузку компонентов.

    • 6 апреля 2009 в 17:23 | #2

      ну там писалось про подгрузку всего фреймворка. а хотелось бы по компонентах. Тут будут сложности, так как нет Update Manager-а в Core.Наверное его взять с основной библиотеки и написать еще систему учета зависимостей, чтобы можно было писать что-то вроде: Ext.require(‘Ext.Tollbar.Button’);

  2. IgorN
    6 апреля 2009 в 17:13 | #3

    Было бы хорошо, если бы на Ext-Core начнут появлятся легкие плагины.

  3. IgorN
    6 апреля 2009 в 17:56 | #4

    Было бы классно.

  4. 7 апреля 2009 в 20:08 | #5

    О!Будет чем себя занять завтра! Спасибо за обзор!

  5. LokiDi L0ck
    8 апреля 2009 в 15:15 | #6

    2aleks_raiden, в basex есть хороший загрузчик (jit).

  6. 11 апреля 2009 в 12:31 | #7

    LokiDi L0ck — да, точно, там есть загрузчик и разрешение зависимостей… интересно.. правда всеравно надо будет разобрать по компонентах сам екст… подожду пока 3-й версии, может с ней и начну эксперементы

  7. Дмитрий
    13 апреля 2009 в 15:36 | #8

    Не подскажете, можно ли бесплатно использовать extjs в проекте, предназначенном для сотрудников предприятия, на котором я работаю?
    Или нужно покупать лицензию?
    Спасибо!

  8. 13 апреля 2009 в 22:17 | #9

    Дмитрий, да вполне можно, насколько я понимаю.

  9. Дмитрий
    14 апреля 2009 в 08:56 | #10

    Спасибо!

Комментирование отключено.