We currently discard computed weights after each head update. We should instead cache them in our LiveChain and update it only with new attestations.
For reference, Lighthouse uses a "proto-array" implementation: https://github.com/sigp/lighthouse/tree/stable/consensus/proto_array/src
while Prysm uses a doubly-linked tree: https://github.com/OffchainLabs/prysm/tree/develop/beacon-chain/forkchoice/doubly-linked-tree