Эффективно получать категории продуктов, связанные с продуктами, с помощью 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

Другие вопросы по тегам