стоимость вызова класса для статического конста в as3 - PullRequest
1 голос
/ 15 сентября 2010

Я задаюсь вопросом об эффективности, стоимости или ресурсах, используемых для вызова общедоступной статической константы из класса

Предположим, гипотетически, у меня есть класс, который имеет довольно много ресурсов, и вызов конструктора занимает около 40 КБ памяти.

Есть ли разница в добавлении статических констант в один и тот же класс, в отличие от создания небольшого класса только с константами?

В случае диспетчера событий перечисление класса для события будет выглядеть примерно так: addEventListener(myClass.Holla,onHolla); или addEventListener(myClassEventNames.Holla,onHolla);

Есть ли разница (достаточно существенная), чтобы оправдать использование дополнительного класса для хранения имен событий?

Ответы [ 3 ]

3 голосов
/ 15 сентября 2010

Нет.Там не будет никакой существенной разницы.

2 голосов
/ 15 сентября 2010

Доступ к статическому члену не имеет ничего общего с конструктором; так что у вас не будет проблем с производительностью.


Если рассматриваемое событие является настраиваемым событием, соглашение заключается в объявлении строковых констант для всех событий определенного класса события (подкласс flash.events.Event) в самом подклассе этого события. Например, все константы событий мыши объявлены в MouseEvent, все связанные с меню события определены в MenuEvent и т. Д.

Это соглашение поможет вам в завершении кода, если вы используете компилятор Flex mxmlc. Допустим, вы добавили следующий тег метаданных поверх определения класса (MyClass).

[Event(name="randomEvent", type="com.domain.events.CustomEvent")]
public class MyClass extends EventDispatcher { }

Теперь вы объявляете экземпляр этого класса и вводите addEventListener:

var myClass:MyClass = new MyClass();
myclass.addEventListener(

Вы получите CustomEvent.RANDOM_EVENT в раскрывающемся списке автозаполнения. Без тега метаданных он просто выдаст вам два элемента по умолчанию (активировать и деактивировать). Тег метаданных сообщает компилятору, что этот класс отправляет событие класса CustomEvent и типа randomEvent - и компилятор предполагает, что строковая константа определена в соответствии с соглашением, и предоставляет в качестве опции CustomEvent.RANDOM_EVENT.

Автозаполнение может по-прежнему работать, если вы объявите строковую константу в SomeOtherClass и предоставите имя этого класса в теге метаданных - но это может ввести в заблуждение, поскольку данный класс не отправляет событие SomeOtherClass

1 голос
/ 08 мая 2012

Вы должны профилировать это.Если вы установите -compiler.debug = false -compiler.optimize = true, если вы используете SWFInvestigator , вы увидите коды операций, необходимые для чтения чего-либо.

Этот код:

var str:String;
str = ThisClass.TEST;
str = TEST;
str = SomeOtherClass.TEST;
str = CONFIGCONSTANT::TEST;  // fastest

// str = ThisClass.TEST;
8    getproperty    private::TEST //nameIndex = 30

// str = TEST;
12   getlex         private::TEST //nameIndex = 30

// SomeOtherClass.TEST;
16   getlex         pkg::SomeOtherClass //nameIndex = 29
18   getproperty    TEST //nameIndex = 36

// CONFIGCONSTANT::TEST;
22   pushstring     "test"

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...