UiBinder - HTMLPanel против div

Есть ли какой-то штраф, когда я использую HTMLPanel вместо простого div?

например.

<g:HTMLPanel>
  <div>
    /* Widgets, more HTML */
  </div>
</g:HTMLPanel>

в отличие от

<g:HTMLPanel>
  <g:HTMLPanel>
    /* Widgets, more HTML */
  </g:HTMLPanel>
</g:HTMLPanel>

Ответы

Ответ 1

Короткий ответ:

В случае сомнений посмотрите на сгенерированный код (передайте аргумент -gen в DevMode или компилятор)

Длинный ответ:

Всегда будет выполняться ограничение производительности при использовании виджета над простым элементом DOM. И даже больше, когда этот элемент DOM создается путем разбора фрагмента HTML.

Когда UiBinder видит виджет как дочерний элемент HTMLPanel, он сгенерирует placeholder <span> с уникальным идентификатором генерации, а затем использует HTMLPanel.addAndReplaceElement для замены этого заполнителя виджетами.

Таким образом, второй фрагмент будет генерировать (приблизительный)

HTMLPanel root = new HTMLPanel("<span id='uuid'></span>");
HTMLPanel child = new HTMLPanel("/* Widgets, more HTML. */");
root.addAndReplaceElement(child, "uuid");

Ответ 2

Это не оценка производительности, но я думаю, что HTMLPanel - единственный виджет, который в UiBinder может содержать (как дочерние) сочетание как тегов Widget, так и HTML.