Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add a Build Optimizer plugin to filter which files are processed #14998

Merged
merged 3 commits into from Jul 10, 2019

Conversation

filipesilva
Copy link
Contributor

No description provided.

@filipesilva filipesilva requested a review from clydin July 4, 2019 18:15
@filipesilva filipesilva added the target: major This PR is targeted for the next major release label Jul 4, 2019
@filipesilva
Copy link
Contributor Author

Compared the effect on AIO and saw some bundles became slightly smaller, sourcemaps also smaller, but main bundle 5kb large. Looking into why main is larger.

@filipesilva filipesilva force-pushed the bo-plugin branch 2 times, most recently from da05c99 to af590db Compare July 8, 2019 12:29
@filipesilva
Copy link
Contributor Author

Looking through the AIO sourcemaps and changing what files were skipped, I could see that the 5kb difference in main was due to skipping ngfactories (4kb) and skipping app files (1kb). Made changes to ensure those are never skipped. I am a bit surprised that made a difference. Maybe the app has unneeded imports?

With the current changes, the AIO size does not change at all. Some sourcemaps get up to 2kb smaller, which is good because it is less sourcemap to process.

The following files are skipped by BO altogether:

src\assets\js\prettify.js
node_modules\@webcomponents\custom-elements\custom-elements.min.js
node_modules\@webcomponents\custom-elements\src\native-shim.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.symbol.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.function.bind.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.function.name.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.function.has-instance.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.object.create.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.object.define-property.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.object.define-properties.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.object.get-own-property-descriptor.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.object.get-prototype-of.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.object.keys.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.object.get-own-property-names.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.object.freeze.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.object.seal.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.object.prevent-extensions.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.object.is-frozen.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.object.is-sealed.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.object.is-extensible.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.object.assign.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.object.is.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.object.set-prototype-of.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.object.to-string.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.array.is-array.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.array.from.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.array.of.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.array.join.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.array.slice.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.array.sort.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.array.for-each.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.array.map.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.array.filter.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.array.some.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.array.every.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.array.reduce.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.array.reduce-right.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.array.index-of.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.array.last-index-of.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.array.copy-within.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.array.fill.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.array.find.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.array.find-index.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.array.iterator.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.string.from-code-point.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.string.raw.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.string.trim.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.string.iterator.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.string.code-point-at.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.string.ends-with.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.string.includes.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.string.repeat.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.string.starts-with.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.string.anchor.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.string.big.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.string.blink.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.string.bold.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.string.fixed.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.string.fontcolor.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.string.fontsize.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.string.italics.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.string.link.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.string.small.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.string.strike.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.string.sub.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.string.sup.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.parse-int.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.parse-float.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.map.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.weak-map.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.set.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\web.dom-collections.iterator.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.promise.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\es\number\index.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\es\math\index.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\es\date\index.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\es\regexp\index.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\export.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\descriptors.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\is-object.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\redefine.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\to-indexed-object.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\string-at.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\collection.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\global.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\well-known-symbol.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\is-forced.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\internal-state.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\user-agent.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\perform.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\new-promise-capability.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\host-report-errors.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\promise-resolve.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\microtask.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\task.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\species-constructor.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.number.constructor.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.math.acosh.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.date.now.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.regexp.constructor.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\copy-constructor-properties.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\set-global.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\hide.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\object-get-own-property-descriptor.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.string.split.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.string.search.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.string.replace.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.string.match.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.regexp.flags.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.regexp.exec.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.regexp.to-string.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\path.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.date.to-primitive.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.date.to-string.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.date.to-iso-string.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.date.to-json.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.math.trunc.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.math.to-string-tag.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.math.tanh.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.math.sinh.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.math.sign.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.math.log2.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.math.log1p.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.math.log10.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.math.imul.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.math.hypot.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.math.fround.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.math.expm1.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.math.cosh.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.math.clz32.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.math.cbrt.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.math.atanh.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.math.asinh.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.number.to-precision.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.number.to-fixed.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.number.parse-int.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.number.parse-float.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.number.min-safe-integer.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.number.max-safe-integer.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.number.is-safe-integer.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.number.is-nan.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.number.is-integer.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.number.is-finite.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\modules\es.number.epsilon.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\fails.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\indexed-object.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\to-integer.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\inherit-if-required.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\set-to-string-tag.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\check-correctness-of-iteration.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\an-instance.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\iterate.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\native-symbol.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\uid.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\native-weak-map.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\hidden-keys.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\shared-key.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\has.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\a-function.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\an-object.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\document-create-element.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\html.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\string-trim.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\math-log1p.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\object-define-property.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\set-species.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\create-property-descriptor.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\ie8-dom-define.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\fix-regexp-well-known-symbol-logic.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\regexp-flags.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\regexp-exec.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\date-to-primitive.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\regexp-exec-abstract.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\date-to-iso-string.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\to-primitive.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\to-object.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\math-expm1.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\math-sign.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\advance-string-index.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\math-fround.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\require-object-coercible.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\to-length.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\this-number-value.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\parse-int.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\parse-float.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\string-repeat.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\is-integer.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\number-is-finite.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\classof-raw.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\object-set-prototype-of.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\call-with-safe-iteration-closing.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\get-iterator-method.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\function-to-string.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\bind-context.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\shared.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\is-array-iterator-method.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\whitespaces.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\same-value.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\get-built-in.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\is-regexp.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\object-property-is-enumerable.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\own-keys.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\object-get-own-property-names.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\object-create.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\internal-metadata.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\validate-set-prototype-of-arguments.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\classof.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\iterators.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\is-pure.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\object-get-own-property-symbols.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\object-keys-internal.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\enum-bug-keys.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\object-define-properties.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\freezing.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\redefine-all.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\dom-iterables.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\collection-strong.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\collection-weak.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\forced-string-html-method.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\create-html.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\array-includes.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\object-keys.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\correct-is-regexp-logic.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\validate-string-method-arguments.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\define-iterator.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\forced-string-trim-method.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\to-absolute-index.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\add-to-unscopables.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\array-methods.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\array-fill.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\array-copy-within.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\array-last-index-of.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\sloppy-array-method.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\array-reduce.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\array-method-has-species-support.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\array-for-each.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\create-property.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\is-array.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\array-from.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\object-to-string.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\object-assign.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\object-get-own-property-names-external.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\correct-prototype-getter.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\object-get-prototype-of.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\function-bind.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\enum-keys.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\define-well-known-symbol.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\wrapped-well-known-symbol.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\iterators-core.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\create-iterator-constructor.js
node_modules\@angular-devkit\build-angular\node_modules\core-js\internals\array-species-create.js
node_modules\lunr\lunr.js

This is good because they really should never be processed. AIO includes a very small amount of third party non-TS libraries so the isn't a big change to processing time or memory used. But most projects use many third party JS libraries. Some of these can be quite large and take a long time to be processed by BO. Often they also have language constructs that BO can break on. So it's good that we can minimize the processing.

@filipesilva
Copy link
Contributor Author

In #13734 (comment) I benchmarked a large project with BO:

$ benchmark -- node --max_old_space_size=8000 ./node_modules/@angular/cli/bin/ng build 3cconnect --prod --aot --build-optimizer
[benchmark] Benchmarking process over 5 iterations, with up to 5 retries.
[benchmark]   node --max_old_space_size=8000 ./node_modules/@angular/cli/bin/ng build 3cconnect --prod --aot --build-optimizer (at D:\sandbox\memory-debug\jsgoupil)
[benchmark] Process Stats
[benchmark]   Elapsed Time: 571885.00 ms (567385.00, 558561.00, 574671.00, 572119.00, 586689.00)
[benchmark]   Average Process usage: 2.93 process(es) (2.84, 2.90, 3.02, 2.89, 3.02)
[benchmark]   Peak Process usage: 8.40 process(es) (8.00, 8.00, 9.00, 8.00, 9.00)
[benchmark]   Average CPU usage: 11.00 % (10.82, 11.15, 11.26, 10.87, 10.89)
[benchmark]   Peak CPU usage: 333.82 % (381.40, 243.80, 272.00, 342.10, 429.80)
[benchmark]   Average Memory usage: 2997.71 MB (3094.71, 2923.23, 2899.82, 2987.55, 3083.24)
[benchmark]   Peak Memory usage: 5613.08 MB (5643.63, 5567.17, 5615.44, 5592.79, 5646.38)

Without BO:

[benchmark] Benchmarking process over 5 iterations, with up to 5 retries.
[benchmark]   node --max_old_space_size=8000 ./node_modules/@angular/cli/bin/ng build 3cconnect --prod --aot (at D:\sandbox\memory-debug\jsgoupil)
[benchmark] Process Stats
[benchmark]   Elapsed Time: 395413.60 ms (396473.00, 384629.00, 401091.00, 396822.00, 398053.00)
[benchmark]   Average Process usage: 2.56 process(es) (2.61, 2.53, 2.53, 2.52, 2.62)
[benchmark]   Peak Process usage: 8.00 process(es) (8.00, 8.00, 8.00, 8.00, 8.00)
[benchmark]   Average CPU usage: 10.42 % (10.50, 9.93, 10.76, 10.58, 10.32)
[benchmark]   Peak CPU usage: 297.14 % (307.80, 251.40, 293.70, 376.60, 256.20)
[benchmark]   Average Memory usage: 2483.32 MB (2481.63, 2471.55, 2518.96, 2451.15, 2493.35)
[benchmark]   Peak Memory usage: 5238.84 MB (5221.19, 5212.36, 5368.60, 5184.88, 5207.16)

Without BO build time dropped by ~170s and average/peak memory usage dropped by ~500mb.

And then with the BO changes in this PR:

[benchmark] Benchmarking process over 5 iterations, with up to 5 retries.
[benchmark]   node --max_old_space_size=8000 ./node_modules/@angular/cli/bin/ng build 3cconnect --prod --aot --build-optimizer (at D:\sandbox\memory-debug\jsgoupil)
[benchmark] Process Stats
[benchmark]   Elapsed Time: 564592.20 ms (570472.00, 565413.00, 578225.00, 558561.00, 550290.00)
[benchmark]   Average Process usage: 2.96 process(es) (2.93, 3.17, 2.92, 2.88, 2.91)
[benchmark]   Peak Process usage: 8.40 process(es) (8.00, 10.00, 8.00, 8.00, 8.00)
[benchmark]   Average CPU usage: 11.46 % (10.95, 12.08, 11.38, 11.60, 11.27)
[benchmark]   Peak CPU usage: 306.80 % (239.00, 417.00, 201.50, 368.70, 307.80)
[benchmark]   Average Memory usage: 2961.78 MB (3031.08, 2853.34, 3030.31, 2837.12, 3057.06)
[benchmark]   Peak Memory usage: 5414.72 MB (5550.48, 5177.64, 5654.16, 5275.87, 5415.47)

So a bit less, but not that much, which surprised me. I guess some of the other options we turn on with build optimizer might be a bit more impactful, like pure_getters and passes in here.

I did a couple single run benchmarks to check, still using the contents of this PR. With passes: 1:

[benchmark] Benchmarking process over 1 iterations, with up to 5 retries.
[benchmark]   node --max_old_space_size=8000 ./node_modules/@angular/cli/bin/ng build 3cconnect --prod --aot --build-optimizer (at D:\sandbox\memory-debug\jsgoupil)
[benchmark] Process Stats
[benchmark]   Elapsed Time: 500655.00 ms
[benchmark]   Average Process usage: 2.31 process(es)
[benchmark]   Peak Process usage: 8.00 process(es)
[benchmark]   Average CPU usage: 10.69 %
[benchmark]   Peak CPU usage: 184.30 %
[benchmark]   Average Memory usage: 2752.60 MB
[benchmark]   Peak Memory usage: 5110.10 MB

With pure_getters: false:

[benchmark] Benchmarking process over 1 iterations, with up to 5 retries.
[benchmark]   node --max_old_space_size=8000 ./node_modules/@angular/cli/bin/ng build 3cconnect --prod --aot --build-optimizer (at D:\sandbox\memory-debug\jsgoupil)
[benchmark] Process Stats
[benchmark]   Elapsed Time: 561175.00 ms
[benchmark]   Average Process usage: 2.87 process(es)
[benchmark]   Peak Process usage: 8.00 process(es)
[benchmark]   Average CPU usage: 12.46 %
[benchmark]   Peak CPU usage: 307.90 %
[benchmark]   Average Memory usage: 2841.40 MB
[benchmark]   Peak Memory usage: 5182.77 MB

With both passes: 1 and pure_getters: false:

[benchmark] Benchmarking process over 1 iterations, with up to 5 retries.
[benchmark]   node --max_old_space_size=8000 ./node_modules/@angular/cli/bin/ng build 3cconnect --prod --aot --build-optimizer (at D:\sandbox\memory-debug\jsgoupil)
[benchmark] Process Stats
[benchmark]   Elapsed Time: 487098.00 ms
[benchmark]   Average Process usage: 2.20 process(es)
[benchmark]   Peak Process usage: 8.00 process(es)
[benchmark]   Average CPU usage: 10.82 %
[benchmark]   Peak CPU usage: 265.60 %
[benchmark]   Average Memory usage: 2755.03 MB
[benchmark]   Peak Memory usage: 5079.72 MB

Between those two, it looks like passes: 3 is the main source of increased build time, but both contribute to memory usage. We should focus on #14316 again to improve performance.

) {
// Only TS packages should use Build Optimizer.
const typings = resolveData.descriptionFileData.typings;
// Note: a TS package might not have defined typings but still use .d.ts files next to
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe an additional note that this will also enable build optimizer for JS origin packages that happen to have a typings file?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, that's another limitation. Added.

Using this webpack allows determining in advance if files from a package should be skipped by the Build Optimizer loader.
@googlebot
Copy link

So there's good news and bad news.

👍 The good news is that everyone that needs to sign a CLA (the pull request submitter and all commit authors) have done so. Everything is all good there.

😕 The bad news is that it appears that one or more commits were authored or co-authored by someone other than the pull request submitter. We need to confirm that all authors are ok with their commits being contributed to this project. Please have them confirm that here in the pull request.

Note to project maintainer: This is a terminal state, meaning the cla/google commit status will not change from this state. It's up to you to confirm consent of all the commit author(s), set the cla label to yes (if enabled on your project), and then merge this pull request when appropriate.

ℹ️ Googlers: Go here for more info.

@googlebot googlebot added cla: no and removed cla: yes labels Jul 9, 2019
@googlebot
Copy link

CLAs look good, thanks!

ℹ️ Googlers: Go here for more info.

@googlebot googlebot added cla: yes and removed cla: no labels Jul 9, 2019
@angular-automatic-lock-bot
Copy link

This issue has been automatically locked due to inactivity.
Please file a new issue if you are encountering a similar or related problem.

Read more about our automatic conversation locking policy.

This action has been performed automatically by a bot.

@angular-automatic-lock-bot angular-automatic-lock-bot bot locked and limited conversation to collaborators Sep 13, 2019
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
target: major This PR is targeted for the next major release
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants