The "smart halos" technique, as described at:
requires the halos and text labels to be on separate layers (with clear-label-cache="true" on the second layer), or the label collision detector will prevent the halos and labels from lining up. Thus it requires two separate (but identical) queries on the data source, which could (presumably) be a performance issue.
@artemp - I know you had ideas here, could you comment and fill this issue out a little bit more?
ping @artemp - can you share more details about what kinds of solutions you were thinking of here?
I seem to remember the ability to clear the label cache per style (rather than per-layer) mentioned as a potential solution.
Supporting ignore-placement on the text symbolizer could help with this: #1535.
Also, we could potentially create multiple label caches and have them keyed, such that you could do:
<TextSymbolizer .... collision-cache="none" />
<TextSymbolizer .... collision-cache="places" />
<TextSymbolizer .... collision-cache="lines" />
Only those labels overlapping with items from their same cache would be thrown out.