问题
Is there some sort of penalty when I'm using a HTMLPanel
instead of a plain div
?
E.g.
<g:HTMLPanel>
<div>
/* Widgets, more HTML */
</div>
</g:HTMLPanel>
in contrast to
<g:HTMLPanel>
<g:HTMLPanel>
/* Widgets, more HTML */
</g:HTMLPanel>
</g:HTMLPanel>
回答1:
Short answer:
When in doubt, look at the generated code (pass the -gen
argument to the DevMode or Compiler)
Long answer:
There will be a runtime performance penalty using a widget over a simple DOM element, always. And even more when that DOM element is created by parsing an HTML snippet.
When UiBinder
sees a widget as a child of HTMLPanel
, it will generate a placeholder <span>
with a generate unique ID and then use the HTMLPanel.addAndReplaceElement
to replace that placeholder with a widget.
So the second snippet will generate (approx)
HTMLPanel root = new HTMLPanel("<span id='uuid'></span>");
HTMLPanel child = new HTMLPanel("/* Widgets, more HTML. */");
root.addAndReplaceElement(child, "uuid");
回答2:
This isn't a performance penalty, but I think HTMLPanel is the only Widget that, within a UiBinder, can contain (as children) a mix of both Widget and HTML tags.
来源:https://stackoverflow.com/questions/5382428/uibinder-htmlpanel-vs-div