test(language-service): Make project service a singleton (#39308)
Constructing a project service is expensive. Making it a singleton could speed up tests considerably. On my MacBook Pro, test execution went from 24.4s to 14.5s (~40% improvement). PR Close #39308
This commit is contained in:
parent
0c01c4a898
commit
1b21350e17
|
@ -69,6 +69,12 @@ export const host: ts.server.ServerHost = {
|
|||
},
|
||||
};
|
||||
|
||||
/**
|
||||
* Constructing a project service is expensive (~2.5s on MacBook Pro), so it
|
||||
* should be a singleton service shared throughout all tests.
|
||||
*/
|
||||
let projectService: ts.server.ProjectService;
|
||||
|
||||
/**
|
||||
* Create a ConfiguredProject and an actual program for the test project located
|
||||
* in packages/language-service/test/project. Project creation exercises the
|
||||
|
@ -76,17 +82,19 @@ export const host: ts.server.ServerHost = {
|
|||
* and modify test files.
|
||||
*/
|
||||
export function setup() {
|
||||
const projectService = new ts.server.ProjectService({
|
||||
host,
|
||||
logger,
|
||||
cancellationToken: ts.server.nullCancellationToken,
|
||||
useSingleInferredProject: true,
|
||||
useInferredProjectPerProjectRoot: true,
|
||||
typingsInstaller: ts.server.nullTypingsInstaller,
|
||||
});
|
||||
// Opening APP_COMPONENT forces a new ConfiguredProject to be created based
|
||||
// on the tsconfig.json in the test project.
|
||||
projectService.openClientFile(APP_COMPONENT);
|
||||
if (!projectService) {
|
||||
projectService = new ts.server.ProjectService({
|
||||
host,
|
||||
logger,
|
||||
cancellationToken: ts.server.nullCancellationToken,
|
||||
useSingleInferredProject: true,
|
||||
useInferredProjectPerProjectRoot: true,
|
||||
typingsInstaller: ts.server.nullTypingsInstaller,
|
||||
});
|
||||
// Opening APP_COMPONENT forces a new ConfiguredProject to be created based
|
||||
// on the tsconfig.json in the test project.
|
||||
projectService.openClientFile(APP_COMPONENT);
|
||||
}
|
||||
const project = projectService.findProject(TSCONFIG);
|
||||
if (!project) {
|
||||
throw new Error(`Failed to create project for ${TSCONFIG}`);
|
||||
|
|
Loading…
Reference in New Issue