Papooch / nestjs-cls

A continuation-local storage (async context) module compatible with NestJS's dependency injection.
https://papooch.github.io/nestjs-cls/
MIT License
393 stars 23 forks source link

docs: Address performance and stability concerns #12

Open joebowbeer opened 2 years ago

joebowbeer commented 2 years ago

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.

Papooch commented 2 years ago

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.

micalevisk commented 1 year ago

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

Papooch commented 1 year ago

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.