Go to file
George Kalpakas 9270d3f279 refactor(ngcc): take advantage of early knowledge about format property processability (#32427)
In the past, a task's processability didn't use to be known in advance.
It was possible that a task would be created and added to the queue
during the analysis phase and then later (during the compilation phase)
it would be found out that the task (i.e. the associated format
property) was not processable.

As a result, certain checks had to be delayed, until a task's processing
had started or even until all tasks had been processed. Examples of
checks that had to be delayed are:
- Whether a task can be skipped due to `compileAllFormats: false`.
- Whether there were entry-points for which no format at all was
  successfully processed.

It turns out that (as made clear by the refactoring in 9537b2ff8), once
a task starts being processed it is expected to either complete
successfully (with the associated format being processed) or throw an
error (in which case the process will exit). In other words, a task's
processability is known in advance.

This commit takes advantage of this fact by moving certain checks
earlier in the process (e.g. in the analysis phase instead of the
compilation phase), which in turn allows avoiding some unnecessary work.
More specifically:

- When `compileAllFormats` is `false`, tasks are created _only_ for the
  first suitable format property for each entry-point, since the rest of
  the tasks would have been skipped during the compilation phase anyway.
  This has the following advantages:
  1. It avoids the slight overhead of generating extraneous tasks and
     then starting to process them (before realizing they should be
     skipped).
  2. In a potential future parallel execution mode, unnecessary tasks
     might start being processed at the same time as the first (useful)
     task, even if their output would be later discarded, wasting
     resources. Alternatively, extra logic would have to be added to
     prevent this from happening. The change in this commit avoids these
     issues.
- When an entry-point is not processable, an error will be thrown
  upfront without having to wait for other tasks to be processed before
  failing.

PR Close #32427
2019-09-09 15:55:13 -04:00
.circleci ci: work around `CIRCLE_COMPARE_URL` not being available wih CircleCI Pipelines (#32537) 2019-09-09 12:21:44 -04:00
.devcontainer build: add recommended config files for VSCode remote development (#30450) 2019-05-20 10:13:53 -07:00
.github ci: move to latest lock-closed commit for github action (#32502) 2019-09-05 18:08:10 -04:00
.vscode build: add recommended config files for VSCode remote development (#30450) 2019-05-20 10:13:53 -07:00
aio docs: edit copy and example in hierarchical injectors guide (#32501) 2019-09-06 18:28:42 -04:00
docs docs: create Issue and Pull Request markdown doc, explaining automatic locking policy (#32405) 2019-08-30 14:44:24 -04:00
integration feat(language-service): add script to rebuild, refresh Angular dist (#32515) 2019-09-06 18:28:06 -04:00
modules refactor(benchpress): remove two mutable exports from largetable/util.ts (#32425) 2019-09-04 11:40:47 -07:00
packages refactor(ngcc): take advantage of early knowledge about format property processability (#32427) 2019-09-09 15:55:13 -04:00
scripts ci: work around `CIRCLE_COMPARE_URL` not being available wih CircleCI Pipelines (#32537) 2019-09-09 12:21:44 -04:00
third_party build: bump yarn requirement to 1.17.3 (#32344) 2019-08-28 17:13:05 -07:00
tools refactor(ivy): remove `i18nLocalize` instruction (#31609) 2019-08-30 12:53:26 -07:00
.bazelignore build: update to rules_nodejs 0.32.2 (#31325) 2019-07-01 14:16:42 -07:00
.bazelrc build: use bazel workers for ngc and tsc in local development (#32246) 2019-08-21 15:21:52 -07:00
.clang-format feat(tooling): Add a .clang-format for automated JavaScript formatting. 2015-04-02 08:44:34 -07:00
.editorconfig build: use https link to editorconfig.org in .editorconfig (#27664) 2018-12-18 09:30:09 -08:00
.gitattributes test: fix ts api guardian and public guard tests on windows (#30105) 2019-04-26 16:32:22 -07:00
.gitignore build: add .vimrc to .gitignore (#32253) 2019-08-22 06:40:20 -07:00
.mailmap build: add a Git .mailmap with my new name (#19550) 2017-10-09 14:35:30 -07:00
.nvmrc build: update .nvmrc file to correct node version (#25992) 2018-09-18 13:11:58 -07:00
BUILD.bazel build: update to rules_nodejs 0.32.2 (#31325) 2019-07-01 14:16:42 -07:00
CHANGELOG.md release: cut the v9.0.0-next.5 release 2019-09-04 15:26:05 -07:00
CODE_OF_CONDUCT.md docs: fix community tab in GitHub by copying CoC 2018-02-27 19:02:30 -08:00
CONTRIBUTING.md build: add `ngcc` as a valid commit message scope (#32144) 2019-08-15 10:33:36 -07:00
LICENSE build: bump year (#27880) 2019-01-11 11:15:59 -08:00
README.md docs: fix typo of Typescript to TypeScript (#32153) 2019-08-15 12:44:41 -07:00
WORKSPACE build: bump yarn requirement to 1.17.3 (#32344) 2019-08-28 17:13:05 -07:00
browser-providers.conf.js ci: re-enable chrome mobile tests on android (#32447) 2019-09-03 11:58:30 -07:00
browser_repositories.bzl build(bazel): update to latest stable chromium 74 on osx and linux for karma under bazel (#30502) 2019-05-16 14:38:14 -07:00
gulpfile.js build(zone.js): add changelog gulptask for zone.js (#31852) 2019-07-26 11:30:08 -07:00
karma-js.conf.js refactor(ivy): update the compiler to emit `$localize` tags (#31609) 2019-08-30 12:53:26 -07:00
package.json release: cut the v9.0.0-next.5 release 2019-09-04 15:26:05 -07:00
protractor-perf.conf.js fixup! test(ivy): make the test run with benchpress (#30449) 2019-05-16 20:04:04 -07:00
renovate.json ci: update packageFiles to be renovated (#29071) 2019-03-05 09:43:23 -08:00
shims_for_IE.js Revert "refactor: add license header to JS files & format files (#12035)" 2016-10-04 14:06:41 -07:00
test-events.js fix(platform-browser): run BLACK_LISTED_EVENTS outside of ngZone (#18993) 2017-09-05 15:33:22 -05:00
test-main.js refactor(ivy): update the compiler to emit `$localize` tags (#31609) 2019-08-30 12:53:26 -07:00
tslint.json refactor: remove toplevel property accesses (#29329) 2019-05-16 12:08:49 -07:00
yarn.lock feat(bazel): update to the latest `@microsoft/api-extractor` (#32185) 2019-08-30 13:55:32 -04:00
yarn.lock.readme.md build: remove travisci leftovers (#27979) 2019-01-09 10:41:16 -08:00

README.md

CircleCI BrowserStack Status Join the chat at https://gitter.im/angular/angular npm version

Angular

Angular is a development platform for building mobile and desktop web applications using TypeScript/JavaScript and other languages.

Quickstart

Get started in 5 minutes.

Changelog

Learn about the latest improvements.

Want to help?

Want to file a bug, contribute some code, or improve documentation? Excellent! Read up on our guidelines for contributing and then check out one of our issues in the hotlist: community-help.