我把这个问题发布在
Gatsby Discord
和
LekoArts
选择了方法1,这显然是正确的选择。
这是他们对Discord的回应:
因为其他情况下,您会将每个页面加载的数据膨胀,因为每个页面都会加载您在gatsby节点中查询的所有内容。Gatsby还必须查询每个节点,这些节点可以达到数百万个,就像在本期中一样
https://github.com/gatsbyjs/gatsby/issues/20671
另一方面,如果你通过id,你可以获得很大的速度提升
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查询。
有一个与上下文相关的开销——Gatsby必须访问上下文中每个对象的每个字段来推断SitePageContext类型。
您有850个节点的页面(在您的示例中为SanityLens),每个页面上下文都有其中的所有节点。此外,每个节点大约有30个字段。这意味着盖茨比必须参观850*850*30个田地(约2170万块)。
在这样的情况下(当上下文使用不当时),我们可以通过显示警告来做得更好,我们正好遇到了这个问题:#14213
如果有点令人困惑,很抱歉,感谢您使用Gatsby