From 4a4018bbfeb94407017741bd5f3b06c84bd7850b Mon Sep 17 00:00:00 2001 From: Jinoh Kang Date: Fri, 29 Nov 2024 10:22:28 +0900 Subject: [PATCH] fix(connect): disable context takeover in websocket transport The `threshold` option in `perMessageDeflate` is ignored due to context takeover being enabled. This leads to WebSocket RPC messages being unconditionally compressed. Most RPC channel messages are small, and unconditionally performing message compression has measurable performance impact. Disable context takeover (for both server and client) to let compression threshold option to take effect. --- packages/playwright-core/src/server/transport.ts | 1 + packages/playwright-core/src/utils/wsServer.ts | 1 + 2 files changed, 2 insertions(+) diff --git a/packages/playwright-core/src/server/transport.ts b/packages/playwright-core/src/server/transport.ts index e213e030e7..507225b04c 100644 --- a/packages/playwright-core/src/server/transport.ts +++ b/packages/playwright-core/src/server/transport.ts @@ -24,6 +24,7 @@ import { httpHappyEyeballsAgent, httpsHappyEyeballsAgent } from '../utils/happy- import type { HeadersArray } from './types'; export const perMessageDeflate = { + clientNoContextTakeover: true, zlibDeflateOptions: { level: 3, }, diff --git a/packages/playwright-core/src/utils/wsServer.ts b/packages/playwright-core/src/utils/wsServer.ts index 63c0ed1fed..636a57c3cc 100644 --- a/packages/playwright-core/src/utils/wsServer.ts +++ b/packages/playwright-core/src/utils/wsServer.ts @@ -25,6 +25,7 @@ let lastConnectionId = 0; const kConnectionSymbol = Symbol('kConnection'); export const perMessageDeflate = { + serverNoContextTakeover: true, zlibDeflateOptions: { level: 3, },