Я даже думал кешировать страницы целиком, но запросы всегда разные и на все случаи жизни не напасешься.
Каждый товар в отдельности закешировать можно, только как определить ту грань, когда кешировать уже нужно? И не даст ли дополнительную нагрузку в .menu{} проверка условия ^if(def /cache/$tovar.id), если этих файлов тысячи?
Данные и из базы и из кеша достаются не большие, но часто.