JWTs need not be encrypted (and generally are not), instead they are signed. Check out the difference between JWS and JWE here for more info. In our proposal we use a signature which is much faster than an encryption.
This definitely depends on what you want to prioritize. Let's take HTML generation for example: some people believe that since there are a lot of devices out there with ever increasing computing power you should not use your server resources in order to "scale easier" and have the HTML generation done in the device. Others are against that because you might be sending extra data to clients (on a slower connection), having them generate the HTML involves a bit of computing time so battery is consumed, etc.
It's all about the tradeoffs. In our case our tokens are verbose (as API keys they are meant to be sent from a server), but you could compress them a lot if you used bitwise flags to represents sets of permissions for example and then interpreted that in your server.
As I explained in my previous answer it depends on what your bottleneck is (CPU time vs DB time/storage). Tokens are not opaque, we believe that to be a good thing (you might be saving more than just 1 DB trip.
Hopes this answers the question.