Эффективно получать категории продуктов, связанные с продуктами, с помощью GraphQL (WPGraphQL для Wordpress)
Я использую Wordpress, Woocommerce, WooGraphQL, React и Next для решения для электронной коммерции, использующего SSG и SSR для SEO и повышения производительности.
Меня беспокоит производительность, когда дело доходит до заполнения фильтров товаров на страницах категорий. Я хочу отображать только фильтры, относящиеся к продуктам, которые соответствуют поиску.
Гипотетический пример:
- Поиск продукта дает 500 результатов.
- Запросите данные для первых 12 продуктов, используя GraphQL, чтобы показать на первой странице.
- (Проблема) Получение данных для заполнения фильтров для всех 500 товаров.
В моем случае фильтры - это категории продуктов, и каждый продукт связан с 3 категориями.
Единственное, что я могу придумать, - это запросить данные для всех 500 продуктов, а затем перебрать каждый продукт в массиве, чтобы получить доступ к связанным категориям и заполнить фильтры.
В моем реальном проекте действительно будет не более 100 продуктов, но в идеале я бы хотел применить масштабируемый подход.
Должен ли я беспокоиться о получении такого количества данных или я слишком много над этим думаю? (Полагаю, что нет) Если нет, что было бы лучшим решением такой проблемы?
Пример запроса GraphQL будет выглядеть так:
query MyQuery {
products(first: 500, where: {search: "something"}) {
nodes {
productCategories {
nodes {
name
}
}
}
}
}
Я понимаю, что лучше всего использовать постраничный подход для извлечения данных. Но проблема сбора такого количества данных все еще существует.
2 ответа
Вы можете просто взять полученные продукты и использовать их как
$objectIds
это запрос
query ($objectIds: [ID] ){
productCategories(where: {objectIds: $objectIds}) {
nodes {
databaseId
name
}
}
}
Это должно получить все связанные категории, а затем, если вы внесете некоторые незначительные изменения в свой первоначальный запрос, вы можете взять
databaseId
категорий продукта, выбранных для фильтров, и сохранить их как
$categories
в отредактированной версии исходного запроса.
query (search: String, $categories: [Int] ){
products(first: 100, where: {search: $search, categoryIdIn: $categories}) {
nodes {
databaseId
name
}
}
}
Два небольших примечания. Если вы не переопределите количество с помощью этого фильтра в WPGraphQL, вы не сможете получить более 100 результатов одновременно из запроса на подключение.
на прошлой неделе я был точно в том же месте. Мое решение состояло в том, чтобы создать фильтры, которые, как я знал, были включены в категорию как список ACF. Проблема в том, что вам нужно ввести все фильтры, которые вы хотите для каждой категории, но это решает проблему запроса тысяч продуктов, когда вам нужно всего 12. Это выглядит примерно так: wordpress-category-view