2016-09-15 1 views
1

사용자의받은 편지함에서 메시지를 옮길 수있는 앱을 만들고 있습니다. 현재 Gmail API를 사용하고 있지만 IMAP을 사용하는 것보다 API 요청이 현저히 느린 것으로 나타났습니다.Gmail API messages.modify가 IMAP보다 40 배 느린가요?

이 방법은 간단합니다. 전자 메일 그룹의 레이블을 변경하기 위해 일괄 수정 요청을 보내 그들을 이동시킵니다. Gmail API를 사용하여 메일 처리량은 초당 3.3 메시지입니다. 비교를 위해 IMAP 처리량은 초당 130 메시지입니다.

batch = BatchHttpRequest() 
for gmailId in gmailIds: 
    batch.add(self.service.users().messages().modify(userId=self.user.email, id=gmailId, body=labels)) 
try: 
    batch.execute() 
except errors.HttpError, error: 
    log_this_error(self.user.email, error.resp.status) 

하고 여기에 동일한 작업 수행 내 IMAP 코드 :

# imap_conn is the user's authed connection 
status, count = imap_conn.select(oldMailboxLabel) 
if status == "OK": 
    count = int(count[0]) 
    if count > 0: 
     messageNumbers = range(1, count + 1) 
     messageNumbers = ",".join(map(str, messageNumbers)) 
     imap_conn.copy(messageNumbers, newMailboxLabel) 
     imap_conn.close() 
     imap_conn.delete(oldMailboxLabel) 
    else: 
     imap_conn.close() 
else: 
    count = 0 

이미 배치 나의 요청을 Gzip으로 압축 해요, 그리고 여기에

내가 현재 사용 BatchHttpRequests 해요 방법 필드를 사용하여 반환되는 정보의 양을 제한하려고했습니다. 모두 performance tips 페이지에서 제안됩니다. 요청이 왜 그렇게 오래 걸리는지 이해하는 데 어려움을 겪고 있습니다. 어떤 제안이라도 대단히 감사하겠습니다!

+0

비교를 위해 IMAP 코드를 표시해 주시겠습니까? 또한, 어떤 언어로 쓰고 있습니까? 파이썬처럼 보입니까? – Schwern

+2

안녕하세요 @Schwern, 나는 비교할 IMAP 코드를 추가했습니다. 그리고 네, 저는 파이썬으로 글을 쓰고 있습니다. Gmail API보다 IMAP의 메일 처리량이 훨씬 좋음을 알게되었습니다. – frankjames

답변

0

GMail API를 통해 읽는 것은 "올바르게"수행하는 것 같습니다. 나는 GMail 자체가 메일 클라이언트이기 때문에 GMail API는 완구 메일 클라이언트를 쓰는 것을 목표로하고 IMAP은 완전한 기능을 갖춘 메일 클라이언트의 효율적인 일괄 작업을 위해 더 잘 설계되었다고 생각할 것입니다.

메시지를 이전 레이블에서 새 레이블로 이동하는 경우 rename the label using Users.labels.update일까요?

그렇지 않은 경우 메시지 대신 by thread을 수행하여 요청 수를 줄일 수 있습니다.

또는 IMAP 만 사용하십시오.