在Gatsby中以编程方式创建页面的最佳实践是什么? [英] What is the best practice for creating pages programmatically in Gatsby?
问题描述
我正在启动一个Greenfield Gatsby项目,我的问题是关于以编程方式创建页面。
总的来说,更好的方式是:
- 只查询ID(通过
graphql(/* ... */)
createPages接口),然后使用该ID重新查询每页的相关数据 - 查询整个对象并通过
pageContext
发送到页面?
这是一个电子商务+博客网站,有500多篇帖子和产品需要以编程方式创建。
考虑DX(例如,启动时间、重新加载时间)、可维护性和构建时间等因素,哪种方法更好?为什么?
推荐答案
我在Gatsby Discord上发布了此问题,LekoArts
选择了方法1,这显然是正确的选择。
这是他们对不和谐的回应:
因为否则您将使每个页面加载的数据膨胀,因为每个页面都将加载您将在Gatsby节点中查询的所有内容。Gatsby还必须查询每个可以达到数百万的节点,就像本期https://github.com/gatsbyjs/gatsby/issues/20671
另一方面,如果你传递id,你可以得到很大的速度提升https://github.com/gatsbyjs/gatsby/pull/20609
这是Gatsby贡献者链接的第一期GitHubLekoArts
vladar
的另一个粘贴:
@martinMikusat感谢您提出这个问题!
看起来您在页面上下文中放入了太多数据。你把你的整个数据集放进去: https://github.com/MartinMikusat/gatsby-reproduce/blob/master/gatsby-node.esm.js#L83
页面上下文不用于将数据传递给页面。它旨在传递简单的参数,稍后可以将这些参数作为变量传递给页面的GraphQL查询。
存在与上下文相关的开销-Gatsby必须访问上下文中每个对象的每个字段才能推断SitePageContext类型。
您有850个节点的页面(在您的示例中为SanityLens),并且每个页面上下文都包含其中的所有节点。此外,每个节点大约有30个字段。这意味着盖茨比必须访问850*850*30个油田(大约2170万)。在这样的情况下(当上下文使用不正确时),我们可以通过显示警告来做得更好,并且我们正好有一个问题:#14213
很抱歉这有点让人困惑,感谢您使用Gatsby💜
这篇关于在Gatsby中以编程方式创建页面的最佳实践是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!