2017-04-24 58 views
0

我已經在Python 3.5中使用aiohttp框架構建了一個相當簡單的API。在評估性能時,我發現發送響應數據似乎是瓶頸。在Chrome Developer工具中查看「網絡」選項卡時,調用此API的平均等待時間(TTFB)可能爲1秒左右。內容下載組件大約4-5秒。壓縮的內容在5-10 MB的範圍內。Python aiohttp - 發送gzipped響應時間非常長

api和客戶端不在同一臺服務器上 - 但都在同一個沙盒環境中。所以我不認爲網絡延遲是原因。我正在做從apache服務的20MB .zip文件下載幾乎是瞬間...

下面是一個實用程序函數,gzips任何類似json的對象流到客戶端。有一個更好的方法嗎?

def gzipped_json_response(obj): 
    obj_as_bytes = bytes(json.dumps(obj), 'utf-8') 
    out = gzip.compress(obj_as_bytes, compresslevel=5) 
    return aiohttp.web.Response(
     body=out, 
     headers={ 
      "Content-Encoding":"gzip" 
     } 
    ) 
+0

爲您的函數調用每個調用可能是查看哪個調用導致問題的良好起點。 – user2896976

回答

1
  1. 可以壓縮響應nginx的,如果你提供的靜態文件,你可以使用FileResponse,它使用「的sendfile」操作系統的API,它應該會更快