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

252
Vistas
¿Es mejor usar los métodos de sincronización del sistema de archivos de Node sobre los mismos métodos asíncronos?

Esta es una pregunta sobre el rendimiento más que cualquier otra cosa.

Node expone tres tipos diferentes de métodos para realizar varias tareas del sistema de archivos:

  • API de promesas (asincrónicas)
  • API de devolución de llamada (asincrónica)
  • API síncrona (sincronización)

He leído más artículos y respuestas de stackoverflow de las que puedo contar, todas las cuales afirman no necesitar nunca los métodos de sincronización.

Recientemente escribí un script que requería la creación de un par de directorios si aún no existían. Durante esto, me di cuenta de que si usaba los métodos async/await (principalmente fs.promises.mkdir y fs.promises.access ), el bucle de eventos simplemente continuaría con el siguiente bit de código asíncrono, independientemente del hecho de que el siguiente los bits requieren esos directorios. Este es el comportamiento esperado, después de todo, es asíncrono.

Entiendo que esto podría resolverse con una pequeña y agradable sesión de devolución de llamada, pero esa no es la pregunta, mientras que la idea de que la API de promesas se puede usar sobre todos los demás métodos sí lo es.

La pregunta entonces se convierte en:

¿Es mejor usar los métodos de sincronización del sistema de archivos de Node sobre los mismos métodos asíncronos?

¿Es realmente necesario en situaciones como esta bloquear el proceso?

O dicho de otra manera:

¿Es posible evitar completamente los métodos de sincronización y SOLO usar la API de promesas (NO promesas + devoluciones de llamada)?

Parece que usar los métodos de sincronización (dada mi situación anterior, donde los directorios deben estar allí antes de realizar cualquier otra llamada) puede ser EXTREMADAMENTE útil para escribir código legible y claro, aunque puede afectar negativamente el rendimiento.

Dicho esto, hay un nivel abrumador de información para decir que la API de sincronización es completamente inútil y nunca se requiere.

Una vez más, esto atiende puramente a la API de promesas. Sí, las devoluciones de llamadas y las promesas son asíncronas, pero la diferencia entre las colas de trabajo y de mensajes hace que ambas API sean completamente diferentes en este contexto.

PD: para contexto adicional sobre ejemplos, proporcioné un ejemplo de código para que no tenga que imaginar mi ejemplo;)

¡Gracias! :)

 // Checks if dir exists, if not, creates it. (not the actual code, just an example) // Sync version if (!fs.existsSync(dirPath)) { fs.mkdirSync(dirPath); } // Async version try { await fs.promises.access(dirPath); } catch { await fs.promises.mkdir(dirPath); }
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Depende de la situación. El principal beneficio de los métodos de sincronización es que permiten un consumo más fácil de sus resultados, y la principal desventaja es que evitan que el resto del código se ejecute mientras se trabaja.

Si se encuentra en una situación en la que otro código que no puede responder a los eventos no es un problema, puede considerar que es razonable usar los métodos de sincronización, si el código en cuestión no tiene ninguna posibilidad o motivo para ejecutarse en paralelo. con cualquier otra cosa

Por ejemplo, definitivamente no querrá usar los métodos de sincronización dentro, digamos, de un servidor que maneja una solicitud.

Si su código requiere leer algunos archivos de configuración (o crear algunas carpetas) cuando el script se ejecuta por primera vez, y no hay suficientes de ellos como para que el paralelismo sea un beneficio, puede considerar usar los métodos de sincronización.

Dicho esto, incluso si su implementación actual no requiere paralelismo, algo a tener en cuenta es que, si la situación cambia y descubre que realmente necesita permitir el procesamiento en paralelo, no tendrá que realizar ningún cambio en su código existente si hubiera comenzado usando los métodos basados en promesas en primer lugar, y si entiende el idioma, usar las Promesas correctamente debería ser bastante fácil, así que si existe la posibilidad de eso, podría considerar usar las Promesas de todos modos.

about 4 years ago · Juan Pablo Isaza 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