Warm up PowerShell Worker before receiving function load request #535
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.
Resolves #485
Worker.Main, and it is now performed immediately after starting the process, not waiting for the function load request. It is important to remember that at this point we cannot initialize$env:PSModulePathbecause the app root path is not resolved yet. So, for the first PowerShell instance, this step is deferred until the function load request and performed inRequestProcessor.SetupAppRootPathAndModulePath. For all the subsequent PowerShell instances,$env:PSModulePathcomes from the initial session state, as before.PowerShellManager.DeployAzFunctionToRunspace), and this takes hundreds of milliseconds even for a short script when performed for the first time. However, the subsequent invocations are significantly faster. So, creating and removing a dummy function proactively saves noticeable time on the function load request (seeWorker.WarmUpPowerShell).This reduces cold start time by about 4 seconds (measured on App Service plan, S1 instance):