Skip to content

Commit 128f0fb

Browse files
committed
perf: ⚡️ time startup dependencies
1 parent 6310517 commit 128f0fb

File tree

4 files changed

+31
-0
lines changed

4 files changed

+31
-0
lines changed

server/src/db/initDrizzle.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,20 +39,26 @@ export const initDrizzle = ({
3939
};
4040

4141
// -- Critical pool: used by check, track, getOrCreateCustomer --
42+
console.time("db:pool-critical");
4243
export const { db: dbCritical, client: clientCritical } = initDrizzle({
4344
// connectTimeout: 10,
4445
});
46+
console.timeEnd("db:pool-critical");
4547

4648
// -- General pool: used by all other endpoints --
49+
console.time("db:pool-general");
4750
export const { db: dbGeneral, client: clientGeneral } = initDrizzle({
4851
// connectTimeout: 5,
4952
});
53+
console.timeEnd("db:pool-general");
5054

5155
// -- Replica pool: used as fallback when primary is degraded --
5256
// Only created if DATABASE_REPLICA_URL is configured.
57+
console.time("db:pool-replica");
5358
const replicaResult = process.env.DATABASE_REPLICA_URL
5459
? initDrizzle({ replica: true, maxConnections: 5, connectTimeout: undefined })
5560
: null;
61+
console.timeEnd("db:pool-replica");
5662
export const dbReplica = replicaResult?.db ?? null;
5763
export const clientReplica = replicaResult?.client ?? null;
5864

server/src/db/pgHealthMonitor.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,10 @@ export const initPgHealthMonitor = ({
4949
}: {
5050
client: postgres.Sql;
5151
}): void => {
52+
console.time("db:health-monitor-init");
5253
probeClient = client;
5354
logger.info("[PgHealthMonitor] Initialized", { type: "pg_health_init" });
55+
console.timeEnd("db:health-monitor-init");
5456
};
5557

5658
/**

server/src/external/redis/initRedis.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,22 +92,26 @@ const waitForRedisReady = (
9292

9393
/** Pre-warm all regional Redis connections. Call on startup before processing requests. */
9494
export const warmupRegionalRedis = async (): Promise<void> => {
95+
console.time("redis:warmup-total");
9596
const regions = getConfiguredRegions();
9697
console.log(
9798
`[Redis] Warming up connections for ${regions.length} regions...`,
9899
);
99100

100101
const warmupPromises = regions.map(async (region) => {
102+
console.time(`redis:warmup-${region}`);
101103
try {
102104
const instance = getRegionalRedis(region);
103105
await waitForRedisReady(instance, region);
104106
} catch (error) {
105107
console.error(`[Redis] ${region}: warmup failed -`, error);
106108
// Don't throw - allow startup to continue even if one region fails
107109
}
110+
console.timeEnd(`redis:warmup-${region}`);
108111
});
109112

110113
await Promise.all(warmupPromises);
114+
console.timeEnd("redis:warmup-total");
111115
console.log(`[Redis] Warmup complete`);
112116
};
113117

server/src/init.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,41 +20,57 @@ import { startMemoryMonitor } from "./utils/memoryMonitor.js";
2020
checkEnvVars();
2121

2222
const init = async () => {
23+
console.time("init:create-hono-app");
2324
const app = createHonoApp();
25+
console.timeEnd("init:create-hono-app");
2426

27+
console.time("init:pg-health-monitor");
2528
initPgHealthMonitor({ client: clientCritical });
29+
console.timeEnd("init:pg-health-monitor");
30+
31+
console.time("init:redis-warmup");
2632
await Promise.all([warmupRegionalRedis()]);
33+
console.timeEnd("init:redis-warmup");
2734

2835
const PORT = process.env.SERVER_PORT
2936
? Number.parseInt(process.env.SERVER_PORT)
3037
: 8080;
3138

39+
console.time("init:setup-server");
3240
const requestListener = getRequestListener(app.fetch);
3341
const server = http.createServer(requestListener);
3442

3543
server.keepAliveTimeout = 120000;
3644
server.headersTimeout = 120000;
45+
console.timeEnd("init:setup-server");
3746

47+
console.time("init:server-listen");
3848
server.listen(PORT, "0.0.0.0", () => {
49+
console.timeEnd("init:server-listen");
3950
console.log(`Server running on port ${PORT}`);
4051
startMemoryMonitor("server", 60_000);
4152
});
4253
};
4354

4455
if (process.env.NODE_ENV === "development") {
56+
console.time("init:dev-total");
4557
init();
4658
registerShutdownHandlers();
59+
console.timeEnd("init:dev-total");
4760
} else {
4861
const numCPUs = os.cpus().length;
4962

5063
if (cluster.isPrimary) {
64+
console.time("init:master-start");
5165
console.log(`Master ${process.pid} is running`);
5266
console.log("Number of CPUs", numCPUs);
5367

5468
const numWorkers = 3;
5569

5670
for (let i = 0; i < numWorkers; i++) {
71+
console.time(`init:worker-fork-${i}`);
5772
cluster.fork();
73+
console.timeEnd(`init:worker-fork-${i}`);
5874
}
5975

6076
cluster.on("exit", (worker, _code, _signal) => {
@@ -63,9 +79,12 @@ if (process.env.NODE_ENV === "development") {
6379
});
6480

6581
registerShutdownHandlers();
82+
console.timeEnd("init:master-start");
6683
} else {
84+
console.time(`init:worker-${process.pid}-total`);
6785
init();
6886
registerShutdownHandlers();
87+
console.timeEnd(`init:worker-${process.pid}-total`);
6988
}
7089
}
7190

0 commit comments

Comments
 (0)