fix(@angular-devkit/build-angular): disable Worker wait loop for TS/NG parallel compilation in web containers#26265
Merged
alan-agius4 merged 2 commits intoangular:mainfrom Nov 8, 2023
Conversation
alan-agius4
approved these changes
Nov 7, 2023
…mpilation inside WebContainers" This reverts commit 421c175.
…G parallel compilation in web containers When using the `application` builder, a parallel TS/NG compilation is used that is run inside a Node.js Worker. This Worker by default uses an Atomics-based wait loop to improve performance while waiting for messages. This loop relies on the synchronous API `receiveMessageOnPort`. While this works well in Node.js, the web container execution environment does not currently support passing transferable objects via `receiveMessageOnPort`. Attempting to do so will cause a serialization error and a failed application build. To avoid this problem, the wait loop optimization is disabled when the web container execution environment is detected. This change is only needed for the TS/NG compilation as no other parallel operation within the build system currently uses `receiveMessageOnPort` with transferable objects.
f256076 to
d84f04d
Compare
Contributor
|
Just to add some extra color here: I have tested the build with parallel compilation enabled and atomic loop disabled and it seems to work well in Chrome for both initial build and re-compilation. In Firefox the initial build also seems to work now, but it still gets stuck on re-compilation, but not always. Sometimes it worked. I am still trying to understand what's going on here. But at least the initial build now seems to work in Firefox as well. |
|
This issue has been automatically locked due to inactivity. Read more about our automatic conversation locking policy. This action has been performed automatically by a bot. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

When using the
applicationbuilder, a parallel TS/NG compilation is used that is run inside a Node.js Worker.This Worker by default uses an Atomics-based wait loop to improve performance while waiting for messages. This
loop relies on the synchronous API
receiveMessageOnPort. While this works well in Node.js, the web containerexecution environment does not currently support passing transferable objects via
receiveMessageOnPort. Attemptingto do so will cause a serialization error and a failed application build. To avoid this problem, the wait loop
optimization is disabled when the web container execution environment is detected. This change is only needed
for the TS/NG compilation as no other parallel operation within the build system currently uses
receiveMessageOnPortwith transferable objects.