使用IMAP COMPRESS(DEFLATE)是否值得?
Gmail支持IMAP的压缩扩展功能,这个功能是根据一个叫做RFC4978的标准来实现的,具体使用的是DEFLATE算法,这个算法也被称为zlib或gzip,详细信息可以参考RFC1951。
我平时不太用Python,但我快速写了一个测试脚本,使用了Piers Lauder的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进行访问,想知道是不是SSL本身就有一些压缩的功能(我不太确定)。
你觉得在访问Gmail的IMAP时使用压缩有必要吗?
顺便说一下,我想用JavaMail(而不是Python),但我了解到我需要对JavaMail进行大量定制才能支持压缩(可能需要用到Jessie)。有人已经做过这个吗?值得这样做吗?
谢谢你的反馈,非常感谢。
1 个回答
0
我觉得开启压缩功能不会带来太大的变化,因为100条消息其实是个非常小的数据量。假设每条消息是1KB(一条比较长的纯文本消息),那么你的收件箱总共就是100KB。我们假设压缩比是5:1(这其实很难达到),那么压缩后的下载大小就变成20KB了。
现在,任何正常的网络连接速度至少都是1Mbps,也就是125KB每秒。所以在这些过于乐观的假设下,你最多也就能节省不到一秒钟的数据传输时间。而这点时间根本比不上连接延迟和Gmail那边的处理时间。
另一方面,开启压缩功能会有什么损失呢?