繁体   English   中英

使用 getStaticProps() 将 Next.js 部署到 Vercel 的速率限制问题

[英]Rate limit issue deploying Next.js to Vercel using getStaticProps()

使用连接到 Apollo 的 Next.js,我有 50 个左右的非动态 URL 使用getStaticProps()获取数据。 它工作得很好,我喜欢页面加载的方式。我面临的问题是,因为 Vercel 在构建时构建了这些页面的 static 版本,我很快达到了在大约 40 个页面上使用的 API 的速率限制。建成。 鉴于我无法控制这些速率限制,有没有办法在每个getStaticProps中限制我的数据调用以在构建时分隔这些数据调用? 我的getStaticProps在每个页面上看起来像这样:

export async function getStaticProps() {
  const apolloClient = initializeApollo()

  await apolloClient.query({
    query: XXXXXXX,
    variables: {handle: "XXXXXXX"}
  })

  return {
    props: {
      initialApolloState: apolloClient.cache.extract(),
    },
    revalidate: 1,
  }
}

一切正常,或者当我的页面较少并且没有足够的页面来达到速率限制时。

我最终通过在承诺中抛出一个包含我的请求的 setTimeout 将我的请求限制了 100 毫秒。 在生产构建期间完全按预期工作。

const sleep = (milliseconds, apolloClient) => {
return (
    new Promise(function(resolve, reject){
        setTimeout(() => {
            const request = apolloClient.query({
                query: XXXXXX,
                variables: {handle: "XXXXXX"}
            });
            resolve(request);
        }, milliseconds)
    });
)

};

导出异步函数 getStaticProps() { const apolloClient = initializeApollo()

await sleep(200, apolloClient)

return {
  props: {
    initialApolloState: apolloClient.cache.extract(),
  },
  revalidate: 1,
}

}

在没有任何配置的情况下,NextJS 构建将尝试执行某种多线程,这会导致在构建时同时产生多个 HTTP 请求,并且可能会压倒接收服务器。 我不知道这里的默认配置是什么,也不知道它如何依赖于构建服务器。

next.config.js 中的以下next.config.js配置将在循环通过getStaticPropsgetStaticPaths请求时强制构建过程为单线程:

    ...
    experimental: {
        workerThreads: false,
        cpus: 1
    },
    ...

您可以在此处找到有关此配置的一些其他信息: https://docs.uniform.dev/sitecore/deploy/how-tos/how-to-control-nextjs-threads/

以我的经验,这应该会显着减少内容服务器的速率限制问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM