Skip to content

Commit 3dada81

Browse files
IOusertopaxi
authored andcommitted
fix(perf): add cache for fs calls (#908)
1 parent 1e40cb1 commit 3dada81

File tree

1 file changed

+23
-6
lines changed

1 file changed

+23
-6
lines changed

src/compiler.ts

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@ export function createCompiler(configs: ConfigSet): TsCompiler {
131131
...serviceHostDebugCtx,
132132
[LogContexts.logLevel]: LogLevels.trace,
133133
}
134+
134135
const serviceHost = {
135136
getScriptFileNames: () => Object.keys(memoryCache.versions),
136137
getScriptVersion: (fileName: string) => {
@@ -157,12 +158,12 @@ export function createCompiler(configs: ConfigSet): TsCompiler {
157158
}
158159
return ts.ScriptSnapshot.fromString(contents)
159160
},
160-
fileExists: ts.sys.fileExists,
161-
readFile: logger.wrap(serviceHostTraceCtx, 'readFile', ts.sys.readFile),
162-
readDirectory: ts.sys.readDirectory,
163-
getDirectories: ts.sys.getDirectories,
164-
directoryExists: ts.sys.directoryExists,
165-
realpath: ts.sys.realpath,
161+
fileExists: memoize(ts.sys.fileExists),
162+
readFile: logger.wrap(serviceHostTraceCtx, 'readFile', memoize(ts.sys.readFile)),
163+
readDirectory: memoize(ts.sys.readDirectory),
164+
getDirectories: memoize(ts.sys.getDirectories),
165+
directoryExists: memoize(ts.sys.directoryExists),
166+
realpath: memoize(ts.sys.realpath!),
166167
getNewLine: () => '\n',
167168
getCurrentDirectory: () => cwd,
168169
getCompilationSettings: () => compilerOptions,
@@ -225,6 +226,22 @@ export function createCompiler(configs: ConfigSet): TsCompiler {
225226
return { cwd, compile, getTypeInfo, extensions, cachedir, ts }
226227
}
227228

229+
type AnyFn = (...args: any[]) => any
230+
function memoize<T extends AnyFn = AnyFn>(fn: T): T {
231+
const cache = new Map()
232+
233+
return ((arg: string) => {
234+
const entry = cache.get(arg)
235+
if (entry !== undefined) {
236+
return entry
237+
}
238+
239+
const res = fn(arg)
240+
cache.set(arg, res)
241+
return res
242+
}) as T
243+
}
244+
228245
/**
229246
* Internal source output.
230247
*/

0 commit comments

Comments
 (0)