Я разместил этот вопрос на 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 ?