[英]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.