在Gatsby中以编程方式创建页面的最佳实践是什么? [英] What is the best practice for creating pages programmatically in Gatsby?

查看:14
本文介绍了在Gatsby中以编程方式创建页面的最佳实践是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在启动一个Greenfield Gatsby项目,我的问题是关于以编程方式创建页面。

总的来说,更好的方式是:

  1. 只查询ID(通过graphql(/* ... */)createPages接口),然后使用该ID重新查询每页的相关数据
  2. 查询整个对象并通过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贡献者链接的第一期GitHubLekoArtsvladar的另一个粘贴:

@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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆