Let me know if this is not enough, but I'll just quote the docs for now
From the Advanced Dynamic Functionality tutorial:
Nesting Refresh
In the "Refresh" section examples, Refresh is always the outermost
function inside Dynamic. You might almost wonder why its options are
not simply options to Dynamic. But in fact it is often important to
place Refresh as deeply in the expression as possible, especially if
it specifies a time-based updating interval.
Consider this example.
DynamicModule[{showclock = True}, {Checkbox[Dynamic[showclock]],
Dynamic[If[showclock, Refresh[DateList[], UpdateInterval -> 0.05],
"No clock"]]}]
When the checkbox is checked, Refresh is causing frequent updating of
the clock, and CPU time is being consumed to keep things up-to-date.
When the checkbox is unchecked, however, the Refresh expression is no
longer reached by evaluation, the output remains static, and no CPU
time is consumed. If Refresh were wrapped around the whole expression
inside Dynamic, CPU time would be consumed constantly, even if the
clock were not being displayed. The words "No clock" would be
constantly refreshed, pointlessly. (This refreshing is not visible;
there is no flicker of the screen, but CPU time is being consumed
nevertheless.)