[英]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
配置将在循环通过getStaticProps
和getStaticPaths
请求时强制构建过程为单线程:
...
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.