bench-hexo 0.1.0 → 0.2.1-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +83 -51
- package/dist/benchmark.d.ts +1 -1
- package/dist/benchmark.js +24 -6
- package/dist/benchmark.js.map +1 -1
- package/dist/index.js +20 -5
- package/dist/index.js.map +1 -1
- package/dist/memory.d.ts +1 -2
- package/dist/memory.js +30 -4
- package/dist/memory.js.map +1 -1
- package/dist/profiling.d.ts +1 -1
- package/dist/profiling.js +13 -2
- package/dist/profiling.js.map +1 -1
- package/dist/stat.d.ts +2 -0
- package/dist/stat.js +80 -0
- package/dist/stat.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -16,6 +16,8 @@ npx bench-hexo profiling [options]
|
|
|
16
16
|
|
|
17
17
|
#### Options
|
|
18
18
|
|
|
19
|
+
- `--max-old-space-size <number>`: Set the maximum old space size for Node.js (default: 4096MB).
|
|
20
|
+
- `-c, --concurrency <number>`: Set the number of concurrent processes (default: Infinity).
|
|
19
21
|
- `--no-clean`: Do not clean Hexo cache before profiling.
|
|
20
22
|
|
|
21
23
|
#### Example
|
|
@@ -23,6 +25,19 @@ npx bench-hexo profiling [options]
|
|
|
23
25
|
```plain
|
|
24
26
|
✔ Cleaning complete.
|
|
25
27
|
✔ Profiling complete. Flamegraph saved to 0x directory.
|
|
28
|
+
✔ Hexo statistics loaded.
|
|
29
|
+
|
|
30
|
+
Hexo Statistics:
|
|
31
|
+
|
|
32
|
+
Number of posts: 2000
|
|
33
|
+
Number of post assets: 0
|
|
34
|
+
Avg of post content length: 17330
|
|
35
|
+
Number of pages: 0
|
|
36
|
+
Number of page assets: 0
|
|
37
|
+
Avg of page content length: 0
|
|
38
|
+
Number of tags: 100
|
|
39
|
+
Number of categories: 13
|
|
40
|
+
Number of routes: 4243
|
|
26
41
|
```
|
|
27
42
|
|
|
28
43
|
### Benchmark
|
|
@@ -32,9 +47,14 @@ Use perf_hooks to measure the performance metrics of the Hexo generation process
|
|
|
32
47
|
#### Syntax
|
|
33
48
|
|
|
34
49
|
```bash
|
|
35
|
-
npx bench-hexo benchmark
|
|
50
|
+
npx bench-hexo benchmark [options]
|
|
36
51
|
```
|
|
37
52
|
|
|
53
|
+
#### Options
|
|
54
|
+
|
|
55
|
+
- `--max-old-space-size <number>`: Set the maximum old space size for Node.js (default: 4096MB).
|
|
56
|
+
- `-c, --concurrency <number>`: Set the number of concurrent processes (default: Infinity).
|
|
57
|
+
|
|
38
58
|
#### Example
|
|
39
59
|
|
|
40
60
|
```plain
|
|
@@ -44,21 +64,21 @@ Cold processing
|
|
|
44
64
|
│ (index) │ Cost time (s) │
|
|
45
65
|
├──────────────────────────────┼───────────────┤
|
|
46
66
|
│ Load Plugin/Scripts/Database │ '0.20s' │
|
|
47
|
-
│ Process Source │ '
|
|
48
|
-
│ Render Posts │ '
|
|
49
|
-
│ Render Files │ '
|
|
50
|
-
│ Save Database │ '0.
|
|
51
|
-
│ Total time │ '
|
|
67
|
+
│ Process Source │ '2.85s' │
|
|
68
|
+
│ Render Posts │ '2.99s' │
|
|
69
|
+
│ Render Files │ '7.10s' │
|
|
70
|
+
│ Save Database │ '0.64s' │
|
|
71
|
+
│ Total time │ '13.77s' │
|
|
52
72
|
└──────────────────────────────┴───────────────┘
|
|
53
73
|
Hot processing
|
|
54
74
|
┌──────────────────────────────┬───────────────┐
|
|
55
75
|
│ (index) │ Cost time (s) │
|
|
56
76
|
├──────────────────────────────┼───────────────┤
|
|
57
|
-
│ Load Plugin/Scripts/Database │ '
|
|
58
|
-
│ Process Source │ '
|
|
59
|
-
│ Render Files │ '
|
|
60
|
-
│ Save Database │ '0.
|
|
61
|
-
│ Total time │ '
|
|
77
|
+
│ Load Plugin/Scripts/Database │ '1.17s' │
|
|
78
|
+
│ Process Source │ '1.17s' │
|
|
79
|
+
│ Render Files │ '6.08s' │
|
|
80
|
+
│ Save Database │ '0.64s' │
|
|
81
|
+
│ Total time │ '9.06s' │
|
|
62
82
|
└──────────────────────────────┴───────────────┘
|
|
63
83
|
✔ Cleaning complete.
|
|
64
84
|
Another Cold processing
|
|
@@ -66,12 +86,25 @@ Another Cold processing
|
|
|
66
86
|
│ (index) │ Cost time (s) │
|
|
67
87
|
├──────────────────────────────┼───────────────┤
|
|
68
88
|
│ Load Plugin/Scripts/Database │ '0.20s' │
|
|
69
|
-
│ Process Source │ '
|
|
70
|
-
│ Render Posts │ '
|
|
71
|
-
│ Render Files │ '
|
|
72
|
-
│ Save Database │ '0.
|
|
73
|
-
│ Total time │ '
|
|
89
|
+
│ Process Source │ '2.86s' │
|
|
90
|
+
│ Render Posts │ '2.95s' │
|
|
91
|
+
│ Render Files │ '7.08s' │
|
|
92
|
+
│ Save Database │ '0.64s' │
|
|
93
|
+
│ Total time │ '13.73s' │
|
|
74
94
|
└──────────────────────────────┴───────────────┘
|
|
95
|
+
✔ Hexo statistics loaded.
|
|
96
|
+
|
|
97
|
+
Hexo Statistics:
|
|
98
|
+
|
|
99
|
+
Number of posts: 2000
|
|
100
|
+
Number of post assets: 0
|
|
101
|
+
Avg of post content length: 17330
|
|
102
|
+
Number of pages: 0
|
|
103
|
+
Number of page assets: 0
|
|
104
|
+
Avg of page content length: 0
|
|
105
|
+
Number of tags: 100
|
|
106
|
+
Number of categories: 13
|
|
107
|
+
Number of routes: 4243
|
|
75
108
|
```
|
|
76
109
|
|
|
77
110
|
|
|
@@ -88,6 +121,8 @@ node src/index.js memory [options]
|
|
|
88
121
|
#### Options
|
|
89
122
|
|
|
90
123
|
- `-s, --sample-rate <number>`: Sample rate in milliseconds (default: 500ms).
|
|
124
|
+
- `--max-old-space-size <number>`: Set the maximum old space size for Node.js (default: 4096MB).
|
|
125
|
+
- `-c, --concurrency <number>`: Set the number of concurrent processes (default: Infinity).
|
|
91
126
|
- `--no-clean`: Do not clean Hexo cache before profiling.
|
|
92
127
|
|
|
93
128
|
#### Example
|
|
@@ -95,45 +130,42 @@ node src/index.js memory [options]
|
|
|
95
130
|
```plain
|
|
96
131
|
✔ Cleaning complete.
|
|
97
132
|
✔ Memory profiling complete.
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
303.32┤ │
|
|
113
|
-
293.76┤ │
|
|
114
|
-
284.20┤ │
|
|
115
|
-
274.63┤ ╭╯
|
|
116
|
-
265.07┤ │
|
|
117
|
-
255.51┤ │
|
|
118
|
-
245.94┤ │
|
|
119
|
-
236.38┤ ╭╯
|
|
120
|
-
226.81┤ │
|
|
121
|
-
217.25┤ ╭╯
|
|
122
|
-
207.69┤ │
|
|
123
|
-
198.12┤ │
|
|
124
|
-
188.56┤ │
|
|
125
|
-
179.00┤ │
|
|
126
|
-
169.43┤ │
|
|
127
|
-
159.87┤╭╯
|
|
128
|
-
150.30┼╯
|
|
133
|
+
1196.86┤ ╭╮
|
|
134
|
+
1117.26┤ ││
|
|
135
|
+
1037.66┤ ││
|
|
136
|
+
958.06┤ ││ ╭
|
|
137
|
+
878.46┤ ││ ╭╯
|
|
138
|
+
798.86┤ ││ ╭╯
|
|
139
|
+
719.27┤ ╭╯│ │
|
|
140
|
+
639.67┤ │ ╰─────╯
|
|
141
|
+
560.07┤ ╭╮ │
|
|
142
|
+
480.47┤ │╰──╯
|
|
143
|
+
400.87┼╮ ╭─╯
|
|
144
|
+
321.27┤│ ╭╮╭╯
|
|
145
|
+
241.68┤│ ╭─╯╰╯
|
|
146
|
+
162.08┤╰─╯
|
|
129
147
|
|
|
130
148
|
|
|
131
149
|
RSS Memory Stats:
|
|
132
150
|
|
|
133
|
-
Avg:
|
|
134
|
-
Min:
|
|
135
|
-
Max:
|
|
136
|
-
Midian:
|
|
151
|
+
Avg: 523.54MB
|
|
152
|
+
Min: 162.08MB
|
|
153
|
+
Max: 1196.86MB
|
|
154
|
+
Midian: 483.52MB
|
|
155
|
+
Total Time: 12.866s
|
|
156
|
+
✔ Hexo statistics loaded.
|
|
157
|
+
|
|
158
|
+
Hexo Statistics:
|
|
159
|
+
|
|
160
|
+
Number of posts: 2000
|
|
161
|
+
Number of post assets: 0
|
|
162
|
+
Avg of post content length: 17330
|
|
163
|
+
Number of pages: 0
|
|
164
|
+
Number of page assets: 0
|
|
165
|
+
Avg of page content length: 0
|
|
166
|
+
Number of tags: 100
|
|
167
|
+
Number of categories: 13
|
|
168
|
+
Number of routes: 4243
|
|
137
169
|
```
|
|
138
170
|
|
|
139
171
|
## License
|
package/dist/benchmark.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
declare const _default: () => Promise<void>;
|
|
1
|
+
declare const _default: (concurrency?: number, maxOldSpaceSize?: number) => Promise<void>;
|
|
2
2
|
export default _default;
|
package/dist/benchmark.js
CHANGED
|
@@ -7,6 +7,9 @@ const child_process_1 = require("child_process");
|
|
|
7
7
|
const path_1 = require("path");
|
|
8
8
|
const perf_hooks_1 = require("perf_hooks");
|
|
9
9
|
const ora_1 = __importDefault(require("ora"));
|
|
10
|
+
const stat_1 = __importDefault(require("./stat"));
|
|
11
|
+
const promises_1 = require("fs/promises");
|
|
12
|
+
const isGitHubActions = process.env.GITHUB_ACTIONS;
|
|
10
13
|
const hooks = [
|
|
11
14
|
{ regex: /Hexo version/, tag: "hexo-begin" },
|
|
12
15
|
{ regex: /Start processing/, tag: "processing" },
|
|
@@ -19,7 +22,7 @@ const hexoBin = (0, path_1.resolve)(process.cwd(), "node_modules/hexo/bin/hexo")
|
|
|
19
22
|
function cleanUp() {
|
|
20
23
|
(0, child_process_1.spawn)("node", [hexoBin, "clean"], { cwd: process.cwd() });
|
|
21
24
|
}
|
|
22
|
-
async function run_benchmark(name, spinner) {
|
|
25
|
+
async function run_benchmark(name, spinner, concurrency, maxOldSpaceSize) {
|
|
23
26
|
let measureFinished = false;
|
|
24
27
|
return new Promise((resolve) => {
|
|
25
28
|
const result = {};
|
|
@@ -38,13 +41,27 @@ async function run_benchmark(name, spinner) {
|
|
|
38
41
|
if (measureFinished) {
|
|
39
42
|
obs.disconnect();
|
|
40
43
|
spinner.stop();
|
|
44
|
+
if (isGitHubActions) {
|
|
45
|
+
if (isGitHubActions) {
|
|
46
|
+
(0, promises_1.appendFile)(process.env.GITHUB_STEP_SUMMARY, `\n## ${name}\n\n| Step | Cost time (s) |\n| --- | --- |\n${Object.keys(result)
|
|
47
|
+
.map((name) => `| ${name} | ${result[name]["Cost time (s)"]} |`)
|
|
48
|
+
.join("\n")}\n`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
41
51
|
console.log(name);
|
|
42
52
|
console.table(result);
|
|
43
53
|
resolve(result);
|
|
44
54
|
}
|
|
45
55
|
});
|
|
46
56
|
obs.observe({ entryTypes: ["measure"] });
|
|
47
|
-
const hexo = (0, child_process_1.spawn)("node", [
|
|
57
|
+
const hexo = (0, child_process_1.spawn)("node", [
|
|
58
|
+
`--max-old-space-size=${maxOldSpaceSize}`,
|
|
59
|
+
hexoBin,
|
|
60
|
+
"g",
|
|
61
|
+
"--debug",
|
|
62
|
+
"--concurrency",
|
|
63
|
+
concurrency.toString(),
|
|
64
|
+
], {
|
|
48
65
|
cwd: process.cwd(),
|
|
49
66
|
});
|
|
50
67
|
hooks.forEach(({ regex, tag }) => {
|
|
@@ -96,7 +113,7 @@ async function run_benchmark(name, spinner) {
|
|
|
96
113
|
});
|
|
97
114
|
});
|
|
98
115
|
}
|
|
99
|
-
exports.default = async () => {
|
|
116
|
+
exports.default = async (concurrency = Infinity, maxOldSpaceSize = 4096) => {
|
|
100
117
|
let spinner = (0, ora_1.default)({ text: "Cleaning...", color: "cyan" }).start();
|
|
101
118
|
cleanUp();
|
|
102
119
|
spinner.succeed("Cleaning complete.");
|
|
@@ -104,12 +121,12 @@ exports.default = async () => {
|
|
|
104
121
|
text: "Running cold processing...",
|
|
105
122
|
color: "cyan",
|
|
106
123
|
}).start();
|
|
107
|
-
await run_benchmark("Cold processing", spinner);
|
|
124
|
+
await run_benchmark("Cold processing", spinner, concurrency, maxOldSpaceSize);
|
|
108
125
|
spinner = (0, ora_1.default)({
|
|
109
126
|
text: "Running hot processing...",
|
|
110
127
|
color: "cyan",
|
|
111
128
|
}).start();
|
|
112
|
-
await run_benchmark("Hot processing", spinner);
|
|
129
|
+
await run_benchmark("Hot processing", spinner, concurrency, maxOldSpaceSize);
|
|
113
130
|
spinner = (0, ora_1.default)({ text: "Cleaning...", color: "cyan" }).start();
|
|
114
131
|
cleanUp();
|
|
115
132
|
spinner.succeed("Cleaning complete.");
|
|
@@ -117,6 +134,7 @@ exports.default = async () => {
|
|
|
117
134
|
text: "Running another cold processing...",
|
|
118
135
|
color: "cyan",
|
|
119
136
|
}).start();
|
|
120
|
-
await run_benchmark("Another Cold processing", spinner);
|
|
137
|
+
await run_benchmark("Another Cold processing", spinner, concurrency, maxOldSpaceSize);
|
|
138
|
+
await (0, stat_1.default)();
|
|
121
139
|
};
|
|
122
140
|
//# sourceMappingURL=benchmark.js.map
|
package/dist/benchmark.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"benchmark.js","sourceRoot":"","sources":["../src/benchmark.ts"],"names":[],"mappings":";;;;;AAAA,iDAAsC;AACtC,+BAA+B;AAC/B,2CAA8D;AAC9D,8CAAsB;
|
|
1
|
+
{"version":3,"file":"benchmark.js","sourceRoot":"","sources":["../src/benchmark.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -5,30 +5,45 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
};
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
const commander_1 = require("commander");
|
|
8
|
+
const child_process_1 = require("child_process");
|
|
9
|
+
const path_1 = __importDefault(require("path"));
|
|
8
10
|
const profiling_1 = __importDefault(require("./profiling"));
|
|
9
11
|
const benchmark_1 = __importDefault(require("./benchmark"));
|
|
10
|
-
const memory_1 = __importDefault(require("./memory"));
|
|
11
12
|
const program = new commander_1.Command();
|
|
12
13
|
program
|
|
13
14
|
.command("profiling")
|
|
14
15
|
.description("Run Hexo profiling")
|
|
16
|
+
.option("--max-old-space-size <number>", "Max old space size in MB", "4096")
|
|
17
|
+
.option("-c, --concurrency <number>", "Concurrency level", "Infinity")
|
|
15
18
|
.option("--no-clean", "Do not clean Hexo cache before profiling")
|
|
16
19
|
.action(async (option) => {
|
|
17
|
-
await (0, profiling_1.default)(option.clean);
|
|
20
|
+
await (0, profiling_1.default)(option.clean, Number(option.concurrency), Number(option.maxOldSpaceSize));
|
|
18
21
|
});
|
|
19
22
|
program
|
|
20
23
|
.command("benchmark")
|
|
24
|
+
.option("--max-old-space-size <number>", "Max old space size in MB", "4096")
|
|
25
|
+
.option("-c, --concurrency <number>", "Concurrency level", "Infinity")
|
|
21
26
|
.description("Run Hexo benchmark")
|
|
22
|
-
.action(async () => {
|
|
23
|
-
await (0, benchmark_1.default)();
|
|
27
|
+
.action(async (option) => {
|
|
28
|
+
await (0, benchmark_1.default)(Number(option.concurrency), Number(option.maxOldSpaceSize));
|
|
24
29
|
});
|
|
25
30
|
program
|
|
26
31
|
.command("memory")
|
|
27
32
|
.description("Run Hexo memory profiling")
|
|
33
|
+
.option("--max-old-space-size <number>", "Max old space size in MB", "4096")
|
|
28
34
|
.option("-s, --sample-rate <number>", "Sample rate in ms", "500")
|
|
35
|
+
.option("-c, --concurrency <number>", "Concurrency level", "Infinity")
|
|
29
36
|
.option("--no-clean", "Do not clean Hexo cache before profiling")
|
|
30
37
|
.action(async (option) => {
|
|
31
|
-
|
|
38
|
+
(0, child_process_1.spawn)("node", [
|
|
39
|
+
`--max-old-space-size=${option.maxOldSpaceSize}`,
|
|
40
|
+
path_1.default.resolve(__dirname, "./memory.js"),
|
|
41
|
+
option.sampleRate,
|
|
42
|
+
option.concurrency,
|
|
43
|
+
option.clean,
|
|
44
|
+
], {
|
|
45
|
+
stdio: "inherit",
|
|
46
|
+
});
|
|
32
47
|
});
|
|
33
48
|
program.parse();
|
|
34
49
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAEA,yCAAoC;AACpC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAEA,yCAAoC;AACpC,iDAAsC;AACtC,gDAAwB;AACxB,4DAAoC;AACpC,4DAAoC;AAEpC,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,OAAO,CAAC,WAAW,CAAC;KACpB,WAAW,CAAC,oBAAoB,CAAC;KACjC,MAAM,CAAC,+BAA+B,EAAE,0BAA0B,EAAE,MAAM,CAAC;KAC3E,MAAM,CAAC,4BAA4B,EAAE,mBAAmB,EAAE,UAAU,CAAC;KACrE,MAAM,CAAC,YAAY,EAAE,0CAA0C,CAAC;KAChE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;IACvB,MAAM,IAAA,mBAAS,EACb,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAC1B,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAC/B,CAAC;AACJ,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,WAAW,CAAC;KACpB,MAAM,CAAC,+BAA+B,EAAE,0BAA0B,EAAE,MAAM,CAAC;KAC3E,MAAM,CAAC,4BAA4B,EAAE,mBAAmB,EAAE,UAAU,CAAC;KACrE,WAAW,CAAC,oBAAoB,CAAC;KACjC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;IACvB,MAAM,IAAA,mBAAS,EAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC;AAC9E,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,2BAA2B,CAAC;KACxC,MAAM,CAAC,+BAA+B,EAAE,0BAA0B,EAAE,MAAM,CAAC;KAC3E,MAAM,CAAC,4BAA4B,EAAE,mBAAmB,EAAE,KAAK,CAAC;KAChE,MAAM,CAAC,4BAA4B,EAAE,mBAAmB,EAAE,UAAU,CAAC;KACrE,MAAM,CAAC,YAAY,EAAE,0CAA0C,CAAC;KAChE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;IACvB,IAAA,qBAAK,EACH,MAAM,EACN;QACE,wBAAwB,MAAM,CAAC,eAAe,EAAE;QAChD,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,aAAa,CAAC;QACtC,MAAM,CAAC,UAAU;QACjB,MAAM,CAAC,WAAW;QAClB,MAAM,CAAC,KAAK;KACb,EACD;QACE,KAAK,EAAE,SAAS;KACjB,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
package/dist/memory.d.ts
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export default _default;
|
|
1
|
+
export {};
|
package/dist/memory.js
CHANGED
|
@@ -10,7 +10,10 @@ const hexo_1 = __importDefault(require("hexo"));
|
|
|
10
10
|
const ora_1 = __importDefault(require("ora"));
|
|
11
11
|
const child_process_1 = require("child_process");
|
|
12
12
|
const path_1 = require("path");
|
|
13
|
+
const stat_1 = __importDefault(require("./stat"));
|
|
14
|
+
const promises_1 = require("fs/promises");
|
|
13
15
|
const MARGIN_FACTOR = 1.3;
|
|
16
|
+
const isGitHubActions = process.env.GITHUB_ACTIONS;
|
|
14
17
|
function sampleData(oldArr, width) {
|
|
15
18
|
const factor = Math.round(oldArr.length / width);
|
|
16
19
|
return oldArr.filter(function (value, index, Arr) {
|
|
@@ -29,7 +32,7 @@ function getSampleStats(arr) {
|
|
|
29
32
|
midian: midian.toFixed(2),
|
|
30
33
|
};
|
|
31
34
|
}
|
|
32
|
-
|
|
35
|
+
const memoryBenchmark = async (sampleRate = 500, clean = true, concurrency = Infinity) => {
|
|
33
36
|
const hexoBin = (0, path_1.resolve)(process.cwd(), "node_modules/hexo/bin/hexo");
|
|
34
37
|
if (clean) {
|
|
35
38
|
const spinner = (0, ora_1.default)({ text: "Cleaning...", color: "cyan" }).start();
|
|
@@ -49,17 +52,23 @@ exports.default = async (sampleRate = 500, clean = true) => {
|
|
|
49
52
|
color: "cyan",
|
|
50
53
|
}).start();
|
|
51
54
|
const hexo = new hexo_1.default(process.cwd(), { silent: true });
|
|
55
|
+
const startTime = Date.now();
|
|
52
56
|
memory.startSampling();
|
|
53
57
|
await hexo.init();
|
|
54
|
-
await hexo.call("generate", {});
|
|
58
|
+
await hexo.call("generate", { concurrency });
|
|
59
|
+
const endTime = Date.now();
|
|
55
60
|
memory.destroy();
|
|
56
61
|
spinner.succeed("Memory profiling complete.");
|
|
57
62
|
const width = Math.floor(process.stdout.columns / MARGIN_FACTOR);
|
|
58
|
-
|
|
63
|
+
const plot = asciichart_1.default.plot(memoryStats.length > width ? sampleData(memoryStats, width) : memoryStats, {
|
|
59
64
|
offset: 2,
|
|
60
65
|
height: Math.min(process.stdout.rows / MARGIN_FACTOR - 10, 30),
|
|
61
66
|
colors: [asciichart_1.default.green],
|
|
62
|
-
})
|
|
67
|
+
});
|
|
68
|
+
console.log(plot);
|
|
69
|
+
if (isGitHubActions) {
|
|
70
|
+
(0, promises_1.appendFile)(process.env.GITHUB_STEP_SUMMARY, `\n\n\`\`\`text\n${plot}\n\`\`\``);
|
|
71
|
+
}
|
|
63
72
|
const stats = getSampleStats(memoryStats);
|
|
64
73
|
console.log("\n\nRSS Memory Stats: \n");
|
|
65
74
|
console.log((0, fast_text_table_1.default)([
|
|
@@ -67,6 +76,23 @@ exports.default = async (sampleRate = 500, clean = true) => {
|
|
|
67
76
|
["Min: ", `${stats.min}MB`],
|
|
68
77
|
["Max: ", `${stats.max}MB`],
|
|
69
78
|
["Midian: ", `${stats.midian}MB`],
|
|
79
|
+
["Total Time: ", `${(endTime - startTime) / 1000}s`],
|
|
70
80
|
]));
|
|
81
|
+
if (isGitHubActions) {
|
|
82
|
+
(0, promises_1.appendFile)(process.env.GITHUB_STEP_SUMMARY, `\n\n| Step | Avg | Min | Max | Midian | Total Time |\n| --- | --- | --- | --- | --- | --- |\n| Memory Stats | ${stats.avg}MB | ${stats.min}MB | ${stats.max}MB | ${stats.midian}MB | ${(endTime - startTime) / 1000}s |\n`);
|
|
83
|
+
}
|
|
84
|
+
await (0, stat_1.default)();
|
|
71
85
|
};
|
|
86
|
+
const args = process.argv.slice(2);
|
|
87
|
+
const sampleRate = Number(args[0]) || 500;
|
|
88
|
+
const concurrency = Number(args[1]) || Infinity;
|
|
89
|
+
const clean = args[2] !== "false";
|
|
90
|
+
memoryBenchmark(sampleRate, clean, concurrency)
|
|
91
|
+
.then(() => {
|
|
92
|
+
process.exit(0);
|
|
93
|
+
})
|
|
94
|
+
.catch((err) => {
|
|
95
|
+
console.error("Error during memory profiling:", err);
|
|
96
|
+
process.exit(1);
|
|
97
|
+
});
|
|
72
98
|
//# sourceMappingURL=memory.js.map
|
package/dist/memory.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":";;;;;AAAA,mCAAgC;AAChC,4DAAoC;AACpC,sEAAoC;AACpC,gDAAwB;AACxB,8CAAsB;AACtB,iDAAsC;AACtC,+BAA+B;
|
|
1
|
+
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":"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"}
|
package/dist/profiling.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
declare const _default: (clean?: boolean) => Promise<void>;
|
|
1
|
+
declare const _default: (clean?: boolean, concurrency?: number, maxOldSpaceSize?: number) => Promise<void>;
|
|
2
2
|
export default _default;
|
package/dist/profiling.js
CHANGED
|
@@ -8,7 +8,8 @@ const fs_1 = __importDefault(require("fs"));
|
|
|
8
8
|
const _0x_1 = __importDefault(require("0x"));
|
|
9
9
|
const ora_1 = __importDefault(require("ora"));
|
|
10
10
|
const child_process_1 = require("child_process");
|
|
11
|
-
|
|
11
|
+
const stat_1 = __importDefault(require("./stat"));
|
|
12
|
+
exports.default = async (clean = true, concurrency = Infinity, maxOldSpaceSize = 4096) => {
|
|
12
13
|
const zeroEksDir = (0, path_1.resolve)(process.cwd(), "0x");
|
|
13
14
|
const hexoBin = (0, path_1.resolve)(process.cwd(), "node_modules/hexo/bin/hexo");
|
|
14
15
|
if (clean) {
|
|
@@ -21,12 +22,22 @@ exports.default = async (clean = true) => {
|
|
|
21
22
|
}
|
|
22
23
|
const spinner = (0, ora_1.default)({ text: "Running profiling...", color: "cyan" }).start();
|
|
23
24
|
const zeroEksOpts = {
|
|
24
|
-
argv: [
|
|
25
|
+
argv: [
|
|
26
|
+
`--max-old-space-size=${maxOldSpaceSize}`,
|
|
27
|
+
hexoBin,
|
|
28
|
+
"g",
|
|
29
|
+
"--cwd",
|
|
30
|
+
process.cwd(),
|
|
31
|
+
"--silent",
|
|
32
|
+
"--concurrency",
|
|
33
|
+
concurrency.toString(),
|
|
34
|
+
],
|
|
25
35
|
workingDir: ".", // A workaround for https://github.com/davidmarkclements/0x/issues/228
|
|
26
36
|
outputDir: zeroEksDir,
|
|
27
37
|
title: "Hexo Flamegraph",
|
|
28
38
|
};
|
|
29
39
|
await (0, _0x_1.default)(zeroEksOpts);
|
|
30
40
|
spinner.succeed("Profiling complete. Flamegraph saved to 0x directory.");
|
|
41
|
+
await (0, stat_1.default)();
|
|
31
42
|
};
|
|
32
43
|
//# sourceMappingURL=profiling.js.map
|
package/dist/profiling.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profiling.js","sourceRoot":"","sources":["../src/profiling.ts"],"names":[],"mappings":";;;;;AAAA,+BAA+B;AAC/B,4CAAoB;AACpB,6CAAyB;AACzB,8CAAsB;AACtB,iDAAsC;
|
|
1
|
+
{"version":3,"file":"profiling.js","sourceRoot":"","sources":["../src/profiling.ts"],"names":[],"mappings":";;;;;AAAA,+BAA+B;AAC/B,4CAAoB;AACpB,6CAAyB;AACzB,8CAAsB;AACtB,iDAAsC;AACtC,kDAA0B;AAE1B,kBAAe,KAAK,EAClB,QAAiB,IAAI,EACrB,cAAsB,QAAQ,EAC9B,kBAA0B,IAAI,EAC9B,EAAE;IACF,MAAM,UAAU,GAAG,IAAA,cAAO,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,IAAA,cAAO,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,4BAA4B,CAAC,CAAC;IAErE,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;QACpE,IAAA,qBAAK,EAAC,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC1D,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,YAAE,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IAC7E,MAAM,WAAW,GAAG;QAClB,IAAI,EAAE;YACJ,wBAAwB,eAAe,EAAE;YACzC,OAAO;YACP,GAAG;YACH,OAAO;YACP,OAAO,CAAC,GAAG,EAAE;YACb,UAAU;YACV,eAAe;YACf,WAAW,CAAC,QAAQ,EAAE;SACvB;QACD,UAAU,EAAE,GAAG,EAAE,sEAAsE;QACvF,SAAS,EAAE,UAAU;QACrB,KAAK,EAAE,iBAAiB;KACzB,CAAC;IACF,MAAM,IAAA,aAAO,EAAC,WAAW,CAAC,CAAC;IAE3B,OAAO,CAAC,OAAO,CAAC,uDAAuD,CAAC,CAAC;IAEzE,MAAM,IAAA,cAAI,GAAE,CAAC;AACf,CAAC,CAAC"}
|
package/dist/stat.d.ts
ADDED
package/dist/stat.js
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const hexo_1 = __importDefault(require("hexo"));
|
|
7
|
+
const fast_text_table_1 = __importDefault(require("fast-text-table"));
|
|
8
|
+
const ora_1 = __importDefault(require("ora"));
|
|
9
|
+
const promises_1 = require("fs/promises");
|
|
10
|
+
const isGitHubActions = process.env.GITHUB_ACTIONS;
|
|
11
|
+
exports.default = async () => {
|
|
12
|
+
const hexo = new hexo_1.default(process.cwd(), { silent: true });
|
|
13
|
+
const spinner = (0, ora_1.default)({
|
|
14
|
+
text: "Starting Hexo statistics...",
|
|
15
|
+
color: "cyan",
|
|
16
|
+
}).start();
|
|
17
|
+
// https://github.com/hexojs/hexo/issues/2579#issuecomment-2058873076
|
|
18
|
+
try {
|
|
19
|
+
await hexo.init();
|
|
20
|
+
await hexo.load();
|
|
21
|
+
const posts = hexo.locals.get("posts").toArray();
|
|
22
|
+
const postAsset = hexo.model("PostAsset");
|
|
23
|
+
let numOfPostAssets = 0;
|
|
24
|
+
let postContentTotalLen = 0;
|
|
25
|
+
for (let post of posts) {
|
|
26
|
+
const dir = post.path.slice(0, post.path.lastIndexOf("/"));
|
|
27
|
+
const assets = postAsset.filter((x) => x._id.includes(dir));
|
|
28
|
+
numOfPostAssets = numOfPostAssets + assets.length;
|
|
29
|
+
postContentTotalLen = postContentTotalLen + post.content.length;
|
|
30
|
+
}
|
|
31
|
+
const pages = hexo.locals.get("pages").toArray();
|
|
32
|
+
const pageAsset = hexo.model("Asset");
|
|
33
|
+
let numOfPageAssets = 0;
|
|
34
|
+
let pageContentTotalLen = 0;
|
|
35
|
+
for (let page of pages) {
|
|
36
|
+
const dir = page.path.slice(0, page.path.lastIndexOf("/"));
|
|
37
|
+
const assets = pageAsset.filter((x) => x._id.includes(dir));
|
|
38
|
+
numOfPageAssets = numOfPageAssets + assets.length;
|
|
39
|
+
pageContentTotalLen = pageContentTotalLen + page.content.length;
|
|
40
|
+
}
|
|
41
|
+
const tags = hexo.locals.get("tags").toArray();
|
|
42
|
+
const categories = hexo.locals.get("categories").toArray();
|
|
43
|
+
const routes = hexo.route.list();
|
|
44
|
+
spinner.succeed("Hexo statistics loaded.");
|
|
45
|
+
console.log("\nHexo Statistics:\n");
|
|
46
|
+
console.log((0, fast_text_table_1.default)([
|
|
47
|
+
["Number of posts: ", `${posts.length}`],
|
|
48
|
+
["Number of post assets: ", `${numOfPostAssets}`],
|
|
49
|
+
[
|
|
50
|
+
"Avg of post content length: ",
|
|
51
|
+
`${posts.length > 0
|
|
52
|
+
? Math.floor(postContentTotalLen / posts.length)
|
|
53
|
+
: 0}`,
|
|
54
|
+
],
|
|
55
|
+
["Number of pages: ", `${pages.length}`],
|
|
56
|
+
["Number of page assets: ", `${numOfPageAssets}`],
|
|
57
|
+
[
|
|
58
|
+
"Avg of page content length: ",
|
|
59
|
+
`${pages.length > 0
|
|
60
|
+
? Math.floor(pageContentTotalLen / pages.length)
|
|
61
|
+
: 0}`,
|
|
62
|
+
],
|
|
63
|
+
["Number of tags: ", `${tags.length}`],
|
|
64
|
+
["Number of categories: ", `${categories.length}`],
|
|
65
|
+
["Number of routes: ", `${routes.length}`],
|
|
66
|
+
]));
|
|
67
|
+
if (isGitHubActions) {
|
|
68
|
+
(0, promises_1.appendFile)(process.env.GITHUB_STEP_SUMMARY, `\n\n## Hexo Statistics\n\n| Step | Count |\n| --- | --- |\n| Number of posts | ${posts.length} |\n| Number of post assets | ${numOfPostAssets} |\n| Avg of post content length | ${posts.length > 0
|
|
69
|
+
? Math.floor(postContentTotalLen / posts.length)
|
|
70
|
+
: 0} |\n| Number of pages | ${pages.length} |\n| Number of page assets | ${numOfPageAssets} |\n| Avg of page content length | ${pages.length > 0
|
|
71
|
+
? Math.floor(pageContentTotalLen / pages.length)
|
|
72
|
+
: 0} |\n| Number of tags | ${tags.length} |\n| Number of categories | ${categories.length} |\n| Number of routes | ${routes.length} |\n`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
catch (e) {
|
|
76
|
+
spinner.fail("Error loading Hexo statistics.");
|
|
77
|
+
console.error(e);
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
//# sourceMappingURL=stat.js.map
|
package/dist/stat.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stat.js","sourceRoot":"","sources":["../src/stat.ts"],"names":[],"mappings":"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"}
|