Skip to main content

Build Caching

插件可以将数据缓存为JSON对象,并在连续的构建中检索它们.

Gatsby和插件已经使用了缓存,例如:

  • 缓存由源/变压器插件创建的任何节点
  • gatsby-plugin-sharp缓存内置缩略图

相对于项目根目录,生成输出存储在.cachepublic目录中.

The cache API

缓存API传递到通常由插件实现的Gatsby的Node API .

exports.onPostBootstrap = async function ({ cache, store, graphql }) {}

您要使用的两个功能是:

set

缓存值

cache.set(key: string, value: any) => Promise<any>

get

检索缓存的值

cache.get(key: string) => Promise<any>

Node API帮助程序文档提供了有关该API的更多详细信息.

Plugin Example

在插件的gatsby-node.js文件中,您可以这样访问cache参数:

exports.onPostBuild = async function ({ cache, store, graphql }, { query }) {
  const cacheKey = "some-key-name"
  let obj = await cache.get(cacheKey)

  if (!obj) {
    obj = { created: Date.now() }
    const data = await graphql(query)
    obj.data = data
  } else if (Date.now() > obj.lastChecked + 3600000) {
    /* Reload after a day */
    const data = await graphql(query)
    obj.data = data
  }

  obj.lastChecked = Date.now()

  await cache.set(cacheKey, obj)

  /* Do something with data ... */
}

Clearing cache

由于缓存文件存储在.cache目录中,因此只需删除它即可清除所有缓存. 您还可以使用gatsby clean删除.cachepublic文件夹. 在某些情况下,盖茨比还会使缓存无效,具体来说:

  • 如果package.json更改,例如更新或添加了依赖项
  • 如果gatsby-config.js更改,例如添加或修改了插件
  • 如果gatsby-node.js发生更改,例如,如果您调用新的Node API或更改createPage调用

Conclusion

使用缓存API,您可以在构建之间保留数据,这在使用Gatsby开发站点时非常有帮助(因为您经常运行gatsby develop经常gatsby develop ). 繁重的性能操作(例如图像转换)或下载数据会大大减慢Gatsby的启动速度,并且将此优化添加到插件中可以对最终用户带来巨大的改善. 您还可以查看以下实现了缓存API的示例: gatsby-source- contentfulgatsby-source-shopifygatsby-source-wordpressgatsby-transformer-remarkgatsby-source-tmdb .

Edit this page on GitHub
Docs
Tutorials
Plugins
Blog
Showcase

by  ICOPY.SITE