aboutsummaryrefslogtreecommitdiffstats
path: root/web_src/js/modules/init.ts
diff options
context:
space:
mode:
Diffstat (limited to 'web_src/js/modules/init.ts')
-rw-r--r--web_src/js/modules/init.ts26
1 files changed, 26 insertions, 0 deletions
diff --git a/web_src/js/modules/init.ts b/web_src/js/modules/init.ts
new file mode 100644
index 0000000000..538fafd83f
--- /dev/null
+++ b/web_src/js/modules/init.ts
@@ -0,0 +1,26 @@
+export class InitPerformanceTracer {
+ results: {name: string, dur: number}[] = [];
+ recordCall(name: string, func: ()=>void) {
+ const start = performance.now();
+ func();
+ this.results.push({name, dur: performance.now() - start});
+ }
+ printResults() {
+ this.results = this.results.sort((a, b) => b.dur - a.dur);
+ for (let i = 0; i < 20 && i < this.results.length; i++) {
+ console.info(`performance trace: ${this.results[i].name} ${this.results[i].dur.toFixed(3)}`);
+ }
+ }
+}
+
+export function callInitFunctions(functions: (() => any)[]): InitPerformanceTracer | null {
+ // Start performance trace by accessing a URL by "https://localhost/?_ui_performance_trace=1" or "https://localhost/?key=value&_ui_performance_trace=1"
+ // It is a quick check, no side effect so no need to do slow URL parsing.
+ const perfTracer = !window.location.search.includes('_ui_performance_trace=1') ? null : new InitPerformanceTracer();
+ if (perfTracer) {
+ for (const func of functions) perfTracer.recordCall(func.name, func);
+ } else {
+ for (const func of functions) func();
+ }
+ return perfTracer;
+}