nestjs-cls icon indicating copy to clipboard operation
nestjs-cls copied to clipboard

docs: Address performance and stability concerns

Open joebowbeer opened this issue 4 years ago • 3 comments

I suggest adding additional sections to the README or FAQ:

Performance concerns with AsyncLocalStorage?

This question sometimes arises because of early concerns with async_hooks performance.

See for example: https://github.com/iamolegga/nestjs-pino/issues/322

Is there currently a concern? (I am not aware of any.)

Stability of AsyncLocalStorage?

According to Node documentation, AsyncLocalStorage is stable, even though the parent async_hooks is still experimental.

https://nodejs.org/api/async_context.html#class-asynclocalstorage

Could a more performant request-scoped provider implementation solve this problem?

I wouldn't be so sure that using AsyncLocalStorage atm would be better (performance-wise) than properly designed request-scoped providers. - from https://github.com/nestjs/nest/pull/1407#issuecomment-944042478

In addition to performance, another problem with request-scoped providers is the scope hierarchy implementation in NestJS:

Scope bubbles up the injection chain. A controller that depends on a request-scoped provider will, itself, be request-scoped.

See https://stackoverflow.com/a/59681868/901597

This provider does not have this restriction.

joebowbeer avatar Nov 28 '21 23:11 joebowbeer

I agree that this should be in the Readme - maybe under Security considerations? If you don't mind and have the time, you can suggest the edit in https://github.com/Papooch/nestjs-cls/pull/11. I've not had much time lately, but I'm planning to add some git actions and revising the Readme by the end of the week.

Papooch avatar Nov 29 '21 09:11 Papooch

I think it would be great to compare this lib with nestjs's durable providers feature in terms of performance gains.

micalevisk avatar Dec 10 '22 02:12 micalevisk

Yup, it would be nice to to have a benchmark, maybe someday I can make myself create one. However, it's important to note that AsyncLocalStorage and Request scoped providers don't have 100% feature overlap, so performance is not the key decision factor here.

Papooch avatar Dec 10 '22 16:12 Papooch