bench-hexo 0.1.0 → 0.2.0
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 +15 -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 +19 -2
- 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 +71 -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,7 @@ 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"));
|
|
10
11
|
const hooks = [
|
|
11
12
|
{ regex: /Hexo version/, tag: "hexo-begin" },
|
|
12
13
|
{ regex: /Start processing/, tag: "processing" },
|
|
@@ -19,7 +20,7 @@ const hexoBin = (0, path_1.resolve)(process.cwd(), "node_modules/hexo/bin/hexo")
|
|
|
19
20
|
function cleanUp() {
|
|
20
21
|
(0, child_process_1.spawn)("node", [hexoBin, "clean"], { cwd: process.cwd() });
|
|
21
22
|
}
|
|
22
|
-
async function run_benchmark(name, spinner) {
|
|
23
|
+
async function run_benchmark(name, spinner, concurrency, maxOldSpaceSize) {
|
|
23
24
|
let measureFinished = false;
|
|
24
25
|
return new Promise((resolve) => {
|
|
25
26
|
const result = {};
|
|
@@ -44,7 +45,14 @@ async function run_benchmark(name, spinner) {
|
|
|
44
45
|
}
|
|
45
46
|
});
|
|
46
47
|
obs.observe({ entryTypes: ["measure"] });
|
|
47
|
-
const hexo = (0, child_process_1.spawn)("node", [
|
|
48
|
+
const hexo = (0, child_process_1.spawn)("node", [
|
|
49
|
+
`--max-old-space-size=${maxOldSpaceSize}`,
|
|
50
|
+
hexoBin,
|
|
51
|
+
"g",
|
|
52
|
+
"--debug",
|
|
53
|
+
"--concurrency",
|
|
54
|
+
concurrency.toString(),
|
|
55
|
+
], {
|
|
48
56
|
cwd: process.cwd(),
|
|
49
57
|
});
|
|
50
58
|
hooks.forEach(({ regex, tag }) => {
|
|
@@ -96,7 +104,7 @@ async function run_benchmark(name, spinner) {
|
|
|
96
104
|
});
|
|
97
105
|
});
|
|
98
106
|
}
|
|
99
|
-
exports.default = async () => {
|
|
107
|
+
exports.default = async (concurrency = Infinity, maxOldSpaceSize = 4096) => {
|
|
100
108
|
let spinner = (0, ora_1.default)({ text: "Cleaning...", color: "cyan" }).start();
|
|
101
109
|
cleanUp();
|
|
102
110
|
spinner.succeed("Cleaning complete.");
|
|
@@ -104,12 +112,12 @@ exports.default = async () => {
|
|
|
104
112
|
text: "Running cold processing...",
|
|
105
113
|
color: "cyan",
|
|
106
114
|
}).start();
|
|
107
|
-
await run_benchmark("Cold processing", spinner);
|
|
115
|
+
await run_benchmark("Cold processing", spinner, concurrency, maxOldSpaceSize);
|
|
108
116
|
spinner = (0, ora_1.default)({
|
|
109
117
|
text: "Running hot processing...",
|
|
110
118
|
color: "cyan",
|
|
111
119
|
}).start();
|
|
112
|
-
await run_benchmark("Hot processing", spinner);
|
|
120
|
+
await run_benchmark("Hot processing", spinner, concurrency, maxOldSpaceSize);
|
|
113
121
|
spinner = (0, ora_1.default)({ text: "Cleaning...", color: "cyan" }).start();
|
|
114
122
|
cleanUp();
|
|
115
123
|
spinner.succeed("Cleaning complete.");
|
|
@@ -117,6 +125,7 @@ exports.default = async () => {
|
|
|
117
125
|
text: "Running another cold processing...",
|
|
118
126
|
color: "cyan",
|
|
119
127
|
}).start();
|
|
120
|
-
await run_benchmark("Another Cold processing", spinner);
|
|
128
|
+
await run_benchmark("Another Cold processing", spinner, concurrency, maxOldSpaceSize);
|
|
129
|
+
await (0, stat_1.default)();
|
|
121
130
|
};
|
|
122
131
|
//# 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,6 +10,7 @@ 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"));
|
|
13
14
|
const MARGIN_FACTOR = 1.3;
|
|
14
15
|
function sampleData(oldArr, width) {
|
|
15
16
|
const factor = Math.round(oldArr.length / width);
|
|
@@ -29,7 +30,7 @@ function getSampleStats(arr) {
|
|
|
29
30
|
midian: midian.toFixed(2),
|
|
30
31
|
};
|
|
31
32
|
}
|
|
32
|
-
|
|
33
|
+
const memoryBenchmark = async (sampleRate = 500, clean = true, concurrency = Infinity) => {
|
|
33
34
|
const hexoBin = (0, path_1.resolve)(process.cwd(), "node_modules/hexo/bin/hexo");
|
|
34
35
|
if (clean) {
|
|
35
36
|
const spinner = (0, ora_1.default)({ text: "Cleaning...", color: "cyan" }).start();
|
|
@@ -49,9 +50,11 @@ exports.default = async (sampleRate = 500, clean = true) => {
|
|
|
49
50
|
color: "cyan",
|
|
50
51
|
}).start();
|
|
51
52
|
const hexo = new hexo_1.default(process.cwd(), { silent: true });
|
|
53
|
+
const startTime = Date.now();
|
|
52
54
|
memory.startSampling();
|
|
53
55
|
await hexo.init();
|
|
54
|
-
await hexo.call("generate", {});
|
|
56
|
+
await hexo.call("generate", { concurrency });
|
|
57
|
+
const endTime = Date.now();
|
|
55
58
|
memory.destroy();
|
|
56
59
|
spinner.succeed("Memory profiling complete.");
|
|
57
60
|
const width = Math.floor(process.stdout.columns / MARGIN_FACTOR);
|
|
@@ -67,6 +70,20 @@ exports.default = async (sampleRate = 500, clean = true) => {
|
|
|
67
70
|
["Min: ", `${stats.min}MB`],
|
|
68
71
|
["Max: ", `${stats.max}MB`],
|
|
69
72
|
["Midian: ", `${stats.midian}MB`],
|
|
73
|
+
["Total Time: ", `${(endTime - startTime) / 1000}s`],
|
|
70
74
|
]));
|
|
75
|
+
await (0, stat_1.default)();
|
|
71
76
|
};
|
|
77
|
+
const args = process.argv.slice(2);
|
|
78
|
+
const sampleRate = Number(args[0]) || 500;
|
|
79
|
+
const concurrency = Number(args[1]) || Infinity;
|
|
80
|
+
const clean = args[2] !== "false";
|
|
81
|
+
memoryBenchmark(sampleRate, clean, concurrency)
|
|
82
|
+
.then(() => {
|
|
83
|
+
process.exit(0);
|
|
84
|
+
})
|
|
85
|
+
.catch((err) => {
|
|
86
|
+
console.error("Error during memory profiling:", err);
|
|
87
|
+
process.exit(1);
|
|
88
|
+
});
|
|
72
89
|
//# 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":";;;;;AAAA,mCAAgC;AAChC,4DAAoC;AACpC,sEAAoC;AACpC,gDAAwB;AACxB,8CAAsB;AACtB,iDAAsC;AACtC,+BAA+B;AAC/B,kDAA0B;AAE1B,MAAM,aAAa,GAAG,GAAG,CAAC;AAE1B,SAAS,UAAU,CAAC,MAAgB,EAAE,KAAa;IACjD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;IACjD,OAAO,MAAM,CAAC,MAAM,CAAC,UAAU,KAAK,EAAE,KAAK,EAAE,GAAG;QAC9C,OAAO,KAAK,GAAG,MAAM,IAAI,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,cAAc,CAAC,GAAa;IACnC,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC;IACxD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;IAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;IAC7B,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IACrE,OAAO;QACL,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QACnB,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QACnB,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;KAC1B,CAAC;AACJ,CAAC;AAED,MAAM,eAAe,GAAG,KAAK,EAC3B,aAAqB,GAAG,EACxB,QAAiB,IAAI,EACrB,cAAsB,QAAQ,EAC9B,EAAE;IACF,MAAM,OAAO,GAAG,IAAA,cAAO,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,4BAA4B,CAAC,CAAC;IACrE,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,MAAM,MAAM,GAAG,IAAI,eAAM,EAAE,CAAC;IAC5B,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,MAAM,CAAC,gBAAgB,CACrB;QACE,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,KAAK;KACd,EACD,CAAC,IAAI,EAAE,EAAE;QACP,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;IAC5C,CAAC,EACD,UAAU,CACX,CAAC;IAEF,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC;QAClB,IAAI,EAAE,6BAA6B;QACnC,KAAK,EAAE,MAAM;KACd,CAAC,CAAC,KAAK,EAAE,CAAC;IACX,MAAM,IAAI,GAAG,IAAI,cAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,CAAC,aAAa,EAAE,CAAC;IACvB,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;IAClB,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC3B,MAAM,CAAC,OAAO,EAAE,CAAC;IACjB,OAAO,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC;IAE9C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,GAAG,aAAa,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CACT,oBAAU,CAAC,IAAI,CACb,WAAW,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EACzE;QACE,MAAM,EAAE,CAAC;QACT,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,GAAG,aAAa,GAAG,EAAE,EAAE,EAAE,CAAC;QAC9D,MAAM,EAAE,CAAC,oBAAU,CAAC,KAAK,CAAC;KAC3B,CACF,CACF,CAAC;IACF,MAAM,KAAK,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CACT,IAAA,yBAAK,EAAC;QACJ,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC;QAC3B,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC;QAC3B,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC;QAC3B,CAAC,UAAU,EAAE,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC;QACjC,CAAC,cAAc,EAAE,GAAG,CAAC,OAAO,GAAG,SAAS,CAAC,GAAG,IAAI,GAAG,CAAC;KACrD,CAAC,CACH,CAAC;IAEF,MAAM,IAAA,cAAI,GAAE,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;AAC1C,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC;AAChD,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC;AAElC,eAAe,CAAC,UAAU,EAAE,KAAK,EAAE,WAAW,CAAC;KAC5C,IAAI,CAAC,GAAG,EAAE;IACT,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC;KACD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACb,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,GAAG,CAAC,CAAC;IACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
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,71 @@
|
|
|
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
|
+
exports.default = async () => {
|
|
10
|
+
const hexo = new hexo_1.default(process.cwd(), { silent: true });
|
|
11
|
+
const spinner = (0, ora_1.default)({
|
|
12
|
+
text: "Starting Hexo statistics...",
|
|
13
|
+
color: "cyan",
|
|
14
|
+
}).start();
|
|
15
|
+
// https://github.com/hexojs/hexo/issues/2579#issuecomment-2058873076
|
|
16
|
+
try {
|
|
17
|
+
await hexo.init();
|
|
18
|
+
await hexo.load();
|
|
19
|
+
const posts = hexo.locals.get("posts").toArray();
|
|
20
|
+
const postAsset = hexo.model("PostAsset");
|
|
21
|
+
let numOfPostAssets = 0;
|
|
22
|
+
let postContentTotalLen = 0;
|
|
23
|
+
for (let post of posts) {
|
|
24
|
+
const dir = post.path.slice(0, post.path.lastIndexOf("/"));
|
|
25
|
+
const assets = postAsset.filter((x) => x._id.includes(dir));
|
|
26
|
+
numOfPostAssets = numOfPostAssets + assets.length;
|
|
27
|
+
postContentTotalLen = postContentTotalLen + post.content.length;
|
|
28
|
+
}
|
|
29
|
+
const pages = hexo.locals.get("pages").toArray();
|
|
30
|
+
const pageAsset = hexo.model("Asset");
|
|
31
|
+
let numOfPageAssets = 0;
|
|
32
|
+
let pageContentTotalLen = 0;
|
|
33
|
+
for (let page of pages) {
|
|
34
|
+
const dir = page.path.slice(0, page.path.lastIndexOf("/"));
|
|
35
|
+
const assets = pageAsset.filter((x) => x._id.includes(dir));
|
|
36
|
+
numOfPageAssets = numOfPageAssets + assets.length;
|
|
37
|
+
pageContentTotalLen = pageContentTotalLen + page.content.length;
|
|
38
|
+
}
|
|
39
|
+
const tags = hexo.locals.get("tags").toArray();
|
|
40
|
+
const categories = hexo.locals.get("categories").toArray();
|
|
41
|
+
const routes = hexo.route.list();
|
|
42
|
+
spinner.succeed("Hexo statistics loaded.");
|
|
43
|
+
console.log("\nHexo Statistics:\n");
|
|
44
|
+
console.log((0, fast_text_table_1.default)([
|
|
45
|
+
["Number of posts: ", `${posts.length}`],
|
|
46
|
+
["Number of post assets: ", `${numOfPostAssets}`],
|
|
47
|
+
[
|
|
48
|
+
"Avg of post content length: ",
|
|
49
|
+
`${posts.length > 0
|
|
50
|
+
? Math.floor(postContentTotalLen / posts.length)
|
|
51
|
+
: 0}`,
|
|
52
|
+
],
|
|
53
|
+
["Number of pages: ", `${pages.length}`],
|
|
54
|
+
["Number of page assets: ", `${numOfPageAssets}`],
|
|
55
|
+
[
|
|
56
|
+
"Avg of page content length: ",
|
|
57
|
+
`${pages.length > 0
|
|
58
|
+
? Math.floor(pageContentTotalLen / pages.length)
|
|
59
|
+
: 0}`,
|
|
60
|
+
],
|
|
61
|
+
["Number of tags: ", `${tags.length}`],
|
|
62
|
+
["Number of categories: ", `${categories.length}`],
|
|
63
|
+
["Number of routes: ", `${routes.length}`],
|
|
64
|
+
]));
|
|
65
|
+
}
|
|
66
|
+
catch (e) {
|
|
67
|
+
spinner.fail("Error loading Hexo statistics.");
|
|
68
|
+
console.error(e);
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
//# 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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"}
|