Для начала посмотри что выдает панель debug
Сколько памяти потребляет, сколько запросов к БД делает.
1) Если количество запросов зашкаливает (>>10) проверь все ли связанные данные были подключены
Например
News::find()
->with([
'author.profile',
'category',
'comments',
// И остальные
])
->limit(30)
->all()
Таким образом во время запроса News сразу же будут получены и все связанные данные
Вместо
SELECT * FROM author WHERE id = 1;
SELECT * FROM author WHERE id = 2;
SELECT * FROM author WHERE id = 5;
Должен сгруппировать все запросы в один
SELECT * FROM author WHERE id in (1,2,5);
2) Если потребление памяти зашкаливает тогда к запросу можно добавить
->asArray()News::find()
->with([...])
->asArray()
->limit(30)
->all()
Но тогда все данные вы будете получать не в виде объекта, а в виде массива, что поможет сэкономить >50% оперативки.
ЗЫ "Вы не любите кошек?! Вы просто не умеете их готовить!"