使用IMAP COMPRESS(DEFLATE)是否值得?

3 投票
1 回答
2265 浏览
提问于 2025-04-17 02:05

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那边的处理时间。

另一方面,开启压缩功能会有什么损失呢?

撰写回答