Некоторые обновления: мы ничего не делаем в приложении, кроме прослушивания событий и использования привязок ... то есть без ChangeWatcher, без ручного опроса ... просто ждем событий. Мы постоянно подключены к FMS, поэтому накладные расходы на это есть, но они минимальны. Привязки не очень эффективны в Flex, и мы обнаружили, что нецелесообразно добавлять ключевое слово метаданных [Bindable] непосредственно в классы (в большом объеме, с большим количеством классов). Мы мало этим занимаемся, но это один из способов выжать из вашего приложения немного больше производительности. Если вы используете [Bindable (event = "usersUpdated")], тогда у вас есть контроль над привязкой, и она будет срабатывать только тогда, когда вы отправляете событие dispatchEvent (new Event ("usersUpdated")) из функции в классе, т. Е. сеттер для "пользователей".
Любой, кто использовал System.gc () в Flex или AIR, скажет вам, что сборка мусора Flex - это шутка. Это частично реализованная функция, и никто ей не доверяет. Для этого тоже есть уловки ... вызовите его дважды, подождите кадра, вызовите снова. Он может очистить ваши старые предметы, но не скрещивайте пальцы ... Flex делает то, что хочет.
Также используйте временные объекты, чтобы уменьшить количество срабатывающих привязок. Вместо...
myUser.location = новое местоположение (); myUser.location.state = "CO"; myUser.location.city = "Денвер";
do...
var tempLoc: Location = новое местоположение (); tempLoc.state = "CO"; tempLoc.city = "Денвер"; myUser.location = tempLoc;
Первый запускает 3 привязки к чему-либо, привязанному к location. *, В то время как последний должен запускать только 1 привязку (на самом деле это обычно дополнительно из-за того, как Flex обрабатывает это).
Привязки не убьют ваше приложение, пока их не будет много в визуально насыщенном приложении .... привязка и рендеринг кажутся самыми медленными задачами Flex.
Еще одна интересная вещь: создайте новое приложение Flex3 в Flex Builder и запустите его в браузере. Наши тесты показали, что ЦП на MacBookPro остается в пределах 8-10% (когда приложение неактивно и окно браузера скрыто). Наше приложение теперь стабильно работает на ~ 20%, и, хотя оно резко увеличивается для обработки изменений представления и т.п., оно всегда возвращается к уровню, близкому к 20%. Наша первоначальная проблема заключалась в том, что произошла утечка памяти или что-то убегающее, что привело бы к очень высокой загрузке ЦП и оставлению его на уровне около 40-50% (опять же, на MBP ... все относительно этой машины). Мы удалили все ссылки на Degrafa, и, хотя мы заметили небольшое увеличение производительности, это не все. Тем не менее, пустое приложение Flex было поучительным - сам Flex постоянно загружает процессор на 8-10%, даже когда он простаивает.
Еще одна находка ... при использовании Mate будьте осторожны при переключении представлений. Легко иметь доступные ресурсы и просто скрывать и отключать их, когда они не используются, с помощью инжектора и привязки в MXML, но Flex не очень умен, когда дело доходит до скрытия / отключения вещей. Лучше всего создавать виды на лету и уничтожать их, когда они будут готовы. Несмотря на то, что первоначальное создание может занять больше времени и между представлениями будет более длительное ожидание, используйте некоторую магию отображения (индикатор выполнения, вращающийся диск и т. Д.), Чтобы указать, что представление переключается, дождитесь завершения создания в представлении, а затем раствориться в нем.
Также держитесь подальше от ViewStack для визуально насыщенных приложений. Управляйте своим собственным стеком.
До сих пор в этой ветке обсуждались основные проблемы производительности, общие для любого языка, но Flex - особенный мальчик во многих отношениях («особенный» не всегда считается положительным моментом). Существует бесчисленное количество подводных камней, поскольку он построен на очень визуальной платформе, но при этом построен для RIA, поэтому, хотя Flash Player может оптимизировать видео, анимацию и т. Д., Он не будет оптимизировать приложение Flex. Не ожидайте, что приложения Flex будут работать так же, как приложения Flash. Также существует большая разница между AVM (виртуальная машина ActionScript) для AS2 и AS3.
Это просто поверхностный обзор проблем с производительностью и потенциальных преимуществ приложений Flex. Это темное искусство, и легко понять, почему.
Используйте, ниндзя.
person
Community
schedule
05.12.2008