Низкая производительность xpage при частичном обновлении панели - PullRequest
0 голосов
/ 09 ноября 2018

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

Моя проблема заключается в том, что для отображения более крупных панелей (содержащих около 30 полей) требуется более 20 секунд с использованием частичного обновления обработчика события onchange поля флажка. Я предположил, что это просто количество контента, но если я полностью удаляю формулу рендеринга со всех панелей, то вся форма, включая все содержимое панели, будет отображаться за несколько секунд.

Структура:

<xp:panel id="allPanels">
   <xp:panel id="panel1"></xp:panel>
   <xp:panel id="panel2"></xp:panel>
   <xp:panel id="panel3"></xp:panel>
</xp:panel>

с событием onchange, обновляющим "allPanels".

Есть ли у кого-нибудь идеи, почему существует такая задержка, поскольку в настоящее время она не работает?

Большое спасибо

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

@ DbLookup особенно плохо влияет на производительность, вы увидите это в различных доступных блогах. Смотрите, например, xPages @DbLookup issue . API, которые не используют язык формул, будут более эффективными - в XPages нет движка языка формул, все - Java. SSJS сопоставляется с методами Java; @DbLookups отображается на несколько методов Java (для каждого из параметров).

См. Также мой вебинар «Марти, ты не думаешь, что ты четвертый размерен» (вкладка вебинаров 2016 года по адресу http://www.tlcc.com/admin/tlccsite.nsf/pages/recorded-xpages-webinars). Что рассчитывается, когда речь идет о теме, о которой я говорил в течение ряда лет, и объясняет именно поэтому он быстрее при начальной загрузке. Существуют различные варианты повышения производительности. «Вычислять при загрузке страницы», а не «Вычислять динамически», предпочтительнее. view.isRenderingPhase() может использоваться, чтобы минимизировать количество вычислений, где это уместно. Другой вариант может запускать код в onClick, чтобы устанавливать переменные viewScope и ссылаться на них, а не запускать поиск на месте.

0 голосов
/ 12 ноября 2018

Вы можете попробовать добавить execId="YOURCHECKBOXFIELDID" в обработчик событий вашей группы флажков, который будет отправлять значение вашего флажка на сервер только для частичного обновления, а не во все остальные поля.

Кроме того, посмотрите на ответ, который я дал на похожий вопрос: Сложная Xpage занимает много времени для частичных обновлений , что может помочь?

Infact Я только что заметил, что Кнут упомянул точку execId как ответ на вышеупомянутый вопрос!

...