Meh, I don’t agree. ^_^; In all honesty I haven’t used them since we upgraded to 2K9, so there could have been some nice speed boosts.
However, in my experience the large majority of driven keys you see in rigs and in general are basically linear expressions – for example, mapping a 0-1 value to a 0-90 degree rotation. Sure, people use driven keys for things like complex animations that need to be driven by one channel, and in those cases I think they’re acceptable. But doing simple math on paper and replacing that driven key anim curve with a single multiplyDivide, setRange, or even a unitConversion is faster in my experience. (UnitConversions are my new favorite trick – they’re a bit faster than multiplyDivide, so when you’re only running a single value into a multiplyDivide you can use them instead.) Or running a value through a reverse node as opposed to making a driven key reverse a relationship.
There are other reasons for not liking driven keys, too. For starters, if you wanted to do something to all the anim curves in a scene, you have to be smarter about where you’re pulling them from (IE, you’d have to specify each and every character control) as opposed to traipsing through the DAG. That’s caused problems in scripts a few times, and adds a layer of complexity that I’m not a fan of, although you can add a custom attribute to driven key curves that can help scripts skip over them.
Bottom line, I’m not saying not to use them. I still use them on occasion; I just try to find way to not do so. If you want to be convinced about the speed, set up a simple mel script that creates ten thousand or so objects and does timing tests between driven keys and similar node networks. Create some funky random animation and time how long it takes to do step through a hundred frames. Never take anyone’s word for it-- you have to find your own way. In the end whatever makes pictures easily and with stability is the right choice.
As far as what makes them slow: my guess is just that their math is a bit more complex (solving equations to get a smooth point value as opposed to simple multiplication). Not a huge amount more complex (I had a PDF somewhere of how they’re calculated but I can’t find it right now), which means that at a certain point they would be faster than a large node network. The other thing I’ve wondered is how they’re cached. I’m not sure that animCurves are cached the same was as other Maya nodes. But they could be.