Quoting Timo Sirainen <t...@iki.fi>:

On 23.6.2012, at 13.21, Ed W wrote:

But I don't know, whether this is the sort of caching you are referring to.

what's a point of caching imap, except your webmail service is not locally connected (localhost or LAN) to imap server?

Asking for items 600-615 from a threaded list, sorted by something, can be an expensive operation, especially if you just asked for items 585-600 a moment ago?

Can be, but is it? :) Dovecot attempts to cache/index stuff as well. Normally there shouldn't be a need for extra caching layer except in cases of higher network latency.

Timo: I'm not sure if you are saying that all client-side caching is wrong. If so, I'm going to disagree with you, especially when dealing with more complex data structures.

Let me first say that I don't take IMAP response parsing to be a computationally easy action. So it's not just network latency you are worrying about; parsing a line can be the limiting factor in many cases. For example, a deeply threaded 400 message mailbox will return a THREAD response line that will take quite a bit of recursive parsing to decode.

And various FETCH criteria most definitely benefit from local caching above/beyond what dovecot provides. An example: BODYSTRUCTURE. This may be cached on the dovecot side, but when received by the MUA you have to parse the IMAP BODYSTRUCTURE response (not trivial). You also have to potentially handle IMAP response codes in the server command completion line. And the bodystructure data is probably not all that useful until converted to a usable object on the MUA side, which may be another relatively expensive operation. So a locally cached bodystructure object is a substantial performance benefit over having to recreate this data from the cached data on the dovecot side.

ENVELOPE is similar. Most likely this will be converted to an object representation in the MUA so you have the same benefits as BODYSTRUCTURE. Additionally, in IMP we do things like scan for broken charset headers (e.g. Subject headers that contain non-ASCII characters) and have some algorithms to fix these issues. This "value-added" code would be prohibitively expensive if we have to do it on every mailbox access.

Message flags are another benefit to caching. The list of flags may be cached on dovecot, but not having to issue a flag FETCH every time you access a mailbox can be a substantial benefit.

But I will heartily agree that nobody should be caching things like headertext or bodypart data. There is little/no benefit you receive from caching this locally. This is where you should be leveraging the storage on the IMAP server.

As an MUA author you can't rely on the fact that you are connecting to a competent IMAP server. You just as likely are going to be connecting to a server that implements base RFC 3501, and most likely implements that incorrectly. Not all of us are lucky to connect to Dovecot (or Cyrus).

So smart caching most definitely can and will increase performance of an MUA, regardless of caching performed by the IMAP server.

michael

Reply via email to