From 28d49dd3f0192054484f179de1b446a0324786f4 Mon Sep 17 00:00:00 2001 From: Joakim Plate Date: Sat, 16 Dec 2017 13:57:14 +0100 Subject: [PATCH 1/3] Enable compression when sending json to client Make server compress json content when transmitting to client. Json is quite verbose and compresses well. A real world example is history_graph requested data for in my case 4 temperature sensors updating every half a second for a graph over 10 days lead to 6MB json which compressed to 200KB using deflate compression. --- homeassistant/components/http/__init__.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/http/__init__.py b/homeassistant/components/http/__init__.py index 17ceccfd218189..94c31605a74836 100644 --- a/homeassistant/components/http/__init__.py +++ b/homeassistant/components/http/__init__.py @@ -362,9 +362,11 @@ def json(self, result, status_code=200, headers=None): """Return a JSON response.""" msg = json.dumps( result, sort_keys=True, cls=rem.JSONEncoder).encode('UTF-8') - return web.Response( + j = web.Response( body=msg, content_type=CONTENT_TYPE_JSON, status=status_code, headers=headers) + j.enable_compression() + return j def json_message(self, message, status_code=200, message_code=None, headers=None): From 3acfaefa58452289ea332c74cacfbab7302e4646 Mon Sep 17 00:00:00 2001 From: Joakim Plate Date: Mon, 25 Dec 2017 14:07:47 +0100 Subject: [PATCH 2/3] Rename variable to request --- homeassistant/components/http/__init__.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/http/__init__.py b/homeassistant/components/http/__init__.py index 94c31605a74836..953c323db058f0 100644 --- a/homeassistant/components/http/__init__.py +++ b/homeassistant/components/http/__init__.py @@ -362,11 +362,11 @@ def json(self, result, status_code=200, headers=None): """Return a JSON response.""" msg = json.dumps( result, sort_keys=True, cls=rem.JSONEncoder).encode('UTF-8') - j = web.Response( + request = web.Response( body=msg, content_type=CONTENT_TYPE_JSON, status=status_code, headers=headers) - j.enable_compression() - return j + request.enable_compression() + return request def json_message(self, message, status_code=200, message_code=None, headers=None): From 6634f150c26b8eccc08f62d5040ecd5be2a57085 Mon Sep 17 00:00:00 2001 From: Joakim Plate Date: Fri, 19 Jan 2018 22:48:50 +0100 Subject: [PATCH 3/3] Name the variable response instead of request --- homeassistant/components/http/__init__.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/http/__init__.py b/homeassistant/components/http/__init__.py index 953c323db058f0..a4cc52d25ea1af 100644 --- a/homeassistant/components/http/__init__.py +++ b/homeassistant/components/http/__init__.py @@ -362,11 +362,11 @@ def json(self, result, status_code=200, headers=None): """Return a JSON response.""" msg = json.dumps( result, sort_keys=True, cls=rem.JSONEncoder).encode('UTF-8') - request = web.Response( + response = web.Response( body=msg, content_type=CONTENT_TYPE_JSON, status=status_code, headers=headers) - request.enable_compression() - return request + response.enable_compression() + return response def json_message(self, message, status_code=200, message_code=None, headers=None):