Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   влияет ли количество слушателей на производительность (http://www.flasher.ru/forum/showthread.php?t=139283)

mickfallout 27.04.2010 17:02

Цитата:

Сообщение от orcpochta (Сообщение 904098)
как же не относится? дети есть, слушатели есть

Структура вложенности не имеет значения для сравнения скорости способа "подписывать родителя" и способа "подписывать каждого ребёнка". В ЛЮБОМ случае событие будет всплывать от того объекта где произошло, до самого верха иерархии отображения. В ЛЮБОМ случае на каждом "этаже" оно будет смотреть, есть ли листнер. В ЛЮБОМ случае листнер выполнится один раз.
Затраты на всплытие, проверки наличие листнера будут одинаковы, надеюсь это понятно. отличатся будут только затраты подписки/отписки. при 50 объектах вы 50 раз подпишите каждого ребёнка или один раз - родителя. вне зависимости от того является ли отец "дедом", "прадедом" и т.п. =)

BlooDHounD 27.04.2010 17:09

mickfallout, думаешь с 3го раза станет понятнее? :D

mickfallout 27.04.2010 17:12

BlooDHounD, возможно =) в педагогике вроде считается что повторять надо 3 раза... =)

random13 27.04.2010 17:28

повторение - мать утечения...))
семь раз прочти один раз напиши))

спасибо, вобщем ответили на вопрос и примерно логика ясна

Psycho Tiger 27.04.2010 17:46

Только ещё момент есть: например, по клику если подписан лишь родитель, а нужно получить дитё, которое лежит под мышкой нужно провести какие-то операции, например getObjectsUnderPoint, и в итоге мы получаем доп. нагрузку (пусть и мизерную, в другом случае это может быть чуть более существенно) в момент исполнения программы. Затрачивая больше памяти и подписывая все N объектов на клик мы загружаем ЦП единожды, во время подписки, а по клику сразу имеем нужный объект.

Я к тому, что нужно по задаче больше смотреть. Я слабо представляю, но могу допустить ситуацию в котором при каждом движении мыши надо производить какие-то нечеловеческие калькуляции математикой, чтобы узнать кто лежит внизу и тогда, наверное, подписка каждого объекта была бы предпочительней

etc 27.04.2010 17:48

stopPropagation наше всё.

mickfallout 27.04.2010 17:49

Цитата:

Сообщение от Psycho Tiger (Сообщение 904145)
Только ещё момент есть: например, по клику если подписан лишь родитель, а нужно получить дитё, которое лежит под мышкой нужно провести какие-то операции, например getObjectsUnderPoint, и в итоге мы получаем доп. нагрузку (пусть и мизерную, в другом случае это может быть чуть более существенно)

Э... Можно по подробнее? "дитё" по которому кликнули хранится в currentTarget. Координаты клика - в event.stageX/Y. Какие вычисления?

BlooDHounD 27.04.2010 18:06

mickfallout, видимо он бредит. просто он ничего не знает о event.target.

Psycho Tiger 27.04.2010 18:10

в target, в currentTarget хранится тот, кого подписали на событие.
Код AS3:

package  
{
        import flash.display.Sprite;
        import flash.events.MouseEvent;
 
 
        public class JustMain extends Sprite
        {
 
                public function JustMain()
                {
                        super();
                        var spr:Sprite = new Sprite();
                        var spr2:Sprite = new Sprite();
                        var spr1:Sprite = new Sprite();
                        spr2.graphics.beginFill(23412343);
                        spr2.graphics.drawRect(0, 0, 100, 100);
                        spr2.graphics.endFill();
 
                        spr1.graphics.beginFill(23412343);
                        spr1.graphics.drawRect(0, 0, 100, 100);
                        spr1.graphics.endFill();
 
                        spr.addChild(spr2);
                        spr.addChild(spr1);
 
                        spr1.y = 200;
                        super.addChild(spr);
 
                        spr.addEventListener(MouseEvent.CLICK, onClick);
 
                }
 
                private function onClick(e:MouseEvent):void
                {
                        (e.currentTarget as Sprite).x += 10;
                        (e.target as Sprite).y += 10;
                }
 
        }
 
}

А по тому что ты сказал - да, ты прав. Туплю последнее время много...

mickfallout 27.04.2010 18:13

Цитата:

Сообщение от Psycho Tiger (Сообщение 904181)
в target, в currentTarget хранится тот, кого подписали на событие.

да, я "оговорился" =)


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

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