mirror of
https://github.com/angular/angular.git
synced 2026-09-14 13:54:52 +08:00
fix(language-service): address potential memory leak during project creation
This addresses a potential memory leak in plugin-factory.ts.
The require call inside the create function reloads the entire language
service module for every new project, which is inefficient and could be a cause of the memory leak during branch
switching. This ensures the module is loaded only once and the same
instance is shared across all projects.
(cherry picked from commit 4405725943)
This commit is contained in:
committed by
Andrew Kushnir
parent
aada582e96
commit
89095946cf
@@ -21,8 +21,7 @@ export const factory: ts.server.PluginModuleFactory = (tsModule): PluginModule =
|
||||
|
||||
return {
|
||||
create(info: ts.server.PluginCreateInfo): NgLanguageService {
|
||||
// Use a module name based import path to allow it to be marked external.
|
||||
plugin = require(`@angular/language-service/bundles/language-service.js`)(tsModule);
|
||||
plugin ??= require(`@angular/language-service/bundles/language-service.js`)(tsModule);
|
||||
return plugin.create(info);
|
||||
},
|
||||
getExternalFiles(project: ts.server.Project): string[] {
|
||||
|
||||
@@ -706,6 +706,11 @@ export class Session {
|
||||
this.triggerDiagnostics(event.data.openFiles, event.eventName);
|
||||
break;
|
||||
case ts.server.ProjectLanguageServiceStateEvent:
|
||||
this.logger.info(
|
||||
`Project language service state changed for ${event.data.project.getProjectName()}. Enabled: ${
|
||||
event.data.languageServiceEnabled
|
||||
}`,
|
||||
);
|
||||
this.connection.sendNotification(ProjectLanguageService, {
|
||||
projectName: event.data.project.getProjectName(),
|
||||
languageServiceEnabled: event.data.languageServiceEnabled,
|
||||
@@ -969,6 +974,7 @@ export class Session {
|
||||
if (!filePath) {
|
||||
return;
|
||||
}
|
||||
this.logger.info(`Closing file: ${filePath}`);
|
||||
this.openFiles.delete(filePath);
|
||||
this.projectService.closeClientFile(filePath);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user