Проблема с производительностью в функции restoreView (JSF Lifecycle)
Наше приложение имеет проблемы со временем рендеринга в различных частях. Мы смогли точно определить проблему производительности с помощью профилировщика (YourKit Java Profiler) на этапе восстановления JSF (жизненный цикл). Поскольку на некоторых страницах мы используем много компонентов, источником проблемы должно быть отображение дерева. Какой-то вопрос по stackru выглядит очень похоже на то, что мы имеем дело. Также мы можем увидеть одинаковую медленную скорость в разработке и производстве.
Некоторые характеристики:
- MyFaces 2.1.7
- javax.el 2.1.0
Профилировщик (CTRL+SCROLL, чтобы увидеть детали):
Мы пытаемся найти решения. Пока что мы придумали такие:
- Используйте меньше композиции / компонентов (что не так здорово, потому что нам нравилось создавать общие компоненты).
- Мы также можем перейти в режим без состояния JSF.
- Найдите актуальную проблему с JSF (IN DEEP).
- Недавно мы обнаружили, что некоторая библиотека JUEL (язык выражений) может значительно увеличить время рендеринга.
Я имел дело с тем, чтобы JUEL работал с Spring 3 (с OSGI). Вот спецификация: комплект JUEL 2.1.3.1 (примечание: этот комплект использует другую версию javax.el, чем та, которую я использую в своем приложении, вызовет конфликт?)
Я нашел еще один репозиторий Maven, в котором есть только реализация Juel и более свежая версия.
Обновление: нашел решение для коллизии javax.el, так как в juel-api было много проблем (потому что он экспортирует его собственный javax.el). Я изменил манифест с этой строкой Fragment-Host: javax.el, чтобы устранить его.,
Есть ли конфигурация / настройка для обеспечения лучшей производительности? Или как вам на самом деле настроить JUEL с MyFaces и Spring?
1 ответ
Я бы сказал, что проблема вызвана Spring Web Flow. Я помню этот выпуск SWF-1540. Сначала проверьте, используете ли вы правильную версию (2.4.0.M1 или выше). Обратите внимание, что лично я не проверял, имеет ли эта конфигурация проблему с производительностью, но я могу сказать, что MyFaces 2.1.7 более ранних версий не имеет никаких проблем. Известно, что в некоторых версиях EL есть проблемы с perf, поэтому попробуйте использовать juel или apache EL (jasper-el, в комплекте с Tomcat).
Как личное мнение, следите за Spring прокси, известно, что в некоторых случаях, когда страницы очень большие и сложные, прокси оказывает значительное влияние на производительность. Предлагаемое решение - использовать Apache OpenWebbeans, который является очень быстрой реализацией CDI, оптимизированной для тех случаев, когда у вас много связанных бинов.
Вы также можете проверить эту статью "Понимание JSF 2 и Wicket: Сравнение производительности", чтобы получить советы о производительности MyFaces.
Вы должны сами попробовать, что подойдет для вашего случая, но я надеюсь, что с этими советами вы сможете лучше сфокусировать свой поиск.