当我使用HTMLPanel而不是普通的div时会受到某种惩罚吗?

例如。

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


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

最佳答案

简短答案:

如有疑问,请查看生成的代码(将-gen参数传递给DevMode或Compiler)

长答案:

始终在简单的DOM元素上使用小部件会影响运行时性能。通过解析HTML代码段创建该DOM元素时,甚至更多。

UiBinder将小部件视为HTMLPanel的子级时,它将生成具有唯一ID的占位符<span>,然后使用HTMLPanel.addAndReplaceElement将其替换为小部件。

因此,第二个片段将生成(大约)

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

07-26 02:13