2016-09-15 7 views
1

Ich erstelle eine App, um Nachrichten im Posteingang eines Benutzers zu verschieben. Momentan verwende ich die Google Mail-API, aber ich habe festgestellt, dass Anfragen an die API deutlich langsamer sind als mit IMAP.Gmail-API-Nachrichten.modify 40x langsamer als IMAP?

Die Methode ist unkompliziert: Ich sende einen Stapel von Änderungsanfragen, um die Bezeichnungen einer Gruppe von E-Mails zu ändern, um sie zu verschieben. Der Nachrichten-Durchsatz mit der Google Mail-API beträgt 3,3 Nachrichten/Sekunde. Zum Vergleich beträgt der IMAP-Durchsatz 130 Nachrichten/Sekunde.

Hier ist, wie ich bin derzeit mit BatchHttpRequests:

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) 

und hier ist mein IMAP-Code, der die gleiche Aufgabe erfüllt:

# 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 

Ich bin schon Dosier- und Gzipping meine Wünsche und Ich habe versucht, Felder zu verwenden, um die Menge der Informationen einzuschränken, die zurückgegeben werden. All dies ist auf der Seite vorgeschlagen. Ich habe Mühe zu verstehen, warum die Anfragen so lange dauern. Irgendwelche Vorschläge würden sehr geschätzt werden!

+0

Können Sie Ihren IMAP-Code zum Vergleich anzeigen? In welcher Sprache schreibst du auch? Sieht aus, als wäre es Python? – Schwern

+2

Hi @Swwern, ich habe den IMAP-Code zum Vergleichen hinzugefügt. Und ja, ich schreibe in Python - mein schlechtes wenn das vorher nicht klar war! Ich finde es sehr seltsam, dass IMAP einen besseren Nachrichtendurchsatz als die Gmail API hat – frankjames

Antwort

0

Lesen Sie durch die GMail API Sie scheinen es "richtig" zu tun. Da GMail selbst ein Mail-Client ist, zielt die GMail-API darauf ab, Spielzeug-Mail-Clients zu schreiben, während IMAP besser für die effiziente Massenarbeit eines voll funktionsfähigen Mail-Clients ausgelegt ist.

Wenn Sie umziehen jede Nachricht von einem alten Etikett auf ein neues Etikett, vielleicht stattdessen rename the label using Users.labels.update?

Wenn nicht, können Sie die Anzahl der Anfragen durch by thread anstatt durch Nachricht reduzieren.

Oder verwenden Sie einfach IMAP.