circular-dependency-plugin icon indicating copy to clipboard operation
circular-dependency-plugin copied to clipboard

Circular dependency checker can be slow

Open vbraun opened this issue 4 years ago • 1 comments

Angular runs circular-dependency-plugin on each incremental build, so speed is somewhat important

On a largeish hybrid app with complicate imports (in particular, the angularjs part doesn't use modules / barrel files, so the import graph is pretty complicated) a no-change incremental build is about 8s with and 3s without circular dependency checking on a state of the art desktop.

Initially reported at https://github.com/angular/angular-cli/issues/19794

There is a PR languishing at #49, but Tarjan's algorithm is also suboptimal for detecting whether there is a cycle (however it is a good algorithm for enumerating all cycles).

See also: https://stackoverflow.com/questions/261573/best-algorithm-for-detecting-cycles-in-a-directed-graph

vbraun avatar Jan 15 '21 12:01 vbraun

Tarjan's algorithm is also suboptimal for detecting whether there is a cycle (however it is a good algorithm for enumerating all cycles).

It's linear in the number of modules + dependencies. Can you do better than that to find if a cycle exists?

hedgepigdaniel avatar Dec 15 '21 00:12 hedgepigdaniel