簡體   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