I don't think there is a right answer for this.
The path you choose depends on your needs.
I usually avoid using widgets. Specially when working with "not so technical" clients.
The widget system in Magento is not that easy to use or to explain to someone else.
I usually put everything in phtml files so the chance of something getting screwed up is smaller. Or if something gets screwed up, I know it's my fault and I know where to look.
From time to time I like to create widgets with a minimum configuration needed, but I do this only when the client wants to use the widgets in the homepage or other static pages.
I rarely tell my clients about the full widget system of magento, that allows you to place widget instances on different sections of each page. I rather spend 30 minutes adding something on the left column, than spending 2 hours looking for how to remove something placed wrong on the left column.
But in almost all the cases I avoid using
local.xml. That looks to me like it's a bit dirty. I think it's better to put your custom widgets or blocks or phtml files inside a custom module. The advantages are:
- portability (you can easily isolate and re use the module in another project)
- you can easily disable you functionality if needed
- the chances of something going wrong in an upgrade are lower and if something goes wrong...refer to the point above.
Performance can be affected even if you use a widget or a phtml file. I don't think the difference is significant. Maybe it's a little slower with the widget approach because the widgets have to be parsed and interpreted, but I could be wrong.