Замедление отображения страницы Orbeon при отображении группы с большим количеством полей - PullRequest
0 голосов
/ 08 сентября 2011

Я работаю над формами Orbeon, и у меня есть проблема, связанная с производительностью, как описано ниже.

У меня есть форма, где у меня изначально есть пять полей. В пятом раскрывающемся поле, если я выберу «Да», из-за xforms:group он показывает блок полей (блок имеет около 40 полей). Поскольку блок находится в повторяющемся разделе, я могу добавить / удалить столько блоков, сколько смогу.

Теперь, если я добавлю, скажем, 10 блоков, и когда я переключаю пятое раскрывающееся поле с любого значения на «Да», отображение всех блоков занимает более 2 секунд.

Я использую Orbeon Forms 3.8 и Tomcat 6 на рабочем столе Windows XP с 2 ГБ ОЗУ.

Пожалуйста, дайте мне знать, что происходит, когда выбрано "Да" (имеется в виду условное отображение, когда xforms: group - true), для отображения которого требуется больше времени.

<xforms:group ref=".[instance('form-attributes')/flag='yes']" >
    //code for the controls here
</xforms:group>

Ответы [ 2 ]

1 голос
/ 11 октября 2011

Если вы используете код, который выглядит следующим образом:

<xforms:group ref=".[condition]">
    <!-- Large number of fields -->
</xforms:group>
  1. Когда condition равно false, поля внутри группы неактуальны. Движок XForms не вычисляет их значение, статус только для чтения, достоверность, метку, подсказку, помощь, предупреждение и т. Д.
  2. Когда condition становится истинным, содержимое группы становится релевантным, и механизм XForms оценивает все элементы управления внутри группы.
  3. Браузер должен применить все эти изменения к DOM.

Как правило, шаг № 2 намного быстрее, чем № 3, особенно в IE7. Чтобы избежать многочисленных обновлений на шаге № 3, есть еще один способ написания этого кода:

<xhtml:div class="{if (condition) then '' else 'xforms-disabled'}">
    <!-- Large number of fields -->
</xhtml:div>

При этом поля внутри div всегда будут релевантными:

  • Положительным моментом является то, что когда condition становится истинным, все, что может понадобиться браузеру, - это перевернуть этот класс на div. Не обязательно обновлять все элементы управления внутри, если, конечно, их значение также не изменилось.
  • Недостатком является то, что, хотя condition ложно, движок XForms на сервере должен поддерживать все элементы управления внутри div в актуальном состоянии.

Но чаще всего, особенно когда вы наблюдаете медлительность IE7, производительность, которую вы получаете на клиенте, намного превосходит увеличенную обработку, которая может потребоваться на сервере.

0 голосов
/ 13 сентября 2011


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

...