Several perf problems with the build that need to be addressed:
node.exe gets downloaded 2 timesSubmitted bundle stats)DONE :heavy_check_mark:
VSCODE_WEB hack, create vscode-web-* tasksVSCODE_COMPILE_ONLY flagnode build/lib/builtInExtensions.jsquality/*/package.json dependencies into actual package.json dependenciesTask | Step | Windows | Linux | macOS | Unit
-- | -- | -- | -- | -- | --
Prepare build | 聽 | 11 | 6.5 | 7.5 | min
Build | 聽 | 25 | 21 | 45 | min
聽 | 聽 | 聽 | 聽 | 聽 | 聽
VS Code | compile-client-build | 170 | 160 | 215 | sec
聽 | optimize-vscode | 31 | 31 | 86 | sec
聽 | minify-vscode | 152 | 139 | 290 | sec
聽 | vscode-win32-x64-min | 259 | 191 | 436 | sec
聽 | 聽 | 聽 | 聽 | 聽 | 聽
Server | compile-client-build | 146 | 134 | 198 | sec
聽 | optimize-vscode-reh | 5 | 5 | 16 | sec
聽 | minify-vscode-reh | 27 | 23 | 79 | sec
聽 | vscode-reh-win32-x64-min | 169 | 113 | 312 | sec
聽 | 聽 | 聽 | 聽 | 聽 | 聽
Web | compile-client-build | 148 | 136 | 188 | sec
聽 | optimize-vscode-reh | 27 | 28 | 64 | sec
聽 | minify-vscode-reh (web) | 134 | 120 | 273 | sec
聽 | vscode-reh-win32-x64-min (web) | 167 | 116 | 329 | sec
聽 | 聽 | 聽 | 聽 | 聽 | 聽
Unit | 聽 | 1.5 | 1 | 1.5 | min
Integration | 聽 | 9 | 0 | 8 | min
Publish | 聽 | 6 | 4 | 0.5 | min
Removing old extensions build and deduping extension webpacking across all three targets brought the build time down from 1114s to 379s: 3x speedup.
Deduping TypeScript compilation brought it further down to 264s: 4x speedup.
Merged deduplication effort. Here are the improvements for the build step, given two sample builds:
Step | Before | After | Speedup
-- | -- | -- | --
Windows | 23m | 15m | 1.5x
Windows32 | 27m | 15m | 1.8x
Linux | 19m | 10m | 1.9x
LinuxArmHf | 6m | 6m | 1x
LinuxAlpine | 14m | 8m | 1.75x
macOS | 41m | 16m | 2.5x
Adding Yarn cache:
Step | Before | After | Speedup
-- | -- | -- | --
Windows (x64, ia32) | 9m | 4m | 2.3x
Linux (x64, arm, alpine) | 4m | 2m | 2x
macOS | 4m | 3m | 1.3x
Here are some really exciting numbers for the shared agent which runs hygiene checks, telemetry gathering and core & extensions compilation:
Type of Build | Duration
-- | --
No Cache | 15m
Cached Dependencies (99% of builds) | 10m
Rebuild Same Commit | 3m
Platform specific agents can just pick up this agent's work and proceed with testing, packaging, signing and publishing.
Some more preliminary numbers, for total build times:
Step | Before | After | Speedup
-- | -- | -- | --
Windows | 58m | 44m | 1.3x
Windows32 | 59m | 46m | 1.3x
Linux | 38m | 23m | 1.7x
LinuxArmHf | 22m | 21m | 1x
LinuxAlpine | 23m | 26m | 0.9x
macOS | 68m | 42m | 1.6x
There's still a bit more to go through. We're still compiling extensions twice unnecessarily, for example.
Most helpful comment
Here are some really exciting numbers for the shared agent which runs hygiene checks, telemetry gathering and core & extensions compilation:
Type of Build | Duration
-- | --
No Cache | 15m
Cached Dependencies (99% of builds) | 10m
Rebuild Same Commit | 3m
Platform specific agents can just pick up this agent's work and proceed with testing, packaging, signing and publishing.