Просмотр JSF перестраивается при каждом запросе ajax

У меня проблемы с производительностью с моими JSF / RichFaces / Facelets ajax-запросы и из того, что я могу сказать, потому что все дерево компонентов перестраивается для каждого запроса ajax. Это происходит, даже если я использую ajaxSingle = true, оборачиваю разделы в a4j: region, объявляю один раздел для повторной визуализации или ничего вообще. Наша страница является динамической страницей с множеством вложенных уровней. Страница может содержать около 800-900 полей (inputText, rich calendars, selectOneMenus и т. д.). Время начальной загрузки является проблемой, но я понимаю, что проблема, это много полей. Как только у нас есть начальное время сборки / рендеринга, мы спроектировали все остальные действия как ajax и Ly reRender, что необходимо. Из журналов отладки фейсклетов я вижу такие сообщения при любом вызове ajax:

2011-08-24 22:19:03,054 DEBUG [facelets.viewhandler] (http-0.0.0.0-8080-2) Took
24445ms to build view: /oconsole/appfile.xhtml
2011-08-24 22:19:09,377 DEBUG [facelets.viewhandler] (http-0.0.0.0-8080-2) Took
6323ms to render view: /oconsole/appfile.xhtml

Я не уверен, что то, что мы делаем, вызывает перестройку всего дерева компонентов, или фейслеты определяют эту потребность по какой-то причине (устаревший кеш ?). Вот наш стек: JBoss 5.1 JSF 1.2 RichFaces. 3.3.3.Финал Facelets 1.1.15 Шов 2.1.2

Я попытался добавить некоторые параметры контекста, чтобы посмотреть, помогут ли они, но они ничего не сделали: facelets.BUILD_BEFORE_RESTORE = ложь facelets.REFRESH_PERIOD = -1 или 5 (как в 5 мин.)

Есть ли способ узнать, правильно ли кэшируются наши представления? Мы не заботимся о методе сохранения состояния, поэтому я считаю, что по умолчанию он используется на стороне сервера. Все наши запросы происходят в рамках длительных разговоров. Я не был уверен, играет ли это фактор, поскольку я думал, что представления кешируются на уровне сеанса? Любая помощь будет принята с благодарностью, спасибо.

Обновление после дополнительной отладки:

Для AjaxViewHandler (который имеет переменную-член FaceletsViewHandler) установлен developmentMode = true. Я не уверен, что это приводит к тому, что лицевые панели не кэшируют какие-либо представления, поэтому любые изменения будут обновляться во время циклов разработки ... ?? Было очень сложно найти какую-либо информацию о фейслетах / JSF-кешировании представлений, их поведении и управлении этим. Более того, когда я добавляю параметр конфигурации:

<context-param>
<param-name>facelets.DEVELOPMENT</param-name>
<param-value>false</param-value>
</context-param>

, этого не происходит! В отладчике я все еще вижу истинный набор. Поскольку у нас много подвидов, я также попробовал com.sun.faces.numberOfLogicalViews и com.sun.faces.numberOfViewsInSession до 1000 с 15 (по умолчанию), и это не имело никакого эффекта.

Я также безуспешно пытался переключиться на сохранение состояния на стороне клиента. Идеи заканчиваются .... надеюсь, кто-то может помочь ....

Кажется, Seam 2.1 автоматически инициализирует RichFaces, и я не уверен, связано ли это с этим ...

11
задан Ben Developer 25 August 2011 в 18:19
поделиться