Skip to content

Commit bc664ed

Browse files
committed
Cache secure contexts for TLS perf (~10% speed up in pure TLS conns)
1 parent c910af5 commit bc664ed

1 file changed

Lines changed: 14 additions & 6 deletions

File tree

src/server/http-combo-server.ts

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,9 @@ export async function createComboServer(options: ComboServerOptions): Promise<De
200200
ALPNProtocols: serverProtocolPreferences
201201
}
202202

203+
// Cache secure contexts by domain to avoid expensive re-creation on every connection
204+
const secureContextCache = new Map<string, tls.SecureContext>();
205+
203206
tlsServer = tls.createServer({
204207
key: defaultCert.key,
205208
cert: defaultCert.cert,
@@ -210,12 +213,17 @@ export async function createComboServer(options: ComboServerOptions): Promise<De
210213
if (options.debug) console.log(`Generating certificate for ${domain}`);
211214

212215
try {
213-
const generatedCert = await ca.generateCertificate(domain);
214-
cb(null, tls.createSecureContext({
215-
key: generatedCert.key,
216-
cert: generatedCert.cert,
217-
ca: generatedCert.ca
218-
}));
216+
let secureContext = secureContextCache.get(domain);
217+
if (!secureContext) {
218+
const generatedCert = await ca.generateCertificate(domain);
219+
secureContext = tls.createSecureContext({
220+
key: generatedCert.key,
221+
cert: generatedCert.cert,
222+
ca: generatedCert.ca
223+
});
224+
secureContextCache.set(domain, secureContext);
225+
}
226+
cb(null, secureContext);
219227
} catch (e) {
220228
console.error('Cert generation error', e);
221229
cb(e);

0 commit comments

Comments
 (0)