What you have there is cpu skinning.
The vertex positions are calculated by the joint data and the weight, usually a vertex can be affected by multiple joints
the weight is giving information about how much a given joint affects a vertex.
If you do not need to access the transformed vertex data you can use GPU skinning,
there is a good article about gpu skinning in this gpu gems article, right after the morph targets.
Also in the comments of the tutorial you mentioned is a link to a gpu skinned version of it, which may be more helpful to you: