Что может замедлить работу моего гибкого мобильного приложения? - PullRequest
0 голосов
/ 04 февраля 2012

Последние два года я работаю с flex над некоторыми настольными приложениями. До сих пор у меня никогда не было проблем, связанных с производительностью, но сегодня, когда мы завершили разработку мобильного приложения для iPad, я столкнулся с проблемой: приложение на iPad невероятно медленное.

http://i.stack.imgur.com/qkbWn.png

Медленно, означает, что когда я нажимаю кнопку в меню, чтобы изменить splitview, я должен ждать что-то вроде 5 с. Затем прокрутка очень медленная, с двумя кадрами в секунду, и мой TextInput начинает глючить (текст больше не находится в его поле).

Я начал читать много постов и презентаций в блоге об оптимизации для мобильной платформы, а затем переписывал некоторые компоненты, которые я использую. Например, я удалил SkinnableContainer и заменил его группой VGroup, включая некоторые чертежи на основе ActionScript.

Теперь, что вы видите, это VGroup (темно-серая), содержащая некоторые другие VGroup (группа с заголовком здесь), а затем каждый виджет - это HGroup с меткой и виджетом. Я использую только Label и TextInput для текста.

Время создания медленное даже (несколько секунд для создания представления) для другой страницы, на которой есть только 4 текстовых виджета, или другого, содержащего только список с настраиваемым средством визуализации элементов, где каждая строка представляет собой набор из 4 меток .

Все это связано с RobotLegs, ничего особенного, одна модель добавляется в представление, и в начале я устанавливаю переменную-член в представление с этим объектом, чтобы связать мои переменные.

Честно говоря, я сейчас думаю: это пахнет подозрительно, потому что, если я все сделал правильно, невозможно добиться такой низкой производительности и думать, что flex конкурентоспособен на мобильной платформе. Так что сейчас я пытаюсь отключить приложение по частям, чтобы попытаться найти то, что может замедлить его. У меня есть пара подозреваемых, чтобы проверить, например, у меня есть какое-то обязывающее предупреждение, чтобы проверить, а затем посмотреть, есть ли доля проблемы у роботы.

Так что мой главный вопрос здесь заключается в том, что вы думаете, и не могли бы вы дать некоторые идеи о том, «есть ли проблема» и «как мы ее решим».

Спасибо

1 Ответ

0 голосов
/ 06 февраля 2012
  1. Запуск профилировщика для запуска и отдельно для каждой операции, которая требует времени, в котором она нуждается. Затем определите приоритеты проблем и попытайтесь решить их с помощью основных методов оптимизации.
  2. Некоторые проблемы, которые вы не сможете быстро решить, например, время для создания больших компонентов. Единственный вариант - переписать эти компоненты с AS3 без MXML, стилей и прочего. Я уверен, что flash.text.TextField создается во много раз быстрее, чем mx.controls.Label. То же самое для других компонентов.
  3. Когда компонент создан, его можно использовать по очень низкой цене. В вашем приложении должно быть много мест, где вы можете воссоздать, в то время как вы можете повторно использовать старые компоненты. Это сэкономит вам память и время.
  4. Макеты, как правило, перерисовываются, даже когда они не нужны. Если у вас много вложенных макетов, найдите наиболее важные места и замените серию макетов одним пользовательским макетом или даже компонентом.

Это все очень много времени для разработчиков. В конце концов, вы все равно не получите гладкое приложение, но я верю, что оно может стать пригодным для использования.

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