If you’ve been programming with AngularJS (first generation of the framework) you probably got used to generating HTML strings on the fly, running them through
$compile service and linking to a data model (scope) to get two-way data binding.
In AngularJS a directive can modify DOM in any way possible and the framework has no clue what the modifications will be. But the problem with such approach is the same as with any dynamic environment — it’s hard to optimize for speed. Dynamic template evaluation is of course not the main culprit of AngularJS being viewed as a slow framework, but it certainly contributed to the reputation.
After studying Angular internals for quite some time it seems to be that the newer framework design was very much driven by the need for speed. You’ll find many comments like this in the sources: