Здесь не будет откровений, но будет простой рецепт облегчения жизни. Рецепт настоящий, хоть и взят из выдуманной книги "Все о напильниках и рашпилях для программистов старшего дошкольного возраста. Учебное пособие по быстрой отладке Flex-приложений."
indeterminate="true"
Совсем другое дело! Ощущение, конечно, не лучшее: как будто заплатил за возможность свободно дышать. Но создатели фреймворка — тоже люди...
Как вы уже догадались, эта техника пригодится вам каждый раз, когда вы захотите переписать часть Flex Framework под себя.
Да, Flash-виджеты появились в новой версии Yahoo Widgets 4.5. Добавить к этому можно только то, что Yahoo и Adobe договорились включать контекстную рекламу в PDF-документы. Ага, в PDF. Учитывая эти факты и другие Yahoo-акции в поддержку Flash Platform, легко заметить, что Yahoo и Adobe женятся всерьез и надолго.
"Флекс или не флекс?" — вот в чем вопрос. Вы знаете: чем продвинутее разработчики онлайн-проекта, тем чаще этот вопрос возникает у других разработчиков — тех, кто такой проект видит и пытается анализировать, как он сделан.
Джеймс Вард создал онлайн-сервис 'Is It Flex?', который отвечает на этот вопрос. Дайте ему URL онлайн-приложения и он точно скажет, на Flex ли оно сделано. Одна из тех ссылок, что давно сам пользуюсь, но почему-то забываю выложить — извиняюсь, если для кого-то это уже старая новость.
R00Z выложил фотки с двух флэш-мероприятий в Киеве. Первое — встреча флэшеров на Платформе Web, организованной Microsoft (моя попытка написать отчет об этом вылилась в неделю MSFT на сайте Ф. Потрошителя). Второе — встреча Flash-, Flex- и Java- разработчиков в кафе LiQuor, организованная Андреем 'JabbyPanda' Панасом.
Было очень хорошо. Кстати, в ночном поезде Харьков-Киев произошло мое первое близкое знакомство с фреймворком PureMVC, о котором я уже начал писать и скоро продолжу).
Андрей — круто, что ты все это устроил в Ликере. Руз, спасибо за фотки. Киевляне — спасибо, что вы там были, несмотря на рабочий день. Хочу в Киев.
"Где-то между Лиспом и Фортраном, иногда догоняя Ruby" — так можно назвать положение ActionScript в рейтинге самых популярных языков программирования. Там много графиков по данным разных сервисов и форумов, и результаты некоторых отличаются радикально. Тот же Lisp: на Google Code от всего лишь пятнадцатый, а на programming.reddit.com — уже второй. А вообще, для столь молодого языка само попадание в такой топлист — уже признание.
Представьте такой проект: создание, обновление, анимация, поддержка и уничтожение несложных 3D-моделей в качестве постоянной работы.
Есть: упаковка. Например: дигипак, CD/DVD-коробка или подарочная штука.
Нужно: 3D-модель с текстурами. Предусмотреть возможность легкой замены растровых текстур. Реализовать функции просмотра моделей: поворот, зум.
Заниматься этим нужно в украинском офисе, Днепропетровск или Харьков.
Интересно вот что, сколько Удивительных Единиц Зарплаты в месяц, по вашему мнению, должен получать разработчик такого проекта?
Денис Козырь создал новый математический сервис для разминки мозгов: это Archimy.com, он строит графики различной сложности. Не диаграммы, а именно графики. Двумерные и трехмерные. Воспользовашись простым синтаксисом, любой желающий сможет нарисовать математическую валентинку или даже кривую Нового Года :)
Самый простой способ разобраться с синтаксисом — это попробовать его. Пишем скрипт в одну строку и смотрим на результат:
y = sin(x)
Ожидали получить график синуса, а получили трехмерную поверхность? Это нормально: координата z не была указана явно, поэтому она была принята за неявно заданный параметр. А чтобы получить двумерный график, напишем такой скрипт:
z
y = sin(x) z = 0
scale
(Читайте дальше, или сразу идите напрячь / развлечь мозг математикой на Archimy.com. Проект совсем молодой, но интересный :-)
# center xcenter = 0 ycenter = 0 zcenter = 0 # scale scale = 5 # fun y = sin(x) z = 0
Так можно задавать координаты функциями другого параметра (любого из p,q,t). Например:
# t-parameter tmin = 0 tmax = 2*pi # fun x = 10 * sin(t) y = 10 * cos(t) z = 0
tgrid = 100
С синтаксисом разобраться будет не сложно, тем более на сайте есть десяток примеров на все случаи жизни.
Дорогой Ростислав, Пишет тебе твой сайт Флэш Потрошитель. Позволь от всей базы данных поздравить тебя с очередным внезапно наступившим днем рождения. Теперь тебе официально 29 лет. Это интересный возраст, в котором ты начинаешь понимать, как мало ты понимал раньше и помнишь, что такое уже было (но все равно). Возможно, дело не в возрасте. Тем не менее, именно сейчас тебе становится ясно, как интересно все начинает оборачиваться, как много предстоит сделать и еще больше — сознательно проигнорировать. И эта открытка от Александра Бацуева уместна как никогда.
Желаю: чтобы ты поумнел, но не поскучнел; и следующий свой день рождения встретил вне любого дебага, сколь интересен бы он ни был (учти, это и в моих интересах тоже! :-)
Я почти не помню день 19 ноября 2007 года. Был в каком-то необычайно кромешном дебаге. Но именно 19 ноября 2007 года вышел долгожданный релиз Mozilla Firefox 3 beta 1 — спецверсия для разработчиков, чтобы потестить. Пока он скачивается, я написал этот текст в Firefox 2.0.0.9 >досюда<.
А вот я пишу уже из Firefox 3.0b1. Начну с главного: стал ли он быстрее? По-моему, да. По меньшей мере, я могу сейчас писать это, не дожидаясь загрузки остальных 87 закладок (F3 подхватил все настройки своего старшего брата). Во втором нужно было подождать.
Резюмируя вышевосторгнутое: Firefox 3 мне очень нравится. Хотя анимацию табов могли и на флексе сделать. Как все-таки жесток этот мир.
О разработке: Firefox 3 работает на обновленной платформе Gecko 1.9. Исправлено 11 000 багов, переписано 2 000 000 строк кода. Теперь ясно, почему так долго выходил.
Если вы надумаете скачать это чудо браузеростроения — учтите, что Firefox 3 заменит ваш Firefox 2 бесповортно. И я, как человек уже прошедший через, считаю так: не стоит этого бояться. Вообще: не стоит ничего бояться, даже публичных выступлений.
Я — обратно в дебаг.
UPDATE: Писал-писал, а оказалось — многое уже написано, и людьми не в пример умнее автора. Читайте краткий технический обзор Firefox 3 Beta 1 на Linux.org.ru.
Поздравляем Дэна Иванова с днем рождения, желаем счастья в личном блоге :)
Подсмотрел у Кости Ковалева: Александр Комлев из QA-отдела Rambler'а выложил свою презентацию с ClientSide 2007 о тестировании интерфейсов насыщенных флэш-приложений. Рассматриваются существующие инструменты тестирования и проводится их сравнительный анализ. Предлагается собственное решение: более универсальное, основанное на использовании ExternalInterface и предполагающее более высокий уровень квалификации составителя тестов. Впрочем, вот сама презентация:
Напишите Александру, что вы об этом думаете.
Я выражаю острейший респект всем, скрестившим умы в концептуальном обсуждении официального обзора обновленного языка сети ECMAScript4. Идущие до сих пор комментарии не оставляют сомнений: эта тема интересна читателям Потрошителя (и меня это очень радует).
Друзья! Поступила специальная инфа для любителей будущего малой и средней дальности: играем с ECMAScript4, видео и код в блоге Джона Резига, автора jQuery. Почувствуй вкус обновленного языка! (гм, "вкус языка" — это как звук уха или запах носа!)
Ну, а самые резвые могут скачать по прямой ссылке ECMAScript 4 Reference Implementation рабочую консоль для экспериментов с ECMAScript4 и пощупать его непосредственным образом. // По наводке св. Колина.
Микро-напоминание самому себе: дедлайн кратчайшего флэш-проекта начинает критическое сближение с датой 31 декабря. Начиная с сегодняшнего дня и до 27 декабря крайне осторожно планируй новые проекты. Лучше просто отметай любые предложения. В противном случае новогоднюю ночь рискуешь провести в полном дебаге. Этот вариант ничем не не хуже иных, но только в том случае, если ты хорошо знаешь, на что идешь. Готовься к новому году сейчас! Письмо самому себе, из глубочайшего дебага.
С 6 по 27 ноября проходит народное голосование «Премии Рунета - 2007». Приятной неожиданностью стал прорыв в десятку лидеров онлайн-игры TimeZero, игровой мир которой полностью реализован на Flash. Сейчас этот проект маячит на 6-ом месте, но до конца голосования все еще может кардинально измениться.
Поддержать братьев-флэшеров, а зодно и способствовать мировому доминированию любимой технологии можно в том самом народном голосовании Премии Рунета (голосовать можно каждые 24 часа).
На собственном опыте убедился, сколь ответственно нужно работать с AS3-типом uint в ситуациях возможного присвоения ему отрицательного значения. Сразу же к чести разработчиков компилятора AS3 отмечу, что он отсеивает часть таких ситуаций и выдавает предупреждение:
uint
var ui:uint = -10000; trace("ui = " + ui);
Но не все такие случаи удается отсечь компилятором. Вот пример ошибки, которая успешно компилируется, но код не работает как ожидается, формально являясь правильным:
var rect:Rectangle = new Rectangle(-1, 1, 1, 1); var rectX: uint = rect.x; // !Попытка присвоить значение -1 беззнаковому целому! var rectY: uint = rect.y; trace("Rectangle X = " + rectX); trace("Rectangle Y = " + rectY);
UPD: Давно хотел сослаться на эту толковую статью: Василий Нужа о типе uint в ActionScript.
В комментариях к вакансии флэш-разработчика для российского представительства компании Communigate Systems был задан вопрос о конкретной зарплате. Я запросил информацию у работодателя. Оплата труда составляет $2-5k+ в зависимости от результатов собеседования. Пожалуй, я процитирую ответ:
За комментариями я не следил - не знаю как это делать автоматически, поэтому был не в курсе, иначе бы отреагировал гораздо раньше. К сожалению, пока никто не написал. Будьте добры, напишите вилку $2-5k+ по результатам собеседования.
К сожалению, пока никто не написал.
Будьте добры, напишите вилку $2-5k+ по результатам собеседования.
Напомню контактный емэйл: hrundik [жэвотное] stalker.com.
[Рост: Рву волосы, что не настроил уведомления о комментариях должным образом.]
Мистер Flastar делает сайт, выкладывая на нем свои флэш-находки, а Флэшист пишет очень и очень достойный блог про Flash и более того — предлагает задать ему вопрос и получить ответ. Спросите что-нибудь полезное.
В этом релизе Flash Develop 3 beta 4: не такой дружелюбный автокомплит, как в Beta 3. Степень дружелюбия снижена по просьбам трудящихся. Хотя мне предыдущий тоже был ничего. И еще одно хорошее дополнение: появилась полноценная панелька Tasks, что парсит в вашем коде все TODO-шки и выводит их аккуратным списком. Я заново влюбляюсь во Flash Develop! Кстати, какие ваши любимые в нем плагины и рабочие настройки?
Костя Ковалев, сделав на ClientSide2007 два доклада, написал отчет об этой конференции. К отчету приложены: многа пазитифных вибраций, несколько супер-гипер-ссылок, фотография с пивом, флэшерами и флэшерками, а также две презентации с докладами Кости: "Сравнение современных технологий для создания насыщенных интернет-приложений (RIA)" и "Adobe Integrated Runtime (Adobe AIR): платформа для создания десктопных RIA". Идите по ссылке, читайте, качайте, радуйтесь. Костя также упоминает, а Слон в Сапогах пишет отдельный пост о том, что Adobe User Group Russia — уже на линии горизонта!
Друзья, я предлагаю ссылаться на Костин проект щедро и повсеместно.
ActionScript Toolkit for Rich Applications — так расшифровывается название "ASTRA" (создатели тактично обошли стороной проблему "Internet vs. Interactive"). ASTRA — это набор Flash- и Flex- компонентов, бибилотек и готовых приложений. В данный момент доступны для скачивания:
+ ASTRA Flash Components Library, а именно: флэш-компоненты Tree, Menu, TabBar, AutoComplete и Charts. + ASTRA Web APIs Library (много всего яхушного, есть Yahoo! Maps AS3 Communication Kit).
Все бесплатно, OpenSource (BSD, лицензия) и все это — дело рук Yahoo Flash Platform Team, появившейся 17 Августа 2007 года.
Российское представительство компании CommuniGate Systems ищет классных программистов для работы над интересными проектами, существующими и новыми.
Требования к кандидатам:
О нас: офис в Москве, отличная зарплата (в рынке и выше), свободный график и небольшая дружная команда.
Присылайте резюме с рассказом о себе на hrundik [жэвотное] stalker.com.
UPD: Я узнал размер зарплаты у работодателя, его ответ: $2-5k+ в зависимости от результатов собеседования.
Начиная с сегодня, 7 ноября — не только День Предыдущей Конституции (увы!), но и праздник для большой части OpenSource-сообщества. Ведь ровно год назад, 7 ноября 2006 г. Adobe отдала Mozilla Foundation исходники виртуальной машины AVM2, на которой работает ActionScript3 и будет работать... а об этом завтра. Я допишу черновик со многими буквами и там всеми известными мне детялями поделюсь. С первым годом, Тамарин!
Продолжая экспериментировать с производительностью Flash Remoting во Flash Player 9, я попробовал избавиться от класа Point, используемого для описания элементарной точки в массиве координат. Я предположил, что на описание типа данных расходуется значительная часть трафика, а когда точек действительно много, то можно попытаться сэкономить трафик, заменив массив с объектами типа Point массивом с простым набором чисел, где координаты x и y просто попеременно идут друг за другом.
Point
x
y
Эффект от детипизации был не слишком высокий: вместо 19 Кб данные стали весить 18 Кб (для 4000 точек). Вопрос экономии на типах данных во Flash Remoting практически закрыт: похоже, здесь много не выиграешь. Хотя стоит проверить это еще раз — на огромных массивах.
Мне выпал шанс грубо сравнить производительность Flash Remoting во Flash Player 9 с передачей XML-данных. Рабочие условия: есть гео-данные в формате GML (XML), описывающие границы районов города в виде полигонов. Общее количество точек-вершин полигонов — около 4000. Размер загружаемого XML равен 244 Кб, а со стандартным GZIP-сжатием — 49 Кб. Требуется сократить размер загружаемых данных и время их загрузки.
С использованием Flash Remoting размер загружаемых данных составил 44 Кб, а с GZIP-сжатием — 19 Кб. Это в 2,5 раза меньше размера XML, приблизительно настолько же быстрее оказалась и загрузка Remoting-данных. Кроме того, за счет обмена в Remoting типизированными геометрическими объектами удалось избавиться от некоторых шагов по разбору гео-данных из XML, так что выросла и скорость отрисовки загруженных полигонов.
Но у Flash Remoting, похоже, есть свой минус. Загруженные данные не кэшируются между сессиями, поскольку работа Remoting идет через POST-запросы. Думаю о создании своего кэша во Flash Cookies, но он ведь тоже не резиновый, а объем данных весьма большой. Может, есть другие варианты?
По наводке Дениса 'Q-Zma' Кузнецова увидел Календарь IT-мероприятий в Москве. Есть интересные, но нет наших, кроме ClientSide2007. Календарь составлен автором сайта про джавку, j2ee, BEA и IBM.
Рабочая группа TC39-TG1 выпустила обзор нового стандарта ECMAScript 4 (ES4) — "языка сети", или, более конкретно, фундамента языков JavaScript и ActionScript (приятно отметить, что в данном документе слово "ActionScript" встречается неоднократно, в том числе и при упоминании нового механизма верификации программного кода в ES4).
Напомним, что предыдущей версией стандарта был, основанный на прототипах ES3. Это сегодняшний JavaScript 1.x. В новом стандарте ES4 учтены требования, возникшие при разработке крупных проектов, к которым относятся многие AJAX-, Flash и Flex-приложения. Одним из условий стандарта ES4 является совместимость с предыдущим стандартом, ES3.
class
interface
package
namespace
Vector
Отсылаю вас к обзору ECMAScript4 — работать мне надо.
let
let const
let function
(int,string)
int
string
like
&&=
||=
cast
Map
ControlInspector
toJSONString
string.parseJSON
hashcode
Приятно отметить авторство стандарта ES4: "Copyright © 2007 Adobe Systems Inc., The Mozilla Foundation, Opera Software ASA, and others."
Недокументированная фишка Flash Player 9. Создав два объекта LocalConnection c одинаковыми именами и предупредив возникновение исключения блоком "try..catch", вы заставите сборщик мусора (Garabage Gollector, не путать с сайтом Бармалея) собрать мусор и выбросить его. Проще говоря, это брутальный способ освободить память, занимаемую неиспользуемыми переменными вашего флэш-приложения:
LocalConnection
try..catch
try { new LocalConnection().connect('foo'); new LocalConnection().connect('foo'); } catch (e:*) {} // Сборщик мусора пройдется по вашей флэшапе после второго вызова и удалит все неиспользуемые переменные.
По приглашению Райана Стюарта попал в AIRApps Wiki. Cейчас на ее главной странице размещено 117 AIR-приложений. Вы тоже можете добавить туда свою работу — пароль там же. Ну вот, одним черновиком меньше. До сих пор не могу вспомнить, что помешало мне дописать и выложить эту запись три месяца назад. А, вспомнил! Я ждал, пока в списке будет 100 ЭЙР-приложений. Идиот...
Только что прошелся по блогу и обнаружил, что 97 записей до сих пор находятся в статусе черновиков: их никто кроме меня не видел. Некоторые уже безнадежно устарели. Нужно быть решительнее. Было. (О! На выходных буду доводить до ума и публиковать стоящие черновики.)
Вы любите Flash Remoting во Flash? Используете его простоту и скорость? Тогда вы наверняка заметили, что для Flash CS3 набора Remoting Components нет и не предвидится. Почему, я не знаю; зато знаю, как его вернуть. Оказывается, во Flash CS3 никакие специальные компоненты для ремоутинга вообще не нужны. Достаточно правильно использовать AS3-класс NetConnection, как подсказывает Оскар Трельес: создаем класс-обертку вокруг NetConnection и называем его RemotingService. В нем задаем кодировку ремоутинга (AMF0/AMF3) и устанавливаем соединение. Работает хоть с AMFPHP, хоть с Fluorine под .NET.
NetConnection
RemotingService
Далее - код, пример использования и одна проблема, с которой я столкнулся.
package { import flash.net.NetConnection; import flash.net.ObjectEncoding; public class RemotingService extends NetConnection { function RemotingService(url:String) { // Set AMF version objectEncoding=ObjectEncoding.AMF3; // Connect to gateway connect(url); } } }
package { import flash.net.Responder; public class RemotingGateway { private var gatewayURL:String; private var rs:RemotingService; function RemotingGateway(strServicePath:String = null) { trace("Init remoting, path = " + strServicePath); init(strServicePath); } private function init(strServicePath:String = null) { gatewayURL = strServicePath; rs=new RemotingService(gatewayURL); } public function testRemoting():void { var responder:Responder=new Responder(onResult,onFault); rs.call("Web.Services.FlashProxy.Test",responder, {array:new Array(0,1,2)}); } private function onResult(result:Object):void { trace("Remoting Result: " + result); } private function onFault(fault:Object):void { trace ( "Remoting fault type:\t" + fault.type + "\nFault code:\t" + fault.code + "\nFault level:\t" + fault.level + "\nDescription:\n\t" + fault.description + "\nDetails:\n\t" + fault.details ); } } }
var remotingGateway:RemotingGateway = new RemotingGateway("URL — ПУТЬ К СЕРВИСУ"); remotingGateway.testRemoting();
Работает!
rs.call("Web.Services.FlashProxy.Test",responder, {array:new Array(0,1,2)})
{array:new Array(0,1,2)}
rs.call("Web.Services.FlashProxy.Test",responder, 0, 1, 2)
Could not find a suitable method with name Test. Details: at com.TheSilentGroup.Fluorine.MethodHandler.GetMethod(IApplicationContext applicationContext, Type type, String methodName, IList arguments) at com.TheSilentGroup.Fluorine.Filter.LibraryAdapter.Invoke(IApplicationContext applicationContext, AMFBody amfBody)
at com.TheSilentGroup.Fluorine.Filter.LibraryAdapter.Invoke(IApplicationContext applicationContext, AMFBody amfBody)
Ошибка выдается, хотя серверный метод ждет несколько чисел, а не одну переменную.
В чем причина такого поеведения? Может, я что-то делаю не так? Не та версия ремоутинга? Бьюсь второй день.
UPD: Похоже, мне удалось обойти проблему, используя AMF0 в настройке класса RemotingService: objectEncoding=ObjectEncoding.AMF0;. Но ведь Fluorine умеет работать с более производительным AMF3! Как склонить его к нормальной работе с AMF3?
objectEncoding=ObjectEncoding.AMF0;
Друзья, данная часть цикла статей о флэш-фреймфорвке PureMVC должна называться "Как обмениваются Оповещениями участники PureMVC". Но комментарии к предыдущей части, "Фасад — ядро и лицо фреймворка PureMVC" навели на мысль, что стоит подробнее выяснить назначение и концептуальное устройство PureMVC, прежде чем переходить к более конкретной теме. Поэтому сначала еще немного о цели PureMVC, а также о крупных частях его тела: о Модели, Представлении, Контроллере и Фасаде.
В PureMVC Модель, Представление и Контроллер реализуются как три одноименных класса-синглтона: Model, View, Controller. В то же время, PureMVC организован так, что разработчик может использовать данные классы прозрачно, с помощью Фасада, тоже Синглтона. Этот класс знает каждого из трех главных участников системы. Такой Фасад можно назвать Центральным Фасадом приложения.
Теперь коротко о каждом из трех главных игроков-синглтонов Pure MVC (Синглтон — это класс, гарантирующий существование только одного своего экземпляра, поэтому его также называют Одиночкой).
Так в PureMVC Модель отделяется от Представления.
Синглетоны Модели, Представлениея и Контроллера в PureMVC, по сути, не делают ничего, кроме выдачи ссылок на своих представителей. Именно поэтому подавляюще бОльшая часть кода при реализации PureMVC-приложения пишется именно внутри этих представителей: Посредников (представляют модель данных), Медиаторов (представляют вид приложения) и Команд (дают управление).
Разработчик PureMVC-приложения получает всю необходимую функциональность, просто расширяя Фасад PureMVC своим классом, таким образом получая Конкретный Фасад приложения. И уже через этот Конкретный Фасад происходит работа с Конкретными Посредниками, Медиаторами и Командами — то есть с данными приложения и его видом, а также общее управление им.
Почитайте о Фасаде в PureMVC еще раз. Если стало понятнее, то эта запись не прошла зря.
Мне приснился сон, из которого я запомнил: - Что Сэмюэль Аглесиас выпустил свое долгожданное детище и назвал его Saffron 13. - Что вышла новая Флексапа, позволяющая создавать микро-мультики с самим собой и зашаривать в сеть. - Что Шаггисмайл сделал минималистичный дизайн сайта. - Что я выспался. - Что Инжун — таки индеец и написал про Flash Player 12 узелковое письмо.
Из всего этого сыблось только предпоследнее... а вообще мне очень редко снятся сны, я каждому очень рад.
Если бы Тема Лебедев занимался флэш-программированием, он бы порадовался этому приложению для тонкой настройки антиалиасинга шрифтов (с исходным кодом) и накатал бы еще один замечательный параграф об экранной типографике.
Но поскольку Тема занимается каким-то дизайном (что это?), то придется нам разбираться с тонкостями антиалиасинга надписей самостоятельно.
Как вы знаете, во Flash Player 8 появилась возможность задать текстовому полю специальный режим анти-алиасинга, "advanced". В этом режиме у текстового поля появляются три новых свойства: sharpness, thickness и gridFitType (Dan, спасибо за уточнение).
sharpness
thickness
gridFitType
А с выходом Flex 2 эти свойства дали начало новым CSS-стилям: fontSharpness, fontThickness и fontGridFitType — таким образом, флекс-разработчики могут контролировать эти параметры через обычный CSS-код.
fontSharpness
fontThickness
fontGridFitType
Играя этими свойствами, можно добиться самых разных, порой неожиданных надписей. Попробуйте: продвинутая настройка свойств сглаживания для флэш-шрифтов. Демка очень наглядная и ее можно смело заносить в свой инструментарий, как и исходники над ней.
Вчера в обсуждении экономии памяти за счет использования типа int вместо типа Number Вадим Войтюк поднял интересный вопрос: сколько памяти уходит на использование самого класса PointVO, участвовавшего в тестировании?
Number
PointVO
Я выяснил, сколько памяти отъедают экземпляры класса PointVO. Без PointVO расход пямяти на хранение двух миллионов переменных типа Number составляет 30Мб, что почти в два раза меньше 53Мб — памяти, расходуемой с использованием PointVO. Время — 618 Мсек против 1226, т.е. в 1.9 раза быстрее без использования класса PointVO. Чистая разница расхода памяти: 53Мб - 30Мб = 23Мб.
То есть: 23Мб памяти расходуется на хранение одного миллиона экземпляра классов PointVO, каждый из которых имеет два свойства x и y типа Number.
А для типа данных int расход памяти без использования PointVO составил 13Мб, что в три с половиной раза меньше 45Мб для случая с использованием PointVO. Время — 441 Мсек против 1226, т.е. быстрее в 2.7 раза без PointVO. Чистая разница расхода памяти: 45 - 13 = 32Мб.
Возникает интересный вопрос: почему в случае с типом int чистая разница расхода памяти составила 32Мб, а в случае с типом Number — всего 23Мб? Возможно, потому, что класс PointVO для хранения переменных x и y типа int использует для них дополнительную обертку вокруг типа Number, как пишет Василий здесь? А массив, значения которого не типизированы, никаких оберток не использует, так? Получается, на два миллиона оберток типа int вокруг типа Number уходит 9 Мб оперативной памяти. То есть приблизительно 5 байт на обертку.
Далее — исходный код теста для интересующихся.
var startTime:uint; var memory:uint; var time:uint; var memoryAverage:uint; var timeAverage:uint; var cycles:uint = 10; var pCount:uint = 1000000; var i:uint; var j:uint; var pArray:Array; var randCoord:Number; for(j; j < 10; j++) { startTime = getTimer(); pArray = new Array(); for(i=0; i { randCoord = Math.random() * 10000000 / 10000; pArray.push(randCoord); /* pArray.push(int(randCoord)); */ pArray.push(randCoord); /* pArray.push(int(randCoord)); */ } memoryAverage += memory = System.totalMemory; timeAverage += time = getTimer() - startTime; trace("Memory: " + memory); trace("Time: " + time); } trace("Memory average: " + Math.round(memoryAverage / cycles)); trace("Time average: " + Math.round(timeAverage / cycles)); trace("Type: " + (pArray[0] is int) + " var: " + pArray[0]);
Fcuk. Я не вижу возможности попасть 6-7 ноября в Москву на СlientSide2007. А вы, если можете, попадите. Там Дмитрий Поклонский (ссылка?), Иван Дембицкий и Костя Ковалев расскажут про кривые Безье во Flash, про работу с XML и про создание стандалонных Flash-приложений. Будет проведено сравнение современных RIA-технологий (Slight?) и обзор возможностей Adobe AIR. А еще будет много всего не про флэш, читайте программу конференции Client Side 2007 и непременно зайдите в обсуждение у Костантинера, у него там не только с подробностями, но и со ссылкой на бурную дискуссию о вреде пафоса в составе вступительных слов. С чем я не согласен и сейчас выражу свое несогласие.
Желаю всем с пользой провести славное время на ClientSide2007. Зажигай!
Совсем древнее: 17-20.09.2002, 23-30.09.2002, 01-04.10.2002, 07-11.10.2002, 14-19.10.2002, 20-26.10.2002, 27.10-02.11.2002, 04-08.11.2002, 11-16.11.2002, 18-23.11.2002 25-30.11.2002, 02-07.12.2002, 09-14.12.2002 Сайт заработал 17.09.2002