From c4133b9972ff5417e561fc3806e3f770d6589adf Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Sat, 29 Mar 2025 20:13:22 -1000 Subject: [PATCH] Reduce memcpy to coalesce WebSocket messages. In most cases its faster to avoid making the inner payload and than copying it again into the outer payload. --- homeassistant/components/websocket_api/http.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/websocket_api/http.py b/homeassistant/components/websocket_api/http.py index ebca497193b..7d79012dfdd 100644 --- a/homeassistant/components/websocket_api/http.py +++ b/homeassistant/components/websocket_api/http.py @@ -7,6 +7,7 @@ from collections import deque from collections.abc import Callable, Coroutine import datetime as dt from functools import partial +from itertools import chain import logging from typing import TYPE_CHECKING, Any, Final @@ -162,7 +163,8 @@ class WebSocketHandler: await send_bytes_text(message) continue - coalesced_messages = b"".join((b"[", b",".join(message_queue), b"]")) + messages = tuple(chain.from_iterable((x, b",") for x in message_queue)) + coalesced_messages = b"".join((b"[", *messages[:-1], b"]")) message_queue.clear() if is_debug_log_enabled(): debug("%s: Sending %s", self.description, coalesced_messages)