From 0a9bfd4b69f355200b42c4147cb40a9a77905c9c Mon Sep 17 00:00:00 2001 From: Abdullah Atta Date: Wed, 13 Nov 2024 17:28:52 +0500 Subject: [PATCH] web: get rid of mitata; run benchmarks directly --- apps/web/__bench__/app.bench.mjs | 106 ++++++++++++++++++------------- apps/web/package-lock.json | 8 --- apps/web/package.json | 1 - apps/web/src/common/db.ts | 9 ++- 4 files changed, 65 insertions(+), 59 deletions(-) diff --git a/apps/web/__bench__/app.bench.mjs b/apps/web/__bench__/app.bench.mjs index 357fec3b9..11e5c7ade 100644 --- a/apps/web/__bench__/app.bench.mjs +++ b/apps/web/__bench__/app.bench.mjs @@ -18,7 +18,6 @@ along with this program. If not, see . */ import { chromium } from "playwright"; -import { bench, run, summary } from "mitata"; import { spawn } from "child_process"; const TESTS = [ @@ -37,6 +36,16 @@ const TESTS = [ start: "load:database", end: "render:app" }, + { + name: "initialize database", + start: "start:initializeDatabase", + end: "end:initializeDatabase" + }, + { + name: "init db", + start: "start:initdb", + end: "end:initdb" + }, { name: "signup page load", start: "start:app", @@ -45,9 +54,12 @@ const TESTS = [ } ]; +const serverKillSignal = new AbortController(); async function startServer() { return new Promise((resolve, reject) => { - const server = spawn("npx", ["serve", "-s", "build"]); + const server = spawn("npx", ["serve", "-s", "build"], { + signal: serverKillSignal.signal + }); server.stdout.on("data", (data) => { if (data.toString().includes("Accepting connections")) { @@ -69,54 +81,58 @@ async function startServer() { const server = await startServer(); const browser = await chromium.launch(); - +const ITERATIONS = 10; for (const testCase of TESTS) { - summary(() => { - bench(testCase.name, async function* () { - const context = await browser.newContext({ - baseURL: "http://localhost:3000" - }); - await context.addInitScript({ - content: `window.localStorage.setItem("skipInitiation", "true"); - - const observer = new PerformanceObserver((list, observer) => { - list.getEntries().forEach((entry) => { - if (entry.entryType === "mark" && entry.name === "${testCase.end}") { - observer.disconnect(); - console.log( - "ended: ${testCase.name}", - performance.measure( - "${testCase.end}", - "${testCase.start}", - "${testCase.end}" - ).duration - ); - window.close(); - } - }); - }); - observer.observe({ entryTypes: ["mark"] });` - }); - const page = await context.newPage(); - - yield async () => { - await page.goto(testCase.route || "/"); - await page.waitForEvent("console", { - predicate(consoleMessage) { - return consoleMessage.text().startsWith(`ended: ${testCase.name}`); - } - }); - }; - - await context.close(); + console.log(`Running ${testCase.name}`); + const durations = []; + for (let i = 0; i < ITERATIONS; i++) { + const context = await browser.newContext({ + baseURL: "http://localhost:3000" }); - }); + await context.addInitScript({ + content: `window.localStorage.setItem("skipInitiation", "true"); + + const observer = new PerformanceObserver((list, observer) => { + list.getEntries().forEach((entry) => { + if (entry.entryType === "mark" && entry.name === "${testCase.end}") { + observer.disconnect(); + console.log( + "ended: ${testCase.name}", + performance.measure( + "${testCase.end}", + "${testCase.start}", + "${testCase.end}" + ).duration + ); + } + }); + }); + observer.observe({ entryTypes: ["mark"] });` + }); + const page = await context.newPage(); + + await page.goto(testCase.route || "/"); + const result = await page.waitForEvent("console", (msg) => + msg.text().startsWith(`ended: ${testCase.name}`) + ); + durations.push(await result.args()[1].jsonValue()); + + await context.close(); + } + + const mean = durations.reduce((a, b) => a + b) / durations.length; + const max = Math.max(...durations); + const min = Math.min(...durations); + console.log( + `${testCase.name} took ${mean}ms on average | ${max}ms max | ${min}ms min` + ); } -await run(); - +console.log("done"); await browser.close(); server.stdout.destroy(); server.stderr.destroy(); -server.kill(); +server.kill("SIGKILL"); +console.log(server.killed); +serverKillSignal.abort("finished"); diff --git a/apps/web/package-lock.json b/apps/web/package-lock.json index b6e6259a5..7abb9ef88 100644 --- a/apps/web/package-lock.json +++ b/apps/web/package-lock.json @@ -115,7 +115,6 @@ "happy-dom": "^8.9.0", "ip": "^1.1.8", "lorem-ipsum": "^2.0.4", - "mitata": "^1.0.10", "otplib": "^12.0.1", "rollup": "^4.18.0", "rollup-plugin-visualizer": "^5.12.0", @@ -47298,13 +47297,6 @@ "license": "ISC", "optional": true }, - "node_modules/mitata": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/mitata/-/mitata-1.0.10.tgz", - "integrity": "sha512-pn21sHg5+AiTqj7z7aCeNlkEXMYhAykl1zbGqp1sbTJKRe8lhNokoyubLmvwbY5sWb8B+VDQByn3UyRmdBDQ1w==", - "dev": true, - "license": "MIT" - }, "node_modules/mkdirp": { "version": "1.0.4", "license": "MIT", diff --git a/apps/web/package.json b/apps/web/package.json index 499b580c8..99b1d008e 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -113,7 +113,6 @@ "happy-dom": "^8.9.0", "ip": "^1.1.8", "lorem-ipsum": "^2.0.4", - "mitata": "^1.0.10", "otplib": "^12.0.1", "rollup": "^4.18.0", "rollup-plugin-visualizer": "^5.12.0", diff --git a/apps/web/src/common/db.ts b/apps/web/src/common/db.ts index 6ee3830c7..20903d612 100644 --- a/apps/web/src/common/db.ts +++ b/apps/web/src/common/db.ts @@ -31,7 +31,7 @@ import { FileStorage } from "../interfaces/fs"; const db = database; async function initializeDatabase(persistence: DatabasePersistence) { - logger.measure("Database initialization"); + performance.mark("start:initializeDatabase"); let databaseKey = await useKeyStore.getState().getValue("databaseKey"); if (!databaseKey) { @@ -106,9 +106,9 @@ async function initializeDatabase(persistence: DatabasePersistence) { // }); // } - console.log("loading db"); + performance.mark("start:initdb"); await db.init(); - console.log("db loaded"); + performance.mark("end:initdb"); window.addEventListener("beforeunload", async () => { if (IS_DESKTOP_APP) { @@ -117,14 +117,13 @@ async function initializeDatabase(persistence: DatabasePersistence) { } }); - logger.measure("Database initialization"); - if (db.migrations?.required()) { await import("../dialogs/migration-dialog").then(({ MigrationDialog }) => MigrationDialog.show({}) ); } + performance.mark("end:initializeDatabase"); return db; }