Архив Февраль 2011

Как отключить механизм callLater

Основной проблемой при разрушении объектов вручную становится метод callLater. Даже если объект удален из дисплейлиста элементы жизненного цикла компонентов (validate/invalidate/update) продолжают работать, а они в свою очередь активно пользуются механизмом callLater. Это не позволяет обнулять некоторые ссылки, которые используются в методах добавленных для выполнения с помощью callLater. Отключить его, как оказалось, легко — необходимо написать декоратор для SystemManager (имплементация ISystemManager) и перекрыть в нем метод addEventListener, отключив добавление слушателя для событий типа FlexEvent.RENDER и FlexEvent.ENTER_FRAME. Подменив мененджер на свой необходимо также вызвать component.mx_internal::cancelAllCallLaters(), чтобы удалить ранее добавленные методы. Вуаля!

Реклама

,

Оставить комментарий

Label: truncateToFit — проблемы с производительностью

Неожиданно открывшийся тикет поставил в тупик: дерево отображающее XMP начинало тормозить без видимой причины при раскрытии некоторых нодов. Как оказалось, это были ноды содержащие кодированые в base64 изображения(достаточно большой текст). Казалось бы что тут такого, xml небольшой, значит датадескриптор тормозить не может, видимого текста мало, компонентов в рендерере немного, почему все так плохо? Оказалось проблема скоро пойдет в школу. Если лень перейти по ссылке, быстрый ответ —  truncateToFit, развернутый:

while (s.length > 1 && textWidth + TEXT_WIDTH_PADDING > w) {
    s = s.slice(0, -1);
    super.text = s + truncationIndicator;
}

, ,

1 комментарий