使用 getStaticProps() 将 Next.js 部署到 Vercel 的速率限制问题
Rate limit issue deploying Next.js to Vercel using getStaticProps()
使用 Next.js 连接到 Apollo,我有 50 个左右的非动态 URL 使用 getStaticProps()
获取数据。它工作得很好,我喜欢页面的加载方式。我面临的问题是,因为 Vercel 在构建时构建了这些页面的静态版本,所以我很快就达到了这些页面上使用的 API 的速率限制大约40个建成后。鉴于我无法控制这些速率限制,是否有任何方法可以在构建时限制每个 getStaticProps
到 space 中的数据调用?我的 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,
}
}
使用 Next.js 连接到 Apollo,我有 50 个左右的非动态 URL 使用 getStaticProps()
获取数据。它工作得很好,我喜欢页面的加载方式。我面临的问题是,因为 Vercel 在构建时构建了这些页面的静态版本,所以我很快就达到了这些页面上使用的 API 的速率限制大约40个建成后。鉴于我无法控制这些速率限制,是否有任何方法可以在构建时限制每个 getStaticProps
到 space 中的数据调用?我的 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,
}
}