1. Хранить в сессии обычно будет экономичней.
2. Сказать что то про нагрузку по вашим вводных ничего нельзя. Я тут поправил структуру кода и данных на одном из рабочих сайтов, а то на одной страничке со списком было 8000+ запросов, при каждом показе. После правки кода удалось сократить до 12 запросов. и при этом сайт заметно не тормозил, просто сервер мощный и кушал этот мусор довольно легко.
2.1 Сказать что то о нагрузке так же нельзя не зная тип сайта и интенсивность его использования, например на сайте онлайн библиотеки-читальни, в среднем, 1000 пользователей онлайн создаст намного меньше нагрузки, чем на сайте магазина, в котором будет постоянное шастанье по товарам.
3. Никогда не делайте так:
потом выводить как $_SESSION['user_avatar']
сделайте функцию обертку, например:
class Session {
public static function getAvatar(){
if (!isset($_SESSION['user_info']['user_avatar'])){
$_SESSION['user_info'] = $this->controller->user->getProfileInfo(Session::getUserId());
}
return $_SESSION['user_info']['user_avatar'];
}
}
И использовать уже Session::getAvatar().
Такой подход позволит вам более гибко управлять данными, например организовать устаревание информации о пользователе по таймеру и тп.