Experimental variant on #57465 with two optimizations - #57660
Closed
Dan Vanderkam (danvk) wants to merge 29 commits into
Closed
Experimental variant on #57465 with two optimizations#57660Dan Vanderkam (danvk) wants to merge 29 commits into
Dan Vanderkam (danvk) wants to merge 29 commits into
Conversation
This reverts commit 4e79d76.
Member
|
TypeScript Bot (@typescript-bot) perf test this |
Contributor
Contributor
|
Jake Bailey (@jakebailey) Here they are:
tscComparison Report - baseline..pr
System info unknown
Hosts
Scenarios
tsserverComparison Report - baseline..pr
System info unknown
Hosts
Scenarios
startupComparison Report - baseline..pr
System info unknown
Hosts
Scenarios
Developer Information: |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Contributor
Author
|
I'm surprised this wasn't a win. Might be time to stop optimizing this! |
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.
This adds two optimizations to #57465:
trueTypeis a large union (20+ constituents) then split it into two chunks when callinggetFlowTypeOfReference. The first chunk has the first 10 types, the second has the remainder. If the first chunk doesn't narrow toneverthen we don't have to check the second. This is a huge win on Use union types for all common classes of AST nodes #54148. On my laptop it reduces the time for the most extreme check from 312ms→140ms by only checking 10/112 types in the union. There are several other expensive calls on that PR that it's able to bypass as well. This has less of an effect on the Compiler-Unions benchmark.x => x === y(or==,!==,!=). These can only be type predicates ifyis a unit type likenullorundefined, but that can be expensive to determine via the usual calls togetFlowTypeOfReferenceifxandyare both large union types. In both Compiler-Unions and Use union types for all common classes of AST nodes #54148 there are some expensive checks that this bypasses, notablyd => d === objectLiteralDeclaration.In local testing these help on both Compiler-Unions and #54148. The
x === yoptimization is definitely targeted at a specific case in Compiler-Unions, but it's a win on #54148 as well, so perhaps it does generalize.