El módulo Async_hooks se usa porque proporciona una API para registrar devoluciones de llamada que rastrean la vida útil de los recursos asíncronos creados dentro de una aplicación Node.js.
Características:
- Puede capturar cualquier actividad asíncrona en un proceso de Node.js.
- Sobrecarga mínima de rendimiento.
- API potente y flexible.
Estos recursos se rastrean en C++ y cualquier cosa que herede de la clase AsyncWrap es un recurso asíncrono.
Eventos de tiempo de vida de los recursos asincrónicos:
- init(asyncId, type, triggerAsyncId, resource): Se llama cuando se construye una clase que tiene la posibilidad de emitir un evento asíncrono.
- asyncId: un ID único para el recurso asíncrono.
- type: el tipo del recurso asíncrono.
- triggerAsyncId: el ID único del recurso asíncrono.
- recurso: la referencia al recurso que representa la operación asíncrona debe liberarse durante la destrucción.
- antes (asyncId) y después (asyncId):
- before se llama justo antes de que se ejecute la devolución de llamada del usuario registrado.
- after se llama inmediatamente después de que se ejecuta la devolución de llamada del usuario registrado.
- destroy(asyncId): Se llama después de que se destruya el recurso correspondiente a asyncId.
function destroy(id) { print({ stage: 'destroy', id }) } const hook = asyncHooks.createHook( { init, before, after, destroy })
Producción:
{id:2, type:'Timeout', triggerAsyncId:3 } {id:3, type:'TIMEWRAP', triggerAsyncId:3 } {stage: 'before', id: 4} {stage: 'before', id:2} 'User callback fired' {stage: 'after', id: 2} {stage: 'after', id:3} {stage: 'destroy', id: 2} {stage: 'destroy', id:3}
La API permite escuchar recursos asíncronos de bajo nivel desde los módulos nativos integrados del Node, como fs y net.
API de alto nivel de ganchos asíncronos El fs.stat, fs.read, fs.open, fs.close están representados por un proveedor y luego se exponen de una manera que tiene más sentido para los usuarios y luego se agrupan en operaciones de nivel superior. Básicamente, si estamos rastreando nuestro proceso, buscando el uso de la CPU, el uso de la memoria, no estamos tomando instantáneas del montón cada segundo, eso matará a nuestro servidor. Ahí llegamos a los enlaces asincrónicos donde necesitamos menos detalles mientras los servidores se ejecutan, hace que la operación sea más rápida y más información.
Nota:A Node.js también le encantaría exponer los temporizadores internos no empaquetados a través de async_hooks, pero actualmente son demasiado caros. Estos tampoco son necesarios para los casos de uso de CLS, pero para algunos casos de uso extremos, es posible que desee observar toda la actividad asíncrona, incluidos los temporizadores internos.
Uno podría imaginar un modo para async_hooks que haga que estos recursos internos también sean observables, y sería opcional ya que tiene un costo.
Publicación traducida automáticamente
Artículo escrito por divyanshu17bec1138 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA