Gmail 支持 IMAP COMPRESS 扩展 ( RFC4978 ),特别是 DEFLATE algorithm ( RFC1951 ) 又名 zlib/gzip。
我通常不是 Python 程序员,但我使用 Piers Lauder's imaplib2 编写了一个快速测试脚本以确定启用或不启用压缩的性能。
from time import time
import imaplib2, string
def cb((response, cb_arg, error)):
typ, data = response
#print 'Message %s\n%s\n' % (cb_arg, data[0][5])
IMAP_SERVER='imap.gmail.com'
IMAP_PORT=993
IMAP_USERNAME='*********'
IMAP_PASSWORD='*********'
def gogmail(compress):
start = time()
M = imaplib2.IMAP4_SSL(IMAP_SERVER, IMAP_PORT, debug=0)
M.login(IMAP_USERNAME, IMAP_PASSWORD)
if(compress):
M.enable_compression()
M.SELECT(readonly=True)
typ, data = M.SEARCH(None, 'ALL')
fetch_list = string.split(data[0])[-100:]
for num in fetch_list:
M.FETCH(num, '(RFC822)', callback=cb, cb_arg=num)
M.LOGOUT()
end = time()
print end - start
print 'Compressed '
print '------------'
for x in range(0, 50):
gogmail(1)
print 'Uncompressed'
print '------------'
for x in range(0, 50):
gogmail(0)
如果我在 Python 代码中犯了明显的新手错误,请纠正我。
我已经多次运行此测试脚本。有时压缩访问的平均速度更快,有时则不然。均值和访问时间的变化很大(单个收件箱访问 100 条消息可能需要 4 到 17 秒)。一致的结果会让我的决定更容易!访问是通过 SSL 我在想,也许其中有一些固有的压缩(我不知道)。
您认为在访问 Gmail IMAP 时值得使用压缩吗?
顺便说一句,我想使用 JavaMail(而不是 Python),但我知道我需要显着自定义 JavaMail 以支持压缩(可能使用 Jessie)。有人已经这样做了吗?值得吗?
感谢反馈。非常感谢。
请您参考如下方法:
我不认为启用压缩会有很大的不同,因为 100 条消息是极小的数据量。假设一条消息是 1KB(很长的明文消息),那么您的收件箱是 100KB。我们假设压缩比为 5:1(最好的情况下不太可能),因此压缩后的下载现在为 20KB。
如今任何正常的互联网连接至少以 1Mbps 或 125KB/s 的速度运行。因此,在这些高估的假设下,您可以节省不到一秒的数据传输成本。这与连接延迟和 gmail 端的处理相形见绌。
另一方面,启用压缩会损失什么?
