Flash Ripper RSS Readers

Ростислав Сирык: PureMVC в картинках, доклад c UAFPUG-1

Продолжаем выкладывать презентации с UAFPUG-1 в порядке изложения докладов на самой встрече.

Предупреждение: материал представлен "как был". Мы решили, что лучше выложить презентации такими сейчас, чем выложить их слишком поздно или не выложить вообще.

Итак, презентация вторая — от Ростислава '_rost' Сирыка. У нее есть особенность: презентация оптимизирована под устный доклад, поэтому не серчайте, если мало буков (зато много ссылок :):

Скачать файл презентации. Продолжение следует.

См. также первую презентацию: Эльдар Прилуцкий, Событийная модель AS3.0 и втоарую: Денис Папазов, Flash Media Server 2 и новое в FMS3.

Писал Rost, 26 Март 2008 16:39

Найдены баги:

Молодца!

injun #576871 - 26 Март 2008 17:23

Да... больше про рефакторинг, чем про PureMVC, придется делать вторую часть :)

Рост - 26 Март 2008 17:38

А по какому принципу идет подгрузка, как то квадратами.
И еще, какие используется приемы избавления от тормозов, при большом кол. объектов при драге и тд..
если это не секрет ;)

Vee - 26 Март 2008 19:55

Это не секрет и малая часть этого рассказывалас собственно на встрече (но очень сжато: и даже так я не уместился в отведенное время).

Если коротко:

- Подгрузка идет слоями (19 шт), деленными на квадраты (я назвал их Patches, хотя стоило назвать Tiles), а квадраты поделены на собственно объекты.
- По этому же принципу идет рендеринг / показ / сокрытие подгруженного.

- Приемы избавления от тормозов:
1. Карта растрируется перед каждым перетаскиванием (тащим растр, а не вектор).
1.1 Переключается качество сцены для перетаскивания: stage.quality = StageQuality.LOW / HIGH
2. Интерактивные объекты карты (а таковым может быть любой) не работают с событиями -- за все события отвечает один объект, а именно сама карта.
3. Форсируется сбощик мусора для освобожения памяти.
4. Для всех addEventListener - используются weak references:
newPoint.addEventListener(MouseEvent.CLICK, onPointClick, false, 0, true);
5. Для всех спрайтов (объектов карты) по умолчанию отключены mouseEnabled, mouseChildren, buttonMode и tabEnabled -- равны false.
6. Для всех словарей также используюится Weak References -- new Dictionary(true);
7. Для отображения адресов используется собсвенная реализация Bitmap fonts -- все адреса это не текстовые поля, а именно генеренные картинки.
8. Прячутся выходящие за пределы экрана квадраты карты / объекты втутри квадратов карты.
9. Используются типы ints/uints вместо Number -- для оптимизации памяти.
10. Для отрисовки названий улиц (текст вдоль кривой) используются классы проекта Bezier.ru -- очень помогли, буквально спасли этот функционал.

Есть еще несколько оптимизаций, и я вижу, что надо писать отдельную статью и делать отдельный доклад о них.

Наверное, я так и сделаю )

Рост - 26 Март 2008 20:18

> 1. Карта растрируется перед каждым перетаскиванием (тащим растр, а не вектор).
пробовал тоже так делать, но не реально растет используемая память (доходило до 300МБ и более).
мне приходилось применять cacheAsBitmap=true для каждого объекта, к родителю применить не мог так как его размеры быль больше 2880.
> 3. Форсируется сбощик мусора для освобожения памяти.
а это как?
> 8. Прячутся выходящие за пределы экрана квадраты карты / объекты втутри квадратов карты.
примерно тоже так делал. подписывал все объекты (dispatcher) и каждый драг опрашивал на hitTestObject экрана, то что true отображал и cacheAsBitmap остальное обратное. может можно как то оптимальнее?

Vee - 26 Март 2008 22:08

>> 1. но не реально растет используемая память (доходило до 300МБ и более).

Скорее всего дело в том, что ты явным образом не удалял битмапДату. Нужно делать

if(bmpMap != null) { bmpMap.dispose() };

каждый раз, когда "старая" битмапа тебе уже не нужна (у меня это происходит каждый раз при обновлении данных).

>> 3. Форсиование сборщика мусора:

Это "незаконный" хак с созданием двух одноименных локальных соединений (не люблю хаки):
private function tryRemoveGarbage():void
{
try
{
new LocalConnection().connect('pleaseRemoveGarbage');
new LocalConnection().connect('pleaseRemoveGarbage');
}
catch (e:*)
{
}
}

Кстати, у меня этот код оказался закомментированным -- то есть данная карта сейчас работает и без этого хака. Так что этот третий пункт можно уже вычеркнуть :)

> 8. Прячутся выходящие за пределы экрана квадраты карты / объекты втутри квадратов карты.

Я думаю, что голая математика оптимальнее. Я использовал такой подход: есть viewRect: Rectangle, описывающий видимую область экрана. А каждый квадрат карты имеет свой thisRect: Rectangle, описывающий его габариты. При перетаскивании карты проверяется на пересечение этих Rectangle'ов:

isEnabledInView = thisRect.intersects(viewRect);

если isEnabledInView == true, то как минимум visible = isEnabledInView; кроме этого, может потребоваться рендеринг объекта, если он еще не был загружен.

Рост - 27 Март 2008 11:32

Из презентации понятно только то, что PureMVC - это типо круто.
И снова имел возможность помедитировать на Чисто Диаграмму (она у меня почему-то всё время ассоциируется с множеством Мандельброта).

Но вот что это такое, с чем его едят и с чего вообще начать - так и не понял.

С нетерпением жду следующую презентацию - "PureMVC для тупых".
Предлагаю сделать на флеше - чтобы не просто статичные кадры были, а всякие фигулинки летали, копошились и прыгали, чтобы продемонстрировать, что вообще куда идёт и кто кого использует.

// взрывающийся вертолет не обязательно

Dan - 27 Март 2008 11:33

Dan, твоя критика совершенно уместна. К сожалению, в этот доклад я попытался слишком много втиснуть. По времени рассказ о рефакторинге занял большую половину, а еще нужно было рассказать о самой карте, так что на сам PureMVC осталась приблизительно треть времени. Хотя он нем я все же рассказал практически все -- но именно рассказал ("презентация оптимизирована под устный доклад").

Так что будет еще одна презентация. Не для тупых, а для заинтересовавшихся, и оптимизированная под собственно изучение вопроса.

Идея с анимацией хороша (я тоже об этом думал).

А диаграма была использована как коврик для медитации :)

Рост - 27 Март 2008 11:43

> на сам PureMVC осталась приблизительно треть времени.
Рост, а тебя не затруднит подготовить полноценный доклад, ну чтоб монументально так? :)

injun #576871 - 27 Март 2008 15:52

ЗЫ: а то тема больно интересная! :)

injun #576871 - 27 Март 2008 15:55

injun, в данном случае попытка монументальности мне дорого обошлась -- начал аж с необходимости рефакторинга, продолжил самим рефактрингом, на этом немного застрял -- в результате не успел.

Поэтому просьба: уточни, какие конкретно моменты монументальности тебя интересуют, я постаряюсь это _очень учесть при составлении монументального доклада. Именно твои соображения / вопросы интересуют оч сильно, так что пиши все, что придет в голову (плиииииз).

Рост - 27 Март 2008 20:10

Ну да, меня как раз и интересует (наверное не меня одного) и сам рефакторинг и дисциплина разработки на PureMVC. Я имею ввиду следующее: трудозатраты по полному/частичному преобразованию внутренней структуры с ... на pureMVC; юнит-тестирование (FlexUnit, AsUnit) в частности, и вообще регрессионное тестирование; паттерны (вообще отдельно интересная тема); общие отличия ООП от других парадигм - к примеру, от аспектно-ориентированного программирования (Fling, AIoC) в сравнении; полный цикл разработки/рефакторинга... Ээээ, ну вот примерно это интересует. :) Ну это пожалуй будет супер-монументальный труд. :)

injun #576871 - 27 Март 2008 22:40



Это запись из категории 'PureMVC'. 10 еще cвежих:

Архивы по категориям:

3D-18, Adobe AIR-30, Animation-1, Apache Ant-1, Architecture-1, ARP-1, Art-25, Articles-26, AS3-52, Books-7, Business-3, Cairngorm-2, CI-1, Classes-10, Coding-30, Community-113, Components-19, Contests-28, Cool-Job-5, Debug-18, Design-26, Development-84, EMO-1, Events-13, Extensions-2, FAQ-8, FDS-1, Flash and html-5, Flash Player-35, Flash Updates-8, Flash-scene-1, flash10-4, FlashLite-2, Flex-30, Flex 2-80, Flickr-1, FMS-1, FPUG-46, frameworks-1, Games-11, Good Job!-35, HaXe-14, Health-2, Humor-10, Ideas-13, JavaScript-1, Job-26, JSFL-8, Links-2, Linux-1, Maps-1, Math-8, Money-11, MXML-1, Open Source-15, Optimization-2, Patterns-2, Personalities-27, Politics-1, Preloading-3, Productivity-9, PureMVC-10, Pv3d-1, Rafpug-4, Red5-3, Remoting-11, Resources-21, Ruby-6, SAAS-1, Security-11, SEO-8, Silverlight-5, Sound-3, Strategy-120, Tamarin-1, Tools-113, Training-2, Trash-8, URAFPUG-13, Urgent-1, Usability-6, Video-6, VoIP-5, Wallop-1, Wishlist-2, Архив всех записей (большой)

За последние месяцы:

Июл 2008: Международная встреча разработчиков URAFPUG завершена, URAFPUG - трансляция студии Flex-фреймворка Mate, весь Июл

Июн 2008: Попытка предварительных выводов о встрече аниматоров, Онлайн трансляция встречи аниматоров в Донецке, весь Июн

Май 2008: Если 3D, то по-взрослому: официальный запрос в Adobe по поводу контроля над мип-маппингом. Нужна ваша поддержка!, В этом году «Russian Flash Awards» пройдет в «космическом стиле», весь Май

Апр 2008: Программирование под флэш платформу. Cтатья (местами спорная), Advanced Flash Components бесплатно раздает все свои AS2-компоненты, весь Апр

Мар 2008: Зарплаты программистов в 2007 году, FlashPhone как технология года? Технология года? В Рунете?, весь Мар

Фев 2008: ЙА ФПУГ — регистрация на первую встречу UAFPUG продолжается, Закулисы Flex и секрет успеха опенсорс-проекта, весь Фев





Примечания:
Статус документа
: в процессе
   2002-2007 Производство: Рост Прибыли · О проекте · Подписка на новости (RSS)