2017-04-24 4 views
0

私は、aiohttpフレームワークを使用してPython 3.5でかなり単純なAPIを構築しました。パフォーマンスを評価する際に、私は応答データの送信がボトルネックと思われることを発見しました。 Chromeデベロッパーツールの[ネットワーク]タブを見ると、このAPIへの呼び出しの平均待機時間(TTFB)は1秒程度です。コンテンツダウンロードコンポーネントは4-5秒のようなものです。 gzipされたコンテンツの範囲は5〜10 MBです。Python aiohttp - 非常に長い時間をかけてgzipped応答を送信する

apiとクライアントは同じサーバーにはありませんが、両方とも同じサンドボックス環境にあります。だから私はネットワークの待ち時間が原因だとは思わない。私は20MBの.zipファイルダウンロードをほぼ即座にApacheから提供しています...

以下は、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. あなたは、あなたが "sendfileの" OSのAPIを使用していますFileResponseを、使用することができます静的なファイルを提供した場合
  2. 速くする必要がありますnginxのと応答を圧縮することができます。
関連する問題