Использую для создания сайтов Python + Flask + SQL-Alchemy, и довольно часто возникает ситуация, когда layout (шаблон страниц, обычно хэдер + футер) содержит меню, отзывы клиентов и так далее.
Все эти вещи грузятся из базы данных, соответственно при каждом открытии какой-либо из страниц выполняются запросы для загрузки отзывов, комментариев, меню и прочего.
Подскажите как можно уменьшить количество запросов? Объединять в один, кешировать, может ещё что-то? Какими средствами можно этого достичь?
Сами ответили на свой вопрос. Используйте Кеш. Гуглите, ибо информации море, как и подходов. Если у Вас не Plain Python ( а судя по вопросу нет) то вы сможете что-то найти для вашего фреймворка готовое.
Есть еще Ajax, помогает обновить лишь часть страницы.
При открытии новой есть еще куки, там можно хранить часть инфы.
При обновлении можно отсылать серверу инфу о времени создания страницы timeCreation, возвращать только комментарии, написанные после timeCreation.
AJAX используется, куки сработают только для человека уже посетившего сайт. Интересуют новые пользователи, которые впервые заходят на сайт и тянут информацию из БД. Похоже мне действительно необходимо использовать кэш. Для Flask я нашёл модуль Flask-Cache, только вот не разобрался кеширует ли он только статику, или выполненные запросы тоже. Может знающие ответят на этот вопрос.
Ajax плохо для SEO. Если хочешь сделать популярный сайт, который заметят поисковики, то никаких Ajax!!! Кеш отличный вариант. Можно и самому написать, если не хочется копаться в готовых решениях. Взять к примеру Redis и складывать туда информацию (готовые куски отрендеренных шаблонов). При загрузке страницы брать инфу из Redis, если ее там нет или она "протухла" то брать из базы и параллельно обновлять в Redis.