Статья для журнала “Хакер”
Немного истории
Как повелось, история началась в одном из “гаражей”. FutureWave Software – команда программистов (состоящая всего из 6 человек) написала векторный редактор под названием “Smart Sketch” (прадедушка Flash). Сразу после выхода пакета (1995) разработчиками было принято решение добавить в пакет возможности анимации графики, и уже в мае 1996 на рынке появился “FutureSplash Animator” – пакет возможностью публиковать динамический графический контент в веб.
На данный момент на ИТ рынке уже существовало несколько технологий, позволяющих публиковать в www динамическую графику с интерактивными элементами например: Java компании Sun, Shockwave компании Macromedia и т.д. Но из-за своей сложности и недоступности среднему обывателю, эти технологии не получили широкого распространения, оставаясь уделом эстетствующих программистов.
Появившись на свет FutureSplash Animator сразу же была подхвачена рядом крупных веб проектов, остро нуждающихся в эффектной динамической графике, такими как MSN компании Microsft, The Simpsons компании Fox, Disney Daily Blast.
Компания Macromedia сразу же обратила пристальное внимание на новую технологию, поскольку она являлась прямым конкурентом Shockwave. Оценив все перспективы молодой разработки (наглядно сравнив и поняв всю безнадежность), уже в декабре 1996 Macromedia покупает FutureWave вместе с гаражом. Надо отметить, что такая же ситуация повторилась и с самой Macromedia, которую через 10 лет (в декабре 2005) поглотила компания Adobe.
Само десятилетнее развитие пакета не столь интересно, можно даже сказать больше, за 10 лет сам редактор – Macromedia Flash – претерпел минимум изменений.
Но путь, который проделала сама технология, от идеи до стандарта, занимающего собственную нишу и значимый процент www.
1997 – Flash 2 звук, поддержка bitmap;
2000 – Generator 2.0 -генерация flash контента на лету на стороне сервера;
2002 – Flash MX – поддержка видео, GUI компоненты, работа с сокетами;
2003 – Flash MX – генерация контента для мобильных устройств, 10 кратное увеличение производительности плеера.
2005 – Macromedia становится частью Adobe
2006 -выход ActionScript 3, Flash Player 9, Flex 2
Flash 9 – не за горами
Команда разработчиков, работающая над новой средой для Flash 9 (кодовое имя – Blaze), неохотно распространяется о будущих нововведениях. Но, тем не менее, уже сейчас на сайте Adobe доступна для бесплатного скачивания альфа версия компилятора.
Flash Player 9 + AVM2
ActionScript vs Javascript
Сравнительные тесты производительности ActionScript3.
тип теста JavaScript [ms] ActionScript 3 [ms] ActionScript 2 [ms]
Объединение массивов (размер 1000 элементов , 500 повторений) 250,0 303 520,4
Сортировка массива (размер 1000 элементов, 500 повторений) 781,0 414 32050,6
Объединение длинных строк (50000 повторений) 2951,2 165 327,6
Тригонометрия 120,7 5 125,4
Поиск подстроки (10000 повторений) 31,3 3 149,6
Поиск позиции подстроки (40000 повторений) 245,7 103 1988
Math.round(Math.random()*n) (40000 повторений) 113,3 7 472
Пустой цикл empty for loop (10 милионов повторений) 2781,3 25 6504,8
misc test from a JS site 1 640,0 45 810,6
MD5 – 1000 iterations 2 1411,3 95 4079,4
Результаты тестирования взяты с http://www.oddhammer.com/actionscriptperformance/set4/
Ядро ActionScript 3.0
Это следующая эволюционная ступень развития ActionScript. Это язык, близкий к Java и C#, и возможности его урезаны лишь накладываемыми на интерпретируемые на клиенте приложения.
При беглом обзоре, может показаться, что разработчики просто навели порядок в пространстве имен, добавили несколько новых библиотек, но это не совсем так! Изменения произошли в первую очередь на более глубоком идеологическом уровне!
Взяв курс на RIA разработчики оказались между двух огней – с одной стороны с бардаком в AS, нужно было что-то делать, с другой – нельзя потерять простоту, ведь именно благодаря ей – Flash завоевал сердца своей аудитории.
AS3 обладает простой и гибкостью своего предшественника AS2, но теперь это не просто кривая пародия стандарт ECMA-262, а мощный объектно-ориентированный язык нацеленный на разработку сложных и ресурсоемких приложений.
AS3 выполняется на новой виртуальной машине ActionScript Virtual Machine 2 встроенной в Flash Player 9, производительность которой в среднем 10 раз выше чем производительность AVM1 + AS2.
Обработка ошибок “на лету” [Runtime exceptions]
Существует расхожее мнение, что при работе с ActionScript 2 на поиск и исправление неявных ошибок уходит до 80% всего затраченного на работу времени. Дело в том, компиляторы ActionScript 2 проверяют синтаксис кода только при компиляции swf файла. Все неявные ошибки (например, отсутствие инициализации объекта класса), возникающие во время работы, если не приводят к зависанию – проходят тихо и незаметно.
Теперь в ActionScript 3 добавлены механизмы для обработки исключений, что позволит обрабатывать возможные ошибки на лету. Предоставляемая отладочная информация содержит информацию о стеке вызовов, исходном коде и номере строки с ошибкой.
Строгие типы данных [Runtime types]
Строгая (обязательная) типизация данных – одна из основных причин, по которой разработчикам удалось значительно ускорить выполнение ActionScript 3. Пожертвовав неопределенностью типа переменной – разработчики выиграли время и память. А проверка соответствия типа на лету (run-time) добавила еще один уровень надежности работы кода.
Упрощенная схема создания обработчиков событий [Method closures]
В ActionScript 3 реализована упрощенная модель объявления обработчика событий. Так в АS2 метод, обработчик, начисто забывал свой объект. Для решения этой проблемы приходилось использовать разнообразные громоздкие конструкции. Теперь конструкции:
myButton.addEventListener("click", someMethod);
достаточно, для того чтобы объявить реакцию объекта на событие. Функция обработчик автоматически запомнит ссылку на экземпляр своего объекта.
Поддержка Е4X стандарта для работы с XML [ECMAScript for XML (E4X)]
ActionScript 3 содержит полную реализация стандарта E4X. Этот стандарт был разработан специально, для того чтобы упростить работу с XML структурами. XML в этом стандарте представлен как native data:
//Создаем XML структуру
var myXML:XML =
<order>
<item id='1'>
<menuName>burger</menuName>
<price>3.95</price>
</item>
<item id='2'>
<menuName>fries</menuName>
<price>1.45</price>
</item>
</order>
// Обращаемся к элементам
trace(myXML.item[0].menuName); // Output: burger
trace(myXML.item.(@id==2).menuName); // Output: fries
trace(myXML.item.(menuName=="burger").price); // Output: 3.95
Эта нотация значительно сокращает объем управляющего кода. A встроенная реализация стандарта значительно ускоряет работу парсера XML.
Поддержка регулярных выражений [Regular expressions]
Поддержка регулярных выражений (по спецификация ECMA-262) на уровне ядра позволит теперь быстро осуществлять сложный поиск в больших массивах текса.
Namespaces
В ActionScript 3 реализован новый, инновационный механизм определения и управления пространством имен. В AS3 теперь можно создавать произвольные пространства имен, например, такие как традиционные спецификаторы доступа, используемыми для управления видимостью объявлений public, private, protected. Что дает возможность управлять полями видимости и избегать коллизий при работе с E4X.
Новые типы данных [New primitive types]
В ядре ActionScript 3 добавилось несколько базовых типов данных. В AS2 был только 1 численный тип Number (double float). Теперь в AS3 добавлен новый целочисленный тип int (32-bit) использование которого в целочисленных операциях (например такие как счетчики циклов) позволили ускорить значительно ускорить язык.
Другой новый тип это uint – это безнаковый 32 битный int.
Flash Player API features
Flash Player API – это набор классов и методов реализующих возможности FP посредством языка ActionScript 3. К сожалению, в этой статье недостаточно места для описания всего API, приведем лишь наиболее значимые и интересные моменты.
Новая модель событий [DOM3 event model]
В Flash Player API реализована новая эффективная модель обработки событий включающая event bubbling. Заимствованная у спецификации W3C DOM3 данная модель позволяет наиболее эффективным способом управлять и обрабатывать события, происходящие в интерактивной среде.
Новые классы для управления графикой Display List API
Sprite
Класс Sprite по аналогии с классом MovieClip реазлизует базовый набор методов для работы с графическим элементом (bitmap).
// Создаем кнопку на спрайте
import flash.display.Sprite;
import flash.events.MouseEvent;
var circle1:Sprite = new Sprite(); circle1.graphics.beginFill(0xCC0000); circle1.graphics.drawCircle(40, 40, 40); circle1.buttonMode = true; circle1.addEventListener(MouseEvent.CLICK, clicked);
// Реакция на клик
function clicked(event:MouseEvent):void {
trace ("Click!");
}
addChild(circle1);
Shape
Класс Shape реализует набор графических примитивов для создания динамической векторной графики.
// Рисуем Прямоугольник со скругленными углами
var child:Shape = new Shape();
child.graphics.beginFill(0xCC0000);
child.graphics.lineStyle(1, 0xFFFFFF);
child.graphics.drawRoundRect(0, 0, 100, 200, 5);
child.graphics.endFill();
addChild(child);
Filters
Набор классов группы filters мощнейший набор динамических фильтров
// Эффект размытия в одну строку
obj.filters.push(new BlurFilter(5, 5, 1));
Звук
В Flash Player API существенно расширенны возможности работы со звуком. Например, теперь, используя класс SoundMixer, можно получить доступ к raw данным звуковой дорожки.
// Частотный анализатор (эквалайзер)
// Автор: http://theflashblog.com/?p=181#
var s:Sound = new Sound();
var sc:SoundChannel;
var ba:ByteArray = new ByteArray();
var array:Array;
s.load(new URLRequest("mix.mp3"));
sc = s.play(0,1000);
this.addEventListener(Event.ENTER_FRAME, spectrum);
var a:Number = 0;
function spectrum(event:Event)
{
a = 0;
graphics.clear();
SoundMixer.computeSpectrum(ba,true,0);
for(var i=0; i < 256; i=i+8)
{
a = ba.readFloat();
var num:Number = a*360;
graphics.lineStyle(num/15,0x0066FF|(num << 8));
graphics.drawCircle(stage.stageWidth/2,
stage.stageHeight/2,i);
} }
На десерт
Кроме перечисленного выше, можно птметить такие аспекты как:
Новые подходы и техники из-за появившихся возможностей, например, побайтово загружать и докачивать файлы: бинарные сокеты.
Программное управление звуком.
Возможности написать адаптер к БД с помощью бинарных сокетов и подключать к базе напрямую.
Работающие кнопки Назад/Вперед в браузере и специальные классы для работы с историей.
Вложенные классы, анонимные классы.
Сильно измененный подход к работе с визуальными объектами. Теперь мувиклипы не надо аттачить или дублировать, зато можно скопировать из одного визуального объекта в другой.
Событие ухода мыши за пределы ролика.
Возможность внедрять любые объекты в ролики.
Возможность публикации исходника в теле ролика
Все это и многое другое делает работу с ActionScript намного более радостной и приятной.
Flex 2.0
Adobe Flex – технология для легкого и очень быстрого создания RIA (Rich Internet Applications). Flex – это родственная Flash технология, основанная на описании интерфейса приложения (и не только: обработчиков событий, связи источников данных с объектами и т.п.) с помощью диалекта XML – MXML. Flex приложение может компилироваться на сервере, а может – из Flex IDE, как во Flash, результатом является swf файл, исполняемый Flash Player 9.
Flex IDE основана на уже ставшей легендой универсальной открытой среде разработки Eclipse. Во второй версии Flex IDE используются не все возможности данной среды, но того, что уже есть – достаточно, для того чтобы сразу же “подсесть”. Ведь именно в Eclipse – многим впервые становится понятно, что от процесса программирования можно получать огромное удовольствие.
В основе линии продуктов Flex лежит Flex Framework – набор базовых утилит и библиотек для создания RIA. Flex Framework состоит из библиотеки классов Flex, Flex компилятора, отладчика и двух языков программирования: MXML и ActionScript 3 Adobe поставляет Flex Builder, интегрированную среду разработки (IDE) Flex приложений. Хотя Flex Builder разработан специально для работы вместе с Flex Framework, совсем не обязательно использовать именно эту связку. Вы можете выбирать в какой IDE разрабатывать приложения для Flex Framework.
MXML – основанный на XML язык описания интерфейса пользователя, используемый в Flex приложениях. MXML так же может декларативно определять не визуальные аспекты приложения, такие как доступ к данным на стороне сервера и связывание данных с компонентами пользовательского интерфейса. Подробнее см. Работа с MXML.
Контроль исполнения и манипуляцию над объектами – функциональность не доступную в MXML обеспечивается скриптами написанными ActionScript 3
Сухой остаток
В результате можно констатировать следующее, технология анимации векторных картинок в веб, за десять лет превратилась в мощный инструмент разработки. Сохранив первоначальную гибкость и простоту Flash технологии получили широчайшее распространение и практически обрели статус стандарта для мултимедийных веб приложений.
За последние пару лет технологии совершили головокружительный скачок. Опьяненные счастьем flash-программисты празднуют начало новой эры благоденствия.
Словарик
RIA – Rich Internet Application
IDE – Integrated Development Environment
SWF – формат файла исполняемого ActionScript Virtual Machine
MXML – основанный на XML язык описания структуры flex приложения
AVM – ActionScript Virtual Machine виртуальная машина для интерпретации ActionScript
AS, AS2, AS3 – ActionScript язык написания сценариев для flash сред.
FP – Flash Player
API – Application Programming Interface
E4X – Стандарт описывающий работу с XML структурами
ECMA – Стандарт описывающий языковые конструкции
DOM – Document Object Model
Ссылки
При написании данной статьи были использованы материалы со следующих веб ресурсов:
http://www.adobe.com
http://labs.adobe.com
http://www.oddhammer.com
http://theflashblog.com
http://www.novemberain.com/
и др.



0 Responses to “Flash 9”