Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

147
Views
¿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 answers
Answer question

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 Report

0

Bueno, puedo sugerir usar importaciones dinámicas mira esto

almost 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!