Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

144
Vistas
¿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 Respuestas
Responde la pregunta

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 Denunciar

0

Bueno, puedo sugerir usar importaciones dinámicas mira esto

almost 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda