The same question was asked before here, and a recommended approach there was to use multicall.
multicall