[dev] Horde IMAP features (or why our webmail client is better than your webmail client)

Jan Schneider jan at horde.org
Tue May 24 09:20:03 UTC 2011


Zitat von Michael M Slusarz <slusarz at horde.org>:

> Been meaning to do this for awhile, and this is only sort of a  
> half-hearted first attempt/draft, but in the past there has been  
> interest into what has actually gone on internally in Horde 4/IMP 5  
> to improve performance and features.  Answer: a bunch.
>
> I can proudly state that Horde_Imap_Client, the Horde library that  
> powers IMP, is by far the most complete, fastest, and most feature  
> rich PHP library out there.  As a webmail developer, I often monitor  
> the other freely available options there to gauge our process.  And  
> my honest assessment is that we are unarguably the best solution  
> when it comes to features, performance, and stability.
>
> So it might be good to list what I think some of these features are  
> so that others can compare and see for themselves what we do better  
> than anyone else.  To further this goal, I've started to add some  
> content to the Horde_Imap_Client page:
>
> http://wiki.horde.org/Project/HordeImapLib
>
> If there is interest, I will try to expand on some of the existing  
> entries (and add additional information).  I've thought about  
> providing side-by-side outputs of things like IMAP transaction logs  
> with other clients (webmail or desktop) to show our efficiency, but  
> I'm wondering if that might be too esoteric for most people - IMAP  
> is an incredibly complex protocol so the benefits may not be  
> immediately or easily recognizable.  But if there is enough  
> interest, I would consider providing these kind of demonstrations.
>
> For those that don't care about any of the above, and want a  
> distilled version, I'll present the three things I am most proud  
> about the Horde_Imap_Client library:
>
> 1. PHP Memory stream support.  Unlike every other PHP library I am  
> aware of, our library does not keep the full data of body parts in  
> memory.  Since attachments can be huge (10-20 MB), this could cause  
> memory issues on the server.  Those running IMP 4 might be aware of  
> this - memory limits for PHP had to be set high, partially because  
> the PHP imap extension commands we used required all data to live in  
> memory.  However, Horde_Imap_Client instead stores body part data in  
> temporary streams.  These streams only store a limited amount of  
> data in memory (2 MB), with the rest being spooled to a temporary  
> file somewhere on your local system.  This results in vastly reduced  
> memory loads when viewing/downloading message body parts.  As an  
> example - I have had my memory limit set to 64 MB for over a year  
> now.  I have not once run out of memory (as a developer, I often  
> play around with large messages just to test for things like these).
>
> 2. CONDSTORE/QRESYNC support.  These are two recent IMAP extensions  
> specifically created to add disconnected clients (like IMP) keep  
> their local caches synced and to speed viewing when reloading a  
> mailbox.  IMP is the *ONLY* open-source webmail client that I am  
> aware of that supports these extensions.  Discussing the exact  
> details is beyond the scope of this message, but absence of  
> CONDSTORE/QRESYNC support means two things:
>   * You can not properly cache mailbox data.  Namely, flags are not  
> guaranteed to be synced unless they are downloaded EVERY time you  
> access a mailbox.  Which is very slow.  So, in other words, all  
> other webmail clients are essentially "broken" - only IMP does  
> caching correctly.
>   * You can not properly keep an AJAX display synchronized.  A  
> well-written AJAX client contains yet another cache of mailbox data  
> - it needs to be synchronized with the PHP server (which in turn  
> needs to be synchronized with the IMAP server.  Confused yet?)   
> Without CONDSTORE/QRESYNC, this can not be done correctly absent the  
> AJAX interface *constantly* reloading data from the server.  But  
> this is just a waste of bandwidth, processing power, and the user's  
> time.  Only IMP does AJAX display correctly because we only download  
> what is needed.
>
> 3. Fast. The PHP imap (c-client) extension is notoriously bad at its  
> IMAP conversations.  It would send duplicate requests, couldn't  
> cache entries, and would request data for messages that you didn't  
> even care about (the infamous lookahead "feature").  Additionally,  
> there were many things that couldn't be done at all - like obtaining  
> namespace information on the server - because the extension did not  
> support it so an entirely separate library needed to be written, and  
> and an entirely separate connection to the IMAP server needed to be  
> made, to fill in the gaps.  Horde_Imap_Client has replaced all this  
> was a single, coherent library that has been relentlessly tuned to  
> ensure that we are doing things the most efficient way possible.
>
> This is probably a good place to end this message.  I try not to be  
> braggy very often about the projects I am involved in, but now that  
> IMP 5 has begun to stabilize I figure the next step is to try to  
> inform people why it should be their choice.

This is a great sum-up and we should indeed be more vocal about the  
areas where Horde is superior. I always mentioned the IMAP rewrite  
during conversations about Horde 4 on LinuxTag, but I'm afraid only  
those people who really suffer(ed) from the other existing IMAP  
solutions for PHP (including Horde 3/IMP 4) can really appreciate the  
work that has gone into this library.
I would love to see this being turned into a full (guest) blog entry.  
My blog is listed on PHP Planet, so this might get a nice spreading in  
the PHP community.

Jan.

-- 
Do you need professional PHP or Horde consulting?
http://horde.org/consulting/



More information about the dev mailing list