2017-04-24 1 views
0

aiohttp 프레임 워크를 사용하여 Python 3.5에서 상당히 간단한 API를 만들었습니다. 성능을 평가할 때 응답 데이터를 보내는 것이 병목 현상 인 것으로 나타났습니다. Chrome 개발자 도구에서 네트워크 탭을 보면이 API에 대한 평균 대기 시간 (TTFB)은 1 초 정도 일 수 있습니다. 콘텐츠 다운로드 구성 요소는 4-5 초 정도입니다. gzip으로 압축 된 내용의 범위는 5-10MB입니다.Python aiohttp - gzipped 응답 전송 중 매우 긴 코드

api와 클라이언트가 동일한 서버에 있지 않지만 동일한 샌드 박스 환경에 있습니다. 따라서 네트워크 지연이 원인이라고 생각하지 않습니다. 거의 순간적으로 아파치에서 제공되는 20MB .zip 파일 다운로드를 수행 중입니다 ...

다음은 json과 유사한 객체를 클라이언트에 스트리밍하기위한 gzips 유틸리티 기능입니다. 이 작업을 수행하는 더 좋은 방법이 있습니까?

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을"운영 체제 API를 사용 FileResponse를 사용할 수있는 정적 파일을 제공하는 경우
  2. 빠르게 처리 될 수의 nginx와 응답을 압축 할 수 있습니다.