我正在开始一个绿地Gatsby项目,我的问题是关于以编程方式创建页面。
通常最好:
graphql(/* ... */)
createPages API),然后使用ID重新查询每页的相关数据pageContext
将其发送到页面?这是一个电子商务+博客网站,其中包含500多个需要以编程方式创建的帖子和产品。
考虑DX之类的东西(例如启动时间,重新加载时间),可维护性和构建时间,哪种方法更好?为什么?
答案 0 :(得分:1)
我在Gatsby Discord上发布了这个问题,LekoArts
选择了方法1,这是显而易见的正确选择。
这是他们对不和谐的回应:
因为其他原因,您会膨胀每页加载的数据,因此每页都会加载gatsby-node中要查询的所有内容。盖茨比还必须查询每个节点,该节点可以达到数百万个,如本期https://github.com/gatsbyjs/gatsby/issues/20671
另一方面,如果您传递ID,则可以大大提高速度https://github.com/gatsbyjs/gatsby/pull/20609
这是Gatsby贡献者LekoArts
链接的第一个GitHub问题vladar
的另一贴:
@MartinMikusat感谢您提出来!
您似乎在页面上下文中放入了太多数据。您将整个数据集放入其中: https://github.com/MartinMikusat/gatsby-reproduce/blob/master/gatsby-node.esm.js#L83
页面上下文并不意味着将数据传递到页面。它的目的是传递一些简单的参数,这些参数以后可以作为变量传递给页面的GraphQL查询。
与上下文相关的开销-Gatsby必须访问上下文中每个对象的每个字段才能推断SitePageContext类型。
您有850个节点的页面(在您的示例中为SanityLens),并且每个页面上下文中都包含所有节点。另外,每个节点大约有30个字段。这意味着盖茨比必须访问850 * 850 * 30个字段(约合2,170万)。
在这样的情况下(当上下文使用不当时)显示警告,我们可以做得更好,而对于这个问题,我们确实有一个问题:#14213
对不起,这有点令人困惑,感谢您使用Gatsby?