angular-cn/packages/compiler-cli/ngcc/test
George Kalpakas e36e6c85ef perf(ngcc): process tasks in parallel in async mode (#32427)
`ngcc` supports both synchronous and asynchronous execution. The default
mode when using `ngcc` programmatically (which is how `@angular/cli` is
using it) is synchronous. When running `ngcc` from the command line
(i.e. via the `ivy-ngcc` script), it runs in async mode.

Previously, the work would be executed in the same way in both modes.

This commit improves the performance of `ngcc` in async mode by
processing tasks in parallel on multiple processes. It uses the Node.js
built-in [`cluster` module](https://nodejs.org/api/cluster.html) to
launch a cluster of Node.js processes and take advantage of multi-core
systems.

Preliminary comparisons indicate a 1.8x to 2.6x speed improvement when
processing the angular.io app (apparently depending on the OS, number of
available cores, system load, etc.). Further investigation is needed to
better understand these numbers and identify potential areas of
improvement.

Inspired by/Based on @alxhub's prototype: alxhub/angular@cb631bdb1
Original design doc: https://hackmd.io/uYG9CJrFQZ-6FtKqpnYJAA?view

Jira issue: [FW-1460](https://angular-team.atlassian.net/browse/FW-1460)

PR Close #32427
2019-09-09 15:55:13 -04:00
..
analysis refactor(ivy): ngcc - remove `formatProperty` from `EntryPointBundle` (#32052) 2019-08-08 11:14:38 -07:00
dependencies perf(ngcc): process tasks in parallel in async mode (#32427) 2019-09-09 15:55:13 -04:00
entry_point_finder fix(ngcc): do not analyze dependencies for non Angular entry-points (#32303) 2019-08-26 10:08:44 -07:00
execution perf(ngcc): process tasks in parallel in async mode (#32427) 2019-09-09 15:55:13 -04:00
helpers perf(ngcc): process tasks in parallel in async mode (#32427) 2019-09-09 15:55:13 -04:00
host fix(ivy): ngcc should only index .d.ts exports within the package (#32129) 2019-08-15 14:46:00 -07:00
integration perf(ngcc): process tasks in parallel in async mode (#32427) 2019-09-09 15:55:13 -04:00
logging feat(compiler-cli): ngcc - make logging more configurable (#29591) 2019-04-01 11:53:28 -07:00
migrations refactor(ivy): ngcc - remove `formatProperty` from `EntryPointBundle` (#32052) 2019-08-08 11:14:38 -07:00
packages refactor(ngcc): abstract updating `package.json` files behind an interface (#32427) 2019-09-09 15:55:13 -04:00
rendering refactor(ivy): move directive, component and pipe factories to ngFactoryFn (#31953) 2019-08-27 13:57:00 -07:00
writing refactor(ngcc): abstract updating `package.json` files behind an interface (#32427) 2019-09-09 15:55:13 -04:00
BUILD.bazel refactor(ngcc): implement task selection for parallel task execution (#32427) 2019-09-09 15:55:13 -04:00
utils_spec.ts refactor(ivy): ngcc - implement new module resolver (#29643) 2019-04-29 12:37:21 -07:00