mirror of
https://github.com/streetwriters/notesnook.git
synced 2025-12-17 12:17:53 +01:00
web: get rid of mitata; run benchmarks directly
This commit is contained in:
@@ -18,7 +18,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { chromium } from "playwright";
|
import { chromium } from "playwright";
|
||||||
import { bench, run, summary } from "mitata";
|
|
||||||
import { spawn } from "child_process";
|
import { spawn } from "child_process";
|
||||||
|
|
||||||
const TESTS = [
|
const TESTS = [
|
||||||
@@ -37,6 +36,16 @@ const TESTS = [
|
|||||||
start: "load:database",
|
start: "load:database",
|
||||||
end: "render:app"
|
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",
|
name: "signup page load",
|
||||||
start: "start:app",
|
start: "start:app",
|
||||||
@@ -45,9 +54,12 @@ const TESTS = [
|
|||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
|
const serverKillSignal = new AbortController();
|
||||||
async function startServer() {
|
async function startServer() {
|
||||||
return new Promise((resolve, reject) => {
|
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) => {
|
server.stdout.on("data", (data) => {
|
||||||
if (data.toString().includes("Accepting connections")) {
|
if (data.toString().includes("Accepting connections")) {
|
||||||
@@ -69,54 +81,58 @@ async function startServer() {
|
|||||||
const server = await startServer();
|
const server = await startServer();
|
||||||
|
|
||||||
const browser = await chromium.launch();
|
const browser = await chromium.launch();
|
||||||
|
const ITERATIONS = 10;
|
||||||
for (const testCase of TESTS) {
|
for (const testCase of TESTS) {
|
||||||
summary(() => {
|
console.log(`Running ${testCase.name}`);
|
||||||
bench(testCase.name, async function* () {
|
const durations = [];
|
||||||
const context = await browser.newContext({
|
for (let i = 0; i < ITERATIONS; i++) {
|
||||||
baseURL: "http://localhost:3000"
|
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();
|
|
||||||
});
|
});
|
||||||
});
|
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();
|
await browser.close();
|
||||||
|
|
||||||
server.stdout.destroy();
|
server.stdout.destroy();
|
||||||
server.stderr.destroy();
|
server.stderr.destroy();
|
||||||
server.kill();
|
server.kill("SIGKILL");
|
||||||
|
console.log(server.killed);
|
||||||
|
serverKillSignal.abort("finished");
|
||||||
|
|||||||
8
apps/web/package-lock.json
generated
8
apps/web/package-lock.json
generated
@@ -115,7 +115,6 @@
|
|||||||
"happy-dom": "^8.9.0",
|
"happy-dom": "^8.9.0",
|
||||||
"ip": "^1.1.8",
|
"ip": "^1.1.8",
|
||||||
"lorem-ipsum": "^2.0.4",
|
"lorem-ipsum": "^2.0.4",
|
||||||
"mitata": "^1.0.10",
|
|
||||||
"otplib": "^12.0.1",
|
"otplib": "^12.0.1",
|
||||||
"rollup": "^4.18.0",
|
"rollup": "^4.18.0",
|
||||||
"rollup-plugin-visualizer": "^5.12.0",
|
"rollup-plugin-visualizer": "^5.12.0",
|
||||||
@@ -47298,13 +47297,6 @@
|
|||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"optional": true
|
"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": {
|
"node_modules/mkdirp": {
|
||||||
"version": "1.0.4",
|
"version": "1.0.4",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
|||||||
@@ -113,7 +113,6 @@
|
|||||||
"happy-dom": "^8.9.0",
|
"happy-dom": "^8.9.0",
|
||||||
"ip": "^1.1.8",
|
"ip": "^1.1.8",
|
||||||
"lorem-ipsum": "^2.0.4",
|
"lorem-ipsum": "^2.0.4",
|
||||||
"mitata": "^1.0.10",
|
|
||||||
"otplib": "^12.0.1",
|
"otplib": "^12.0.1",
|
||||||
"rollup": "^4.18.0",
|
"rollup": "^4.18.0",
|
||||||
"rollup-plugin-visualizer": "^5.12.0",
|
"rollup-plugin-visualizer": "^5.12.0",
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ import { FileStorage } from "../interfaces/fs";
|
|||||||
|
|
||||||
const db = database;
|
const db = database;
|
||||||
async function initializeDatabase(persistence: DatabasePersistence) {
|
async function initializeDatabase(persistence: DatabasePersistence) {
|
||||||
logger.measure("Database initialization");
|
performance.mark("start:initializeDatabase");
|
||||||
|
|
||||||
let databaseKey = await useKeyStore.getState().getValue("databaseKey");
|
let databaseKey = await useKeyStore.getState().getValue("databaseKey");
|
||||||
if (!databaseKey) {
|
if (!databaseKey) {
|
||||||
@@ -106,9 +106,9 @@ async function initializeDatabase(persistence: DatabasePersistence) {
|
|||||||
// });
|
// });
|
||||||
// }
|
// }
|
||||||
|
|
||||||
console.log("loading db");
|
performance.mark("start:initdb");
|
||||||
await db.init();
|
await db.init();
|
||||||
console.log("db loaded");
|
performance.mark("end:initdb");
|
||||||
|
|
||||||
window.addEventListener("beforeunload", async () => {
|
window.addEventListener("beforeunload", async () => {
|
||||||
if (IS_DESKTOP_APP) {
|
if (IS_DESKTOP_APP) {
|
||||||
@@ -117,14 +117,13 @@ async function initializeDatabase(persistence: DatabasePersistence) {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
logger.measure("Database initialization");
|
|
||||||
|
|
||||||
if (db.migrations?.required()) {
|
if (db.migrations?.required()) {
|
||||||
await import("../dialogs/migration-dialog").then(({ MigrationDialog }) =>
|
await import("../dialogs/migration-dialog").then(({ MigrationDialog }) =>
|
||||||
MigrationDialog.show({})
|
MigrationDialog.show({})
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
performance.mark("end:initializeDatabase");
|
||||||
return db;
|
return db;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user