Browse Source

[mod] /image_proxy: use HTTP/1 instead of HTTP/2

httpx: HTTP/2 is slow when a lot data is downloaded.
https://github.com/dalf/pyhttp-benchmark

also, the usage of HTTP/1 decreases the load average
Alexandre Flament 3 years ago
parent
commit
3b0f70ed0f
2 changed files with 11 additions and 5 deletions
  1. 8 0
      searx/network/network.py
  2. 3 5
      searx/webapp.py

+ 8 - 0
searx/network/network.py

@@ -289,6 +289,14 @@ def initialize(settings_engines=None, settings_outgoing=None):
         if isinstance(network, str):
         if isinstance(network, str):
             NETWORKS[engine_name] = NETWORKS[network]
             NETWORKS[engine_name] = NETWORKS[network]
 
 
+    # the /image_proxy endpoint has a dedicated network.
+    # same parameters than the default network, but HTTP/2 is disabled.
+    # It decreases the CPU load average, and the total time is more or less the same
+    if 'image_proxy' not in NETWORKS:
+        image_proxy_params = default_params.copy()
+        image_proxy_params['enable_http2'] = False
+        NETWORKS['image_proxy'] = new_network(image_proxy_params)
+
 
 
 @atexit.register
 @atexit.register
 def done():
 def done():

+ 3 - 5
searx/webapp.py

@@ -108,7 +108,7 @@ from searx.autocomplete import search_autocomplete, backends as autocomplete_bac
 from searx.languages import language_codes as languages
 from searx.languages import language_codes as languages
 from searx.locales import LOCALE_NAMES, UI_LOCALE_CODES, RTL_LOCALES
 from searx.locales import LOCALE_NAMES, UI_LOCALE_CODES, RTL_LOCALES
 from searx.search import SearchWithPlugins, initialize as search_initialize
 from searx.search import SearchWithPlugins, initialize as search_initialize
-from searx.network import stream as http_stream
+from searx.network import stream as http_stream, set_context_network_name
 from searx.search.checker import get_result as checker_get_result
 from searx.search.checker import get_result as checker_get_result
 from searx.settings_loader import get_default_settings_path
 from searx.settings_loader import get_default_settings_path
 
 
@@ -1086,13 +1086,11 @@ def image_proxy():
             'Sec-GPC': '1',
             'Sec-GPC': '1',
             'DNT': '1',
             'DNT': '1',
         }
         }
+        set_context_network_name('image_proxy')
         stream = http_stream(
         stream = http_stream(
             method = 'GET',
             method = 'GET',
             url = url,
             url = url,
-            headers = request_headers,
-            timeout = settings['outgoing']['request_timeout'],
-            allow_redirects = True,
-            max_redirects = 20
+            headers = request_headers
         )
         )
         resp = next(stream)
         resp = next(stream)
         content_length = resp.headers.get('Content-Length')
         content_length = resp.headers.get('Content-Length')