Minimizing the number of switch panes used in your form will maximize the overall performance of loading a form in the Viewer and Webform Server. Furthermore, it will improve the user experience by reducing reaction times. The pane and all of its contents are destroyed when the state of a switch pane changes. The objects are re-created when the switch becomes active again. Therefore you are incurring additional overhead in implementing a switch.
Switches provide the ability to group a number of objects together and then control their visibility from a single focal point, however the overhead of creating and destroying the objects may not be worth it. In fact if the items you are grouping in a pane are all linked to sibling XML elements then you can eliminate the pane and control their visibility with a single bind that manipulates the parent node. This provides the same functionality and better performance.
Given the following XML instance:
<xforms:instance id="INSTANCE" xmlns="">
You can create a single bind that will manipulate all the children elements simultaneously. In this case the visibility of the items is toggled by a checkbox:
<xforms:bind id="hideName" nodeset="instance('INSTANCE')/person"
relevant="boolean-from-string(if(instance('Generated')/page1/checklist1='visible', 'true', 'false'))"></xforms:bind>
If you want the other sections of the form to move up to take the place of the other items when they are invisible then you can add a compute to the display property of each item. For example,
Exceptions to this practice
<display compute="CHECKLIST1.value == 'visible' ? 'on' : 'off'">on</display>
There are no exceptions to this practice.