2011-03-21 4 views
13

Esiste una sorta di penalità quando utilizzo un HTMLPanel anziché un semplice div?UiBinder - HTMLPanel vs. div

E.g.

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

in contrasto con

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

risposta

8

Risposta breve:

In caso di dubbio, guarda il codice generato (passare l'argomento -gen al DevMode o compilatore)

Risposta lunga :

Ci sarà una penalità di esecuzione runtime utilizzando un widget su un semplice elemento DOM, sempre. E ancora di più quando quell'elemento DOM viene creato analizzando uno snippet HTML.

Quando UiBinder vede un widget come un bambino di HTMLPanel, verrà generato un segnaposto <span> con una generare ID univoco e quindi utilizzare il HTMLPanel.addAndReplaceElement per sostituire quel segnaposto con un widget.

Così il secondo frammento di genererà (circa)

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

Questa non è una penalizzazione delle prestazioni, ma penso HTMLPanel è l'unico Widget che, all'interno di un UiBinder, può contenere (come i bambini) un mix di entrambi i tag Widget e HTML.