Yes, all bones are updated because the skeleton doesn't know which bones are important to your animations, rendering, or other code that may use a bone for something. You could use skin bones to control which bones are updated
bones in a skin that is not active are not updated. If you have some other way of knowing which bones don't need to be updated, you could modify the runtime to skip those bones.
Here is the part of the runtime that controls which bones are updated:
The skeleton creates a list called
updateCache that is all the bones and constraints that need to be updated, sorted so parent bones are updated first, constraints are applied at the right time, and bones constraints affected are updated afterward.
The logic there for skin bones is a little tricky, but
bone.data.skinRequired is true when the bone is in a skin. When
sorted is true, the bone will be skipped
it won't be added to
You can modify the bones a skin has to control which bones are updated, just be sure afterward that you call
updateCache() on the skeleton to rebuild the list.