I don't think the 2nd point has significant performance implications. If you're not serving up static pages then there's always network calls to be made on the backend.
Storing a nonce on the client and looking everything up on the backend is an easy solution which means you don't have to worry about what data you're storing and if that'll be available in the browser.
I think it's cheaper to optimize on the backend for a simpler (and safer) solution.
I cannot trust anything returned from a client so it seems best to Only return one thing from the client
As for a carefully vetted security pro - that's great but I am looking for basic generic best practises (we know that has evolved from md5 hashes to bcrypt but what else is there?)
It seems either a hole in my education or a hole in general common knowledge
Storing a nonce on the client and looking everything up on the backend is an easy solution which means you don't have to worry about what data you're storing and if that'll be available in the browser.
I think it's cheaper to optimize on the backend for a simpler (and safer) solution.