Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

148
Visualizações
¿Cómo exportar un sitio estático Next.js grande en partes y combinarlas más tarde?

Estoy usando la exportación de Static HTML Export de Next.js para mi sitio, que tiene 10 millones de páginas estáticas, pero me encuentro con problemas de RAM al crear la aplicación.

¿Es posible exportarlo en partes como 100k páginas en la primera compilación, luego 100k en la segunda compilación y así sucesivamente?

No quiero usar la Incremental Static Regeneration o getServerSideProps para redux costos.

Este sitio está usando MongoDB solo tiene dos páginas, la página de inicio y la página de publicaciones:

 index.js
[postPage].js

En la página de inicio usé este código:

 export async function getStaticProps() {
 const { db } = await connectToDatabase();

 const postsFeed = await db
 .collection("myCollection")
 .aggregate([{ $sample: { size: 100 } }])
 .toArray();

 return {
 props: {
 postsFeed: JSON.parse(JSON.stringify(postsFeed)),
 },
 };
}

En la página de publicaciones usé este código:

 export async function getStaticPaths() {

 const { db } = await connectToDatabase();
 const posts = await db
 .collection("myCollection")
 .find({})
 .toArray();

 const paths = posts.map((data) => {
 return {
 params: {
 postPage: data.slug.toString(),
 }
 }
 })

 return {
 paths,
 fallback: 'blocking'
 }
}

export async function getStaticProps(context) {

 const postSlug = context.params.postPage;

 const { db } = await connectToDatabase();

 const posts = await db
 .collection("myCollection")
 .find({ slug: { $eq: postsSlug } })
 .toArray();

 const postsFeed = await db
 .collection("myCollection")
 .aggregate([{ $sample: { size: 100 } }])
 .toArray();

 return {
 props: {
 posts: JSON.parse(JSON.stringify(posts)),
 postsFeed: JSON.parse(JSON.stringify(postsFeed)),
 },
 };
}
almost 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

No parece ser una opción integrada para procesar lotes de páginas estáticas https://github.com/vercel/next.js/discussions/14929

Solo puedo pensar en dividir el trabajo usando un script bash donde configura una variable env y la usa en el código donde está obteniendo los datos para generar las rutas, luego ejecute el comando de compilación tantas veces como partes necesite dividir los datos, en cada iteración mueva los archivos generados a otro directorio que será su salida consolidada.

 COUNTER=1
PARTS=100 # change it to control number of parts
while [ $COUNTER -lt $PARTS ]; do
 let COUNTER=COUNTER+1
 CURRENT=$COUNTER PARTS=$PARTS next build
 # move generated files to another directory
done

en su obtener getStaticPaths

 export async function getStaticPaths() {
 const currentPercentage = process.env.CURRENT/process.env.PARTS
 // logic to fetch the corresponding current percentage of the data
 // 1% when there are 100 parts, 0.5% when 200 parts, etc.
}

Tenga en cuenta que si los datos cambian con mucha frecuencia, verá resultados incorrectos, como páginas repetidas u omitidas, ya que cada paginación ocurrirá en diferentes momentos al ejecutar el script. Creo que podría crear un script de node auxiliar (u otro idioma) para manejar mejor esa cantidad de registros, tal vez de una manera simplificada , y generar archivos JSON para cada fragmento de datos para usarlos en getStaticPaths en lugar de obtenerlos directamente de la base de datos. .

almost 4 years ago · Santiago Trujillo Relatório

0

Bueno, puedo sugerir usar importaciones dinámicas mira esto

almost 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda