The various utility functions of User and CmsUser like isAuthorizedToPerformActionOnAsset and isGlobalModerator desperately need caching. These could easily be called 100 times in 1 page load with 80% of them being duplicates. Without caching you end up with a massive amount of duplicate queries being made for simple permissions or moderator checks that should cache their results in at the very least a static variable.