Skip to content

Commit b2a304a

Browse files
feat: reframed comparison as project-vs-service
1 parent 13c6c79 commit b2a304a

File tree

5 files changed

+30
-49
lines changed

5 files changed

+30
-49
lines changed

README.md

+10-11
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ See [sharkdp/hyperfine#installation](https://github.com/sharkdp/hyperfine#instal
2020

2121
```shell
2222
npm install
23-
npm generate
24-
npm measure
23+
npm run generate
24+
npm run measure
2525
```
2626

2727
### Measured Attributes
@@ -38,20 +38,19 @@ The `caseEntries` values in `src/data.ts` can be modified to test:
3838

3939
## Results
4040

41-
Right now, `parserOptions.project` outperforms `parserOptions.projectService`.
41+
Right now, `parserOptions.project` _with_ single-run inference outperforms `parserOptions.projectService`.
4242
This is a performance issue and we are investigating it as a critical bug for v8.
4343

4444
```plaintext
45-
┌───────┬──────────────────────┬──────────────────────┬──────────────────────┬──────────────────────┐
46-
│ files │ project (even) │ project (references) │ service (even) │ service (references) │
47-
┼───────┼──────────────────────┼──────────────────────┼──────────────────────┼──────────────────────┤
48-
│ 128 │ '1.149 s ± 0.030 s' │ '1.135 s ± 0.008 s' │ '1.178 s ± 0.010 s' │ '1.736 s ± 0.012 s' │
49-
│ 512 │ '1.636 s ± 0.009 s' │ '1.656 s ± 0.004 s' │ '1.895 s ± 0.007 s' │ '2.613 s ± 0.020 s' │
50-
│ 1024 │ '2.353 s ± 0.013 s' │ '2.399 s ± 0.016 s' │ '3.130 s ± 0.017 s' │ '4.034 s ± 0.061 s' │
51-
┴───────┴──────────────────────┴──────────────────────┴──────────────────────┴──────────────────────┘
45+
┌───────┬───────────────────────┬───────────────────────┐
46+
│ files │ project (even layout) │ service (even layout) │
47+
┼───────┼───────────────────────┼───────────────────────┤
48+
│ 1024 │ '1.750 s ± 0.008 s' │ '2.473 s ± 0.011 s' │
49+
┴───────┴───────────────────────┴───────────────────────┘
5250
```
5351

54-
See [typescript-eslint/typescript-eslint#9571 Performance: parserOptions.projectService no longer outperforms parserOptions.project](https://github.com/typescript-eslint/typescript-eslint/issues/9571)
52+
See [typescript-eslint/typescript-eslint#9571 Performance: parserOptions.projectService no longer outperforms parserOptions.project](https://github.com/typescript-eslint/typescript-eslint/issues/9571) in typescript-eslint.
53+
Also see the 📌 pinned issues later in this file.
5554

5655
### Result Measurement Notes
5756

src/creators/files/createESLintConfigFile.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ export function createESLintConfigFile({
1919
files: ["**/*.ts"],
2020
languageOptions: {
2121
parserOptions: {
22-
${singleRun ? "disallowAutomaticSingleRunInference: true," : ""}
22+
${types !== "projectService" && !singleRun ? "disallowAutomaticSingleRunInference: true," : ""}
2323
${projectKey}: ${typeof projectValue === "string" ? `"${projectValue}"` : projectValue},
2424
tsconfigRootDir: import.meta.dirname,
2525
},

src/data.ts

+9-7
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,15 @@ export const casesPath = "cases";
33
export const caseEntries = [
44
{
55
label: "files",
6-
values: [128, 512, 1024],
6+
values: [1024],
77
},
88
{
99
label: "layout",
10-
// values: ["even" /* , "references" , "wide" */],
11-
values: ["even", "references" /* , "wide" */],
10+
values: ["even"],
1211
},
1312
{
1413
label: "singleRun",
15-
values: [/* false, */ true],
14+
values: [false],
1615
},
1716
{
1817
label: "types",
@@ -22,9 +21,12 @@ export const caseEntries = [
2221

2322
export type CaseEntry = (typeof caseEntries)[number];
2423

25-
export type CaseData = {
26-
[K in CaseEntry["label"]]: ({ label: K } & CaseEntry)["values"][number];
27-
};
24+
export interface CaseData {
25+
files: number;
26+
layout: "even" | "references" | "wide";
27+
singleRun: boolean;
28+
types: "project" | "service";
29+
}
2830

2931
export interface NamedCaseData extends CaseData {
3032
name: string;

src/generate.ts

+6-4
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,12 @@ const cases: NamedCaseData[] = [];
4141

4242
for (const files of caseEntries[0].values) {
4343
for (const layout of caseEntries[1].values) {
44-
for (const types of caseEntries[3].values) {
45-
const data: CaseData = { files, layout, singleRun: true, types };
46-
const name = createProjectName(data);
47-
cases.push(await createCase({ ...data, name }));
44+
for (const singleRun of caseEntries[2].values) {
45+
for (const types of caseEntries[3].values) {
46+
const data: CaseData = { files, layout, singleRun, types };
47+
const name = createProjectName(data);
48+
cases.push(await createCase({ ...data, name }));
49+
}
4850
}
4951
}
5052
}

src/measure.ts

+4-26
Original file line numberDiff line numberDiff line change
@@ -37,40 +37,18 @@ const results: unknown[] = [];
3737
for (const files of caseEntries[0].values) {
3838
results.push({
3939
files,
40-
"project (even)": await runProjectLint({
40+
"project (even layout)": await runProjectLint({
4141
files,
4242
layout: "even",
43-
singleRun: true,
43+
singleRun: false,
4444
types: "project",
4545
}),
46-
"project (references)": await runProjectLint({
47-
files,
48-
layout: "references",
49-
singleRun: true,
50-
types: "project",
51-
}),
52-
"service (even)": await runProjectLint({
46+
"service (even layout)": await runProjectLint({
5347
files,
5448
layout: "even",
55-
singleRun: true,
56-
types: "service",
57-
}),
58-
"service (references)": await runProjectLint({
59-
files,
60-
layout: "references",
61-
singleRun: true,
49+
singleRun: false,
6250
types: "service",
6351
}),
64-
// "project (wide)": await runProjectLint({
65-
// files,
66-
// layout: "wide",
67-
// types: "project",
68-
// }),
69-
// "service (wide)": await runProjectLint({
70-
// files,
71-
// layout: "wide",
72-
// types: "service",
73-
// }),
7452
});
7553
}
7654

0 commit comments

Comments
 (0)