Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Оптимизация dispatchEvent (http://www.flasher.ru/forum/showthread.php?t=206572)

Rivexe 12.02.2014 17:19

Оптимизация dispatchEvent
 
Пара глупых вопросов, но может кто подскажет. Есть экземпляр класса, который при определенный условиях отправляет событие
Код AS3:

dispatchEvent(new SomeEvent(SomeEvent.SOME_TYPE, this))

Имеет ли смысл производить такие оптимизации:
1. Перед отправкой события проверять имеет ли объект слушатель для данного типа события, дабы не стрелять в холостую:
Код AS3:

if(hasEventListener(SomeEvent.SOME_TYPE));
        dispatchEvent(new SomeEvent(SomeEvent.SOME_TYPE, this));

2. Кешировать событие в переменную и рассылать только его, дабы не мучить gc
Код AS3:

private var _event:SomeEvent = new SomeEvent(SomeEvent.SOME_TYPE, this);
...
private function someMethod():void
{       
        dispatchEvent(_event);
}

или это все напрасно и не имеет смысла?

samana 12.02.2014 17:34

p.s.Я не по теме, просто заметил что вы передаёте this в параметр, где надо указывать наличие всплытия (bubbles), true или false.

Akopalipsis 12.02.2014 17:34

По первому вопросу ответ очень прост - стоит, так-как проверить более быстрее, чем создать объект.

Rivexe 12.02.2014 17:43

Цитата:

Сообщение от samana (Сообщение 1159662)
p.s.Я не по теме, просто заметил что вы передаёте this в параметр, где надо указывать наличие всплытия (bubbles), true или false.

Все норм, SomeEvent это кастомное событие расширяющее стандартный Event, вторым параметром передаются необходимые данные, в данном случае просто ссылка на экземпляр класса, а уже третьим и четвертым идут bubbles и cancelable.

samana 12.02.2014 17:43

Но hasEventListener проверяет текущий объект, а на событие может быть подписан кто угодно, намного выше (parent-ы). Не обязательно текущее событие ловит именно тот объект, который его рассылает.

Rivexe 12.02.2014 17:46

Цитата:

Сообщение от Akopalipsis (Сообщение 1159663)
По первому вопросу ответ очень прост - стоит, так-как проверить более быстрее, чем создать объект.

Спасибо. Именно это и интересовало что менее затратно, проверить наличие подписчиков или просто разослать событие (созданное через new или уже закешированное в переменной).

Akopalipsis 12.02.2014 18:08

samana, хочу уточнить, Вы о bubbles?

belv 12.02.2014 18:20

Цитата:

2. Кешировать событие в переменную и рассылать только его, дабы не мучить gc
Если Вы ответите на вопрос, сколько диспатчей нужно, чтобы вызвался gc и как часто собираетесь диспатчить Вы? Тогда можно будет говорить о смысле оптимизации.

Rivexe 12.02.2014 19:05

Код AS3:

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

Отсутствие ответа на первый вопрос и сподвигло на эту тему) Событие будет рассылаться раз в несколько кадров.
Просто задумался, зачем при каждой рассылке создавать новое событие, если оно не меняется.

belv 12.02.2014 19:17

В robotlegs все время создаются новые объекты команд. Я тоже задумался над вопросом, а что если мне нужно по enter frame менять модель. Ну написал тест, запустил профилировщик, жду когда вызовется gc, надоело ждать. Суть такова, там команды - это легковесные классы, при создании которых, расходуется мало памяти и соответственно gc вызовется не скоро. Я думаю, что с событийным объектом примерно та же ситуация. Конечно, если есть возможность оптимизировать и Вы хотите спать спокойно, то можно и оптимизировать.

alatar 12.02.2014 19:20

Цитата:

Сообщение от samana (Сообщение 1159665)
Но hasEventListener проверяет текущий объект, а на событие может быть подписан кто угодно, намного выше (parent-ы). Не обязательно текущее событие ловит именно тот объект, который его рассылает.

Для этого есть willTrigger.

Akopalipsis 12.02.2014 20:45

Цитата:

Для этого есть willTrigger.
Спасибо!

samana 12.02.2014 21:51

Цитата:

Сообщение от Akopalipsis (Сообщение 1159668)
samana, хочу уточнить, Вы о bubbles?

Если я не ошибаюсь, то это просто проверка на подписку о событии, не зависимо от его типа.

myakushka 13.02.2014 15:30

http://gskinner.com/blog/archives/20..._dispatch.html
тут хорошо описаны плюсы и минусы разных подходов. почитайте и не забудьте про камментарии


Часовой пояс GMT +4, время: 19:21.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.