@Tokenchik

Как уменьшить количество запросов на странице?

Вывожу на странице сайта товары, для каждого товара выводится картинка. Работа с изображениями идет через популярный CostaRico плагин. Во view как обычно передаю через compact полученные данные по товару и в foreach вывожу. Но на каждой итерации приходится обращаться к базе для поиска используя метод getImage().
Таким образом помимо запроса на получение 16 товаров, делается еще 16 на получение картинки для каждого товара.
Может кто работал с данным плагином и может подсказать как правильно сделать? Или 20 запросов на странице это норма?
  • Вопрос задан
  • 392 просмотра
Решения вопроса 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
через популярный CostaRico плагин

Где популярный? В Коста-Рике? Хотя бы ссылку дайте, что бы понимать о чем речь.

Во view как обычно передаю через compact полученные данные

Это не как обычно, зачем compact? Код покажите.

на каждой итерации приходится обращаться к базе для поиска используя метод getImage()

Если getImage() содержит связь, то надо цеплять жадной загрузкой, как-то так:
$model = Products::find()->with('images')->all();
Тогда на все images будет 1 запрос. В результате будет 2 запроса. 1 продукты и 1 все images к ним.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
za4me
@za4me
Человек
Картинка хранится отдельно от товара?
Получайте все необходимые картинки одним запросом, в чем проблема то?
Ответ написан
Akuma
@Akuma
Веб-программист
Работаю не с Yii, но схема хранения картинок та же.
Если используется кеш, то такая схема отлично держит 4000 пользователей в день и даже не думает спотыкаться.
Без кеша конечно чуть хуже, но все же выборка картинок по индеку - дело довольно простое.

Если сильно переживаете, то можете заранее выбирать картинки одним запросом, как подсказывают выше. Но на практике это себя оправдает либо если у вас очень слабый сервер, либо если очень много пользователей.
Ответ написан
e_svirsky
@e_svirsky
Web Developer
Собрать id-шники и вытянуть одним запросом все изображения
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы