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

Watch mode: rebuild takes too long after adding a simple console.log to file (~2 minutes) #42173

Closed
OliverJAsh opened this issue Jan 1, 2021 · 25 comments
Labels
Design Limitation Constraints of the existing architecture prevent this from being fixed Domain: Declaration Emit The issue relates to the emission of d.ts files Rescheduled This issue was previously scheduled to an earlier milestone

Comments

@OliverJAsh
Copy link
Contributor

OliverJAsh commented Jan 1, 2021

Bug Report

πŸ”Ž Search Terms

performance, tsc, watch, build, rebuild, declaration, emit, incremental

πŸ•— Version & Regression Information

This is the behavior in every version I tried, and I reviewed the FAQ for entries about performance.

⏯ Playground Link

Unfortunately I cannot provide a reduced test case as I can only reproduce this on our very large project.

πŸ’» Code

TypeScript 4.1.2

  1. Clone and checkout https://github.com/unsplash/unsplash-web/tree/typescript-watch-issue, branch typescript-watch-issue. This is a private repository but I believe some members of the TS team already have access from debugging previous issues. If you don't have access, please send me your email address so I can provide access (TS team members only).
  2. Run yarn to install TS
  3. Run tsc --build ./tsconfig.json --watch
  4. Wait for the first build to complete
  5. Go to file app/actions/index.ts and add this line anywhere in the file, e.g. at the very bottom: console.log('foo')
  6. Save the changes to trigger tsc to rebuild

πŸ™ Actual behavior

The rebuild takes too long. On my machine it takes over 2 minutes.

πŸ™‚ Expected behavior

I expected the rebuild to be very fast, because we're using all of the performance optimisations at our disposal: e.g. incremental and project references.


One thing I noticed that might be helpful for debugging: the generated declaration file for app/actions/index.tsβ€”target-tsc-build/app/actions/index.d.tsβ€”is fairly small after the first build (after step 4) but then for some reason it is significantly larger after the second build (after step 6). I don't understand why these declarations would change after such a simple change.

Subsequent changes to this file do not suffer from this problem, e.g. if we remove the console.log('foo') line that was added in step 5 and then save the changes to trigger another rebuild, the rebuild is very fast.

@RyanCavanaugh RyanCavanaugh added the Needs Investigation This issue needs a team member to investigate its status. label Jan 4, 2021
@RyanCavanaugh RyanCavanaugh added this to the TypeScript 4.3.0 milestone Jan 4, 2021
@OliverJAsh
Copy link
Contributor Author

I tested this again and the rebuild took closer to 1.5 minutes than 2 minutes (TypeScript 4.1.2).

I then upgraded to TypeScript 4.2 RC and repeated the test, and it seemed like there was no improvement.

I don't know how realistic this is but I would like to see rebuilds in the single digits, especially if I'm just adding a console.log for debugging purposes like in my example above.

@sheetalkamat
Copy link
Member

This is because the d.ts emit takes long time.. The project in question C:/temp/unsplash-web/tsconfig.app.json seems to spend lot of time in .d.ts emit and you would need to diagnose which type is causing this and help annotate it.
Checking with @amcasey to see if our profiling tool can help you with that.

Below shows the timings:

[2:49:14 PM] Starting compilation in watch mode...

[2:49:14 PM] Projects in this build:
    * shared/tsconfig.json
    * tsconfig.app.json
    * webpack/tsconfig.json
    * cypress/tsconfig.json
    * build-tracker/tsconfig.json
    * service-worker/tsconfig.json
    * tsconfig.json

[2:49:14 PM] Project 'shared/tsconfig.json' is out of date because output file 'target-tsc-build/shared/api-env.js' does not exist

[2:49:14 PM] Building project 'C:/temp/unsplash-web/shared/tsconfig.json'...

Files:                         498
Lines:                       86589
Nodes:                      440466
Identifiers:                172459
Symbols:                    208442
Types:                       90036
Instantiations:             270050
Memory used:               261562K
Assignability cache size:    13073
Identity cache size:          1379
Subtype cache size:            929
Strict subtype cache size:      53
I/O Read time:               0.10s
Parse time:                  1.28s
ResolveModule time:          0.74s
ResolveTypeReference time:   0.02s
Program time:                2.30s
Bind time:                   0.83s
Check time:                  3.99s
transformTime time:          1.20s
commentTime time:            0.32s
printTime time:              2.65s
Emit time:                   2.66s
Source Map time:             0.08s
I/O Write time:              0.18s
Total time:                  9.78s
[2:49:24 PM] Project 'tsconfig.app.json' is out of date because output file 'target-tsc-build/setup-env-vars.js' does not exist

[2:49:24 PM] Building project 'C:/temp/unsplash-web/tsconfig.app.json'...

Files:                        2304
Lines:                      271633
Nodes:                     1081995
Identifiers:                376118
Symbols:                    829944
Types:                      362773
Instantiations:            1782816
Memory used:               924367K
Assignability cache size:   317066
Identity cache size:         12640
Subtype cache size:          21189
Strict subtype cache size:   51065
I/O Read time:               0.27s
Parse time:                  1.26s
ResolveModule time:          3.60s
ResolveTypeReference time:   0.04s
Program time:                5.84s
Bind time:                   0.74s
Check time:                 28.49s
transformTime time:         86.70s
commentTime time:            9.13s
printTime time:            124.35s
Emit time:                 124.46s
Source Map time:             2.24s
I/O Write time:              3.74s
Total time:                159.54s
[2:52:10 PM] Project 'webpack/tsconfig.json' is out of date because output file 'target-tsc-build/webpack/client.config.js' does not exist

[2:52:10 PM] Building project 'C:/temp/unsplash-web/webpack/tsconfig.json'...

Files:                          317
Lines:                        91119
Nodes:                       437593
Identifiers:                 168473
Symbols:                     162913
Types:                        62147
Instantiations:               65642
Memory used:               1012688K
Assignability cache size:     11352
Identity cache size:             59
Subtype cache size:              47
Strict subtype cache size:       97
ResolveModule time:           0.44s
ResolveTypeReference time:    0.05s
I/O Read time:                0.02s
Parse time:                   0.23s
Program time:                 0.78s
Bind time:                    0.17s
Check time:                   2.36s
transformTime time:           0.03s
commentTime time:             0.03s
printTime time:               0.24s
Emit time:                    0.24s
Source Map time:              0.02s
I/O Write time:               0.01s
Total time:                   3.55s
[2:52:14 PM] Project 'cypress/tsconfig.json' is out of date because output file 'target-tsc-build/cypress/integration/about.test.js' does not exist

[2:52:14 PM] Building project 'C:/temp/unsplash-web/cypress/tsconfig.json'...

Files:                          369
Lines:                       150680
Nodes:                       579199
Identifiers:                 232928
Symbols:                     208554
Types:                        92307
Instantiations:              131663
Memory used:               1188108K
Assignability cache size:     11610
Identity cache size:             84
Subtype cache size:             485
Strict subtype cache size:       32
ResolveModule time:           0.23s
ResolveTypeReference time:    0.03s
I/O Read time:                0.03s
Parse time:                   0.46s
Program time:                 0.80s
Bind time:                    0.20s
Check time:                   3.55s
transformTime time:           0.12s
commentTime time:             0.16s
printTime time:               1.23s
Emit time:                    1.24s
Source Map time:              0.13s
I/O Write time:               0.07s
Total time:                   5.78s
[2:52:22 PM] Project 'build-tracker/tsconfig.json' is out of date because output file 'target-tsc-build/build-tracker/config.js' does not exist

[2:52:22 PM] Building project 'C:/temp/unsplash-web/build-tracker/tsconfig.json'...

Files:                          229
Lines:                        40649
Nodes:                       201041
Identifiers:                  77851
Symbols:                      68195
Types:                        33032
Instantiations:               41225
Memory used:               1236180K
Assignability cache size:      3927
Identity cache size:             21
Subtype cache size:              34
Strict subtype cache size:        1
ResolveModule time:           0.19s
ResolveTypeReference time:    0.01s
I/O Read time:                0.01s
Parse time:                   0.01s
Program time:                 0.24s
Bind time:                    0.01s
Check time:                   1.53s
transformTime time:           0.01s
commentTime time:             0.02s
printTime time:               0.14s
Emit time:                    0.14s
Source Map time:              0.01s
I/O Write time:               0.01s
Total time:                   1.92s
[2:52:24 PM] Project 'service-worker/tsconfig.json' is out of date because output file 'target-tsc-build/service-worker/service-worker.js' does not exist

[2:52:24 PM] Building project 'C:/temp/unsplash-web/service-worker/tsconfig.json'...

Files:                           13
Lines:                        12402
Nodes:                        50116
Identifiers:                  19623
Symbols:                      12673
Types:                         4275
Instantiations:                1441
Memory used:               1240090K
Assignability cache size:       531
Identity cache size:              0
Subtype cache size:               4
Strict subtype cache size:        0
I/O Read time:                0.00s
Parse time:                   0.07s
Program time:                 0.08s
Bind time:                    0.03s
Check time:                   0.21s
transformTime time:           0.00s
commentTime time:             0.01s
printTime time:               0.03s
Emit time:                    0.03s
Source Map time:              0.00s
I/O Write time:               0.00s
Total time:                   0.35s
[2:52:25 PM] Found 0 errors. Watching for file changes.

[2:57:22 PM] File change detected. Starting incremental compilation...

[2:57:23 PM] Project 'tsconfig.app.json' is out of date because oldest output 'target-tsc-build/setup-env-vars.js' is older than newest input 'shared/tsconfig.json'

[2:57:23 PM] Building project 'C:/temp/unsplash-web/tsconfig.app.json'...

[2:59:46 PM] Updating unchanged output timestamps of project 'C:/temp/unsplash-web/tsconfig.app.json'...

Files:                         2304
Lines:                       271633
Nodes:                      1082001
Identifiers:                 376120
Symbols:                     688235
Types:                       252676
Instantiations:             1619352
Memory used:               1180215K
Assignability cache size:    115910
Identity cache size:          11865
Subtype cache size:           19658
Strict subtype cache size:    50671
I/O Read time:                0.39s
Parse time:                   2.03s
ResolveModule time:           4.19s
ResolveTypeReference time:    0.05s
Program time:                 7.40s
Bind time:                    1.16s
Check time:                  26.09s
transformTime time:          90.71s
commentTime time:             4.13s
printTime time:             106.38s
Emit time:                  106.43s
Source Map time:              0.45s
I/O Write time:               0.89s
Total time:                 141.08s
[2:59:47 PM] Found 0 errors. Watching for file changes.

@sheetalkamat sheetalkamat added Design Limitation Constraints of the existing architecture prevent this from being fixed Domain: Declaration Emit The issue relates to the emission of d.ts files labels Apr 30, 2021
@sheetalkamat
Copy link
Member

Just chatted with @amcasey offline and here is the link to analyze the trace https://www.npmjs.com/package/@amcasey/ts-analyze-trace but it might not show anything apart from the fact that d.ts is slow.. He will be looking into improving analysing which type causes slow conversion but thats not yet part of it

@amcasey amcasey assigned amcasey and unassigned sheetalkamat Apr 30, 2021
@amcasey
Copy link
Member

amcasey commented Apr 30, 2021

At present, that tool specifically only outputs information about check time. However, it builds on an underlying tracing system that will show tracing time. Unfortunately, it nearly always just shows that many files took a small amount of time each. I've been working on figuring out how to pinpoint problematic input code.

@OliverJAsh
Copy link
Contributor Author

Do you expect the changes in 4.3 beta (#43314) will help improve this issue at all?

@sheetalkamat
Copy link
Member

Don’t think so .. at least for the scenario you shared .. because at some point you do need .d.ts calculation and that’s where the issue lies

@amcasey
Copy link
Member

amcasey commented May 5, 2021

I spent time trying to enhance the tracing code for another project with slow emit and found more or less what I expected - that tracing is not well-suited to identifying why emit is slow. Basically, tracing is fundamentally about finding individual expensive calls. When cost is spread across lots of little calls with the same stack, it's more effective to use a profiler. Nevertheless, I added a bunch of tiny tracepoints (and disabled sampling), in case there was something I could learn by aggregating. Some observations:

  1. When outputting JS, printing takes much longer than transforming. Unsurprisingly, the reverse is true when outputting declaration files.
  2. Most transformation time is spent in typeToTypeNode. For this repo on this box, a slow call was around 40ms (i.e. well below the threshold where tracing would help) and an average call was closer to 0.5ms. Some types were converted many times, so a cache might help, but it would be non-trivial because a complex "context" object guides each conversion (maybe it's always the same in practice?).
  3. So far, there are no obvious hotspots in printing (via either tracing or profiler), but it's hard to pick apart because of the deep, recursive call stacks.
  4. A bunch of time is spent writing the files to disk but, in build mode, it doesn't count towards either transformation or print time.

My personal, but unverified, suspicious is that types that require an import() expression in .d.ts files are slow to emit. Typically, the easiest way to get rid of those, is to explicitly import the required assembly in the input file so that it can be used in the output file. (These are easy to find with grep and I'd love to hear whether cleaning them up helps.)

@OliverJAsh I don't have access to your sample repo. It's not urgent, since I don't expect the results to be different than for the repos I've already looked at, but I'm happy to confirm, if you're interested. first.last@microsoft

@OliverJAsh
Copy link
Contributor Author

@amcasey You should now have access.

Typically, the easiest way to get rid of those, is to explicitly import the required assembly in the input file so that it can be used in the output file. (These are easy to find with grep and I'd love to hear whether cleaning them up helps.)

Any guidance on this would be really appreciated. I've tried to optimise declaration size and emit time using the tricks mentioned in #34119 but this is as good as I could get it. I wish we didn't have to resort to these tricks.

@sheetalkamat
Copy link
Member

sheetalkamat commented May 5, 2021

@OliverJAsh do you mind trying #41219 to see if that is helping in your scenario.. That PR will skip calculating d.ts all together and assume that all your changes are always affect your dependency tree. so there is some trade off with that PR but given that in your code time spent in d.ts is larger even for non local change it might be acceptable.. Just a thought.. we are weighing benefits of that PR and option so your feedback would be helpful.

#41219 (comment) has installable build from master with the change

Thanks

@sheetalkamat
Copy link
Member

Also #43973 might be relevant to you in case its some kind of visibility calculation taking longer

@amcasey
Copy link
Member

amcasey commented May 5, 2021

@OliverJAsh Step one for getting rid of the tricks is working with engaged community members to identify best practices we can identify and automate. ;)

Looks like you're going to hit some snags when you move to TS 4.2 because of the DOM updates. You'll need to update @types/resize-observer-browser.

I'm starting with a full build because that's easier to reason about than an incremental build. I'm already seeing 10 or files that each take 2-3 seconds to emit, which is crazy. I'll investigate. Are you okay with me posting paths and sketchy details in this issue or do you want to discuss project-specific issues over email (you have mine)?

Edit: There are 5 files emitted slowly and they're each emitted twice. (?!)

@amcasey
Copy link
Member

amcasey commented May 6, 2021

Incidentally, you're spending about 1.5 seconds checking @babel/types. If you don't have a good reason not to, you might want to enable skipLibCheck.

@amcasey
Copy link
Member

amcasey commented May 6, 2021

@sheetalkamat Individual .d.ts files are being emitted more than once (and I'm pretty confident the second one isn't a no-op since it also takes multiple seconds). Expected?

First stack

emitDeclarationFileOrBundle (e:\ts_gh\src\compiler\emitter.ts:452)
emitSourceFileOrBundle (e:\ts_gh\src\compiler\emitter.ts:348)
forEachEmittedFile (e:\ts_gh\src\compiler\emitter.ts:41)
emitFiles (e:\ts_gh\src\compiler\emitter.ts:315)
emitWorker (e:\ts_gh\src\compiler\program.ts:1760)
(anonymous function) (e:\ts_gh\src\compiler\program.ts:1733)
runWithCancellationToken (e:\ts_gh\src\compiler\program.ts:1854)
emit (e:\ts_gh\src\compiler\program.ts:1733)
getFileEmitOutput (e:\ts_gh\src\compiler\builderState.ts:6)
updateShapeSignature (e:\ts_gh\src\compiler\builderState.ts:326)
getFilesAffectedByUpdatedShapeWhenModuleEmit (e:\ts_gh\src\compiler\builderState.ts:547)
getFilesAffectedBy (e:\ts_gh\src\compiler\builderState.ts:279)
getNextAffectedFile (e:\ts_gh\src\compiler\builder.ts:389)
getSemanticDiagnosticsOfNextAffectedFile (e:\ts_gh\src\compiler\builder.ts:1083)
getSemanticDiagnostics (e:\ts_gh\src\compiler\builder.ts:1142)
getSemanticDiagnostics (e:\ts_gh\src\compiler\tsbuildPublic.ts:890)
executeSteps (e:\ts_gh\src\compiler\tsbuildPublic.ts:1101)

Second stack

emitDeclarationFileOrBundle (e:\ts_gh\src\compiler\emitter.ts:452)
emitSourceFileOrBundle (e:\ts_gh\src\compiler\emitter.ts:348)
forEachEmittedFile (e:\ts_gh\src\compiler\emitter.ts:41)
emitFiles (e:\ts_gh\src\compiler\emitter.ts:315)
emitWorker (e:\ts_gh\src\compiler\program.ts:1760)
(anonymous function) (e:\ts_gh\src\compiler\program.ts:1733)
runWithCancellationToken (e:\ts_gh\src\compiler\program.ts:1854)
emit (e:\ts_gh\src\compiler\program.ts:1733)
emitNextAffectedFile (e:\ts_gh\src\compiler\builder.ts:997)
emit (e:\ts_gh\src\compiler\builder.ts:1061)
emitFilesAndReportErrors (e:\ts_gh\src\compiler\watch.ts:337)
emit (e:\ts_gh\src\compiler\tsbuildPublic.ts:904)
executeSteps (e:\ts_gh\src\compiler\tsbuildPublic.ts:1105)

Line numbers are from release-4.2 (fb6c839).

@sheetalkamat
Copy link
Member

Yes and we have todo on investigation on caching the declaration emit but haven’t gotten to it .. One is to get the signature of the file while other is actual emit .. I think I had looked this and we needed to store some diagnostics and emit etc as well as need to handle custom transformers and other api things which makes it not so trivial and hence it was postponed for future

@OliverJAsh
Copy link
Contributor Author

OliverJAsh commented May 6, 2021

@amcasey

Looks like you're going to hit some snags when you move to TS 4.2 because of the DOM updates. You'll need to update @types/resize-observer-browser.

We have upgraded to TS 4.2 since I originally posted this issue. I have pushed a new branch with master merged in to it: typescript-watch-issue-2. This branch uses TS 4.2.

Are you okay with me posting paths and sketchy details in this issue

That's fine!


@sheetalkamat

do you mind trying #41219 to see if that is helping in your scenario

Here's a branch with that change: typescript-watch-issue-3

Unfortunately, when I save a file (step 5/6 in my original issue description at the top), I get this error:

[11:57:23] Found 0 errors. Watching for file changes.
[11:57:30] File change detected. Starting incremental compilation...

/Users/oliverash/Development/unsplash-web/node_modules/typescript/lib/tsc.js:1899
            throw e;
            ^

Error: Debug Failure. False expression.
    at updateRedirectsMap (/Users/oliverash/Development/unsplash-web/node_modules/typescript/lib/tsc.js:32806:22)
    at Object.update (/Users/oliverash/Development/unsplash-web/node_modules/typescript/lib/tsc.js:32853:13)
    at createProgram (/Users/oliverash/Development/unsplash-web/node_modules/typescript/lib/tsc.js:96353:88)
    at executeSteps (/Users/oliverash/Development/unsplash-web/node_modules/typescript/lib/tsc.js:96497:25)
    at Object.done (/Users/oliverash/Development/unsplash-web/node_modules/typescript/lib/tsc.js:96324:13)
    at Timeout.buildNextInvalidatedProject [as _onTimeout] (/Users/oliverash/Development/unsplash-web/node_modules/typescript/lib/tsc.js:97031:32)
    at listOnTimeout (internal/timers.js:533:17)
    at processTimers (internal/timers.js:475:7)

@amcasey
Copy link
Member

amcasey commented May 6, 2021

@OliverJAsh to give an example of locally optimizing emit, if you export type OwnProps in app\components\MainRouteContainer\components\UploaderContainer\UploaderContainer.tsx, target-tsc-build\app\components\MainRouteContainer\components\UploaderContainer\UploaderContainer-demos.d.ts drops from 6500 lines to 15.

How did I figure that out? --generateTrace told me which files were slow to emit and then I checked the contents of those files to figure out which types were being expanded, rather than simply named. (Comparing QuickInfo, which doesn't care about API boundaries, to declarations, which do, is helpful.)

Is it ugly? Very much so - you would only do this after confirming you have a performance problem.

Should the compiler do this for you? I would argue not - what you export and don't export is an important design decision and the compiler shouldn't be making those for you. There is, however, room for another tool that would warn you when this happens and point out opportunities. I'm currently exploring how we could discover cases like this automatically.

@sheetalkamat
Copy link
Member

Unfortunately, when I save a file (step 5/6 in my original issue description at the top), I get this error:

Thank you for reporting this.. have created #43986 to fix that part

@amcasey
Copy link
Member

amcasey commented May 7, 2021

@OliverJAsh Some high-level observations:

  1. You seem to have a lot of anonymous object literal types. Without a name, the declaration emitter has no option but to duplicate the type everywhere it's used. Obviously, you don't want to go around naming every single one of your types - I'd focus on the ones repeated in the largest .d.ts files (e.g. in CreateOrEditCollection.d.ts)
  2. This is my first time seeing https://github.com/pelotom/unionize. It seems like it's doing type math in value space? Maybe I'm missing something. If I'm not, you might be able to kill to birds with one stone by declaring an appropriate named type (e.g. for Action in app\actions\index.ts).
  3. Double emit is obviously hurting clean build. A lot of that work has been deferred in TS 4.3 and I've filed Initial build mode build emits twiceΒ #43995 to see if we can clean it up further.
  4. We don't presently have automated tools for identifying code that leads to emit problems and I have yet to see enough examples to invent one.

I grabbed the bug to investigate the tooling and I think I've taken that as far as I can at the moment, so back to @sheetalkamat to look at watch mode issues.

@amcasey amcasey removed their assignment May 7, 2021
@sheetalkamat
Copy link
Member

As i said this is so far design limitation from watch perspective because .d.ts emit is the cause of slowness and you should see that if you improve your .d.ts emit perf by taking into account what andrew has suggested watch will get better too..
Also trying #41219 in case you dont want to spend time on d.ts emit improvements and those are not feasible or for some reason you are not doing d.ts emit at all.

@sheetalkamat sheetalkamat removed their assignment May 7, 2021
@sheetalkamat sheetalkamat removed the Needs Investigation This issue needs a team member to investigate its status. label May 7, 2021
@OliverJAsh
Copy link
Contributor Author

OliverJAsh commented May 11, 2021

@amcasey

Thank you for investigating this and sharing your notes!

2. This is my first time seeing https://github.com/pelotom/unionize. It seems like it's doing type math in value space?

Unionize is a library that provides syntax sugar for defining tagged unions with their constructors, predicates and match functions. It uses some clever type arithmetic to accomplish this. The alternative is writing all of this by hand which would be much simpler from a type perspective but significantly more boilerplate, so it's a trade off. Given how frequently we use tagged unions in our application, we can't really live without it. Note that the popular library io-ts is doing similar things and there will be more to come in the next major version.

2. kill to birds with one stone by declaring an appropriate named type

I'm not sure I follow what you're suggesting here. What would the fix look like?


@sheetalkamat

Thank you for reporting this.. have created #43986 to fix that part

Thanks. I've upgraded my typescript-watch-issue-3 branch to the latest version of #41219 and repeated my tests. Rebuild times as follows:

Questions

  • How come typescript-watch-issue-2 is faster? What changed in TS 4.2?
  • How come typescript-watch-issue-3 is slower than typescript-watch-issue-2?

@amcasey
Copy link
Member

amcasey commented May 11, 2021

From my recent investigations into emit time in this and other project reference builds: #44044, #44045, #44047

@amcasey
Copy link
Member

amcasey commented May 11, 2021

@OliverJAsh

The alternative is writing all of this by hand which would be much simpler from a type perspective but significantly more boilerplate, so it's a trade off
Totally not your job, but if you have a toy example of this, I'd find it very helpful.

  1. kill to birds with one stone by declaring an appropriate named type

I'm not sure I follow what you're suggesting here. What would the fix look like?

Replacing an object type with a named interface. As I think I mentioned, it may be a step backwards for maintainability, but it should be a build-perf win.

Are you sure the middle one wasn't an incremental build? That's suspiciously fast.

@OliverJAsh
Copy link
Contributor Author

Are you sure the middle one wasn't an incremental build? That's suspiciously fast.

I tested it twice just to double check. Each time I ran my test (following the steps in my original post above) I deleted the build folder to ensure there was no cache.

@RyanCavanaugh RyanCavanaugh added the Rescheduled This issue was previously scheduled to an earlier milestone label Jun 18, 2021
@sahin52
Copy link

sahin52 commented Nov 26, 2021

Is there an option for not checking the types and just run the app without typechecking?
Edit: I got a new better computer, now it runs much better.

@amcasey
Copy link
Member

amcasey commented Nov 29, 2021

@sahin52 If you just want to transpile away the type annotations so you can run, you might want to try something like esbuild.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Design Limitation Constraints of the existing architecture prevent this from being fixed Domain: Declaration Emit The issue relates to the emission of d.ts files Rescheduled This issue was previously scheduled to an earlier milestone
Projects
None yet
Development

No branches or pull requests

6 participants