Что я должен сделать, чтобы ускорить медленное приложение GWT, используя MVC - PullRequest
2 голосов
/ 29 ноября 2010

Я изменил свое приложение на использование MVC, и оно стало довольно медленным.

Описание:

  • Приложение имеет 5 композитов, каждый композит представляет разные данные и не всегда показывает
  • Приложение использует MVC, и я передаю модель каждому композиту при обновлении.
  • Я перестраиваю Дерево (и все элементы дерева) каждый раз, когда получено уведомление, однако изменился бы только один из элементов дерева, так что это, возможно, пустая трата.
  • Из-за стиля приложения я даже должен уведомлять () о незначительных вещах, таких как изменение текста в текстовом поле или выбор меню, потому что у меня есть сохраненный значок, который превращается в несохраненный всякий раз, когда что-то изменяется в дереве. Элемент .
  • Все композиты реализуют один и тот же интерфейс наблюдателя, поэтому все обновляются при каждом уведомлении ().

Может кто-нибудь дать мне несколько советов о том, что я должен сделать, чтобы ускорить это приложение. Что из вышеперечисленного может быть более ресурсоемким, чем другие, т. Е. Перестраивает дерево с <20 элементами на каждый notify (), собираясь использовать столько процессорного времени, нужно ли мне его перепроектировать? Должен ли я создать отдельный интерфейс, такой как SaveStateChanged, который будет только уведомлять дерево, или это просто трата времени. </p>

Ответы [ 3 ]

4 голосов
/ 29 ноября 2010

Когда приложение работает медленно, то большую часть времени часто не тратят на выполнение самих вычислений JavaScript (например, я не верю, что просто вызов большого количества наблюдателей является проблемой - это зависит отчто они делают!).Очень часто медлительность вызвана такими вещами, как избыточная компоновка (например, когда каждый из наблюдателей вызывает вызов компоновки).Иногда, множество манипуляций с DOM также могут быть проблемой (в основном с Internet Explorer).

Я бы посоветовал немного поиграть с Speed ​​Tracer, особенно с примером с избыточностью .Если это не конкретная проблема в вашем приложении, вы должны использовать подход, аналогичный показанному в примере, чтобы отследить его.Используйте markTimeline("String"), чтобы специальные части вашего кода четко отображались на графиках Speed ​​Tracer.

0 голосов
/ 29 ноября 2010

Я предлагаю вам избавиться от интерфейса Observer в пользу чего-то более тонкого.Посмотрите на архитектуру MVC в Swing, где JTree связан с TreeModel и реализует интерфейс TreeModelListener, чтобы слышать об изменениях в модели.Интерфейс TreeModelListener имеет специальные методы, вызываемые моделью для указания изменения узлов, добавления или удаления из дерева.Кроме того, он имеет TreeModelEvent, который предоставляет еще больше данных о том, какие узлы затронуты.Если модель точно скажет вам, что изменилось, у вас будет гораздо больше возможностей для умной реакции от реализации ваших слушателей.

0 голосов
/ 29 ноября 2010

Первый шаг, который необходимо сделать, - это точно определить, где возникает проблема с производительностью. Вы определили несколько хороших возможных кандидатов, но вы захотите подкрепить это холодными суровыми статистиками.

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

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