Какова лучшая практика для программного создания страниц в Гэтсби? - PullRequest
0 голосов
/ 22 января 2020

Я запускаю новый проект Gatsby, и мой вопрос касается программного создания страниц.

В общем, лучше:

  1. запрос только идентификаторов (через graphql(/* ... */) API createPages), а затем использовать идентификатор для повторного запроса связанных данных для каждой страницы
  2. запроса для всего объекта и отправки его на страницу с помощью pageContext?

This предназначен для сайта электронной коммерции + блог с более чем 500 публикациями и продуктами, которые необходимо создавать программно.

Какой метод лучше использовать с учетом таких вещей, как DX (например, время запуска, время перезагрузки), ремонтопригодность и время сборки ? Почему?

1 Ответ

1 голос
/ 23 января 2020

Я разместил этот вопрос на Gatsby Discord и LekoArts, выбрав метод 1, который является абсолютно правильным выбором.

Это был их ответ от Discord:

потому что в противном случае вы будете раздувать данные, которые каждая страница загружает, поскольку каждая страница затем будет загружать все, что вы запросите, в gatsby-node. Гэтсби также должен запросить каждый узел, который может go на миллионы, как в этом выпуске https://github.com/gatsbyjs/gatsby/issues/20671

С другой стороны, если вы передадите идентификатор, вы можете получить отличный улучшения скорости https://github.com/gatsbyjs/gatsby/pull/20609


Вот еще одна вставка из первого выпуска GitHub LekoArts, связанная с автором Gatsby, vladar:

@ MartinMikusat, спасибо за то, что подняли этот вопрос!

Похоже, вы помещаете слишком много данных в контекст страницы. Вы помещаете в него весь свой набор данных: https://github.com/MartinMikusat/gatsby-reproduce/blob/master/gatsby-node.esm.js#L83

Контекст страницы не предназначен для передачи данных на страницы. Он предназначен для передачи простых параметров, которые впоследствии могут быть переданы в запрос GraphQL страницы как переменные.

С контекстом связаны накладные расходы - Гэтсби должен посетить каждое поле каждого объекта в контексте, чтобы вывести SitePageContext type.

У вас есть страницы для 850 узлов (в вашем примере SanityLens), и в каждом контексте страницы есть все узлы. Также каждый узел имеет около 30 полей. Это означает, что Гэтсби должен посетить 850 * 850 * 30 полей (что составляет около 21,7 млн.).

Мы могли бы добиться большего, показав предупреждение в подобных случаях (когда контекст не используется должным образом ) и у нас есть проблема именно для этой проблемы: # 14213

Извините, если это немного сбивает с толку, и спасибо за использование Gatsby ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...