Henry has already given a good answer, but I would just like to pick up this part of your question:
But isn't this a performance tax?
The overhead of structure performance is negligible.
In fact, you can even get better performance from frameworks like ColdBox that have built-in caching.
Remember that most frameworks are mature codebases used by a lot of people - most likely, your new unverified code will be the culprit, not the framework.
However, as a general rule (not specific to frameworks), performance is not a problem unless you have measurable results that say it is .
i.e. don't just think: “I'm going to make X instead of Y because I think it will be faster” - go with the simplest option that meets the needs of users, and only change it if you can prove that it has performance problems and that your proposed solution is better.
source share