Dear list,
I am trying to give a small company access to their contact database via webinterface. Long story short, 'carddavmate' was the only webclient I could convince to even show the addressbook (even though its not parsing the 'n' attribute correctly, apparently because of too many trailing ';'-characters in the field). But here's the problem: its a tiny server and a rather large addressbook (~4000 contacts, 7,5MB XML data) and it takes a long time to initially load the resource - once processed it works fine. To load it in the first place I had to increase 'max_execution_time' in php.ini for DAViCal and 'timeOut' in carddavmate (both latest versions). But even then its fetching the complete addressbook which takes a long time and then jquery is parsing it, which takes another 30 seconds or so and meanwhile renders the complete browser useless (most of the time it apparently spends in the 'insertContact' function (can't reproduce this now but earlier I got 'vcardUnescapeValue' as the most time consuming function which makes more sense and seems to be the more accurate result)). Every other client I tried just timed out.
The server has a 1,2GHz Dual Core ARM processor and 2GB of RAM. It takes approximately 40s to prepare the data - during this period the 'apache -k start' process that serves the REPORT request consumes one core's complete CPU on the server (no visible load from PostgreSQL..?) - then another 10s to send it and then another 30s for parsing it in the browser (see http://gorilla-computing.de/misc/carddavmate.png for a graphical impression). Is that to be expected? Its not that much data after all (even though its compressed and encrypted and these aren't literally strengths of the ARM). Or must it be, somehow, corrupted data that makes the queries / the parsing take so long? Its a rather ugly outlook import and a lot of invalid stuff has accumulated in several fields (especially the note field is a constant nightmare).
On the client side: could it be the unnecessary semicolons and the note fields that keep 'vcardUnescapeValue' so terribly busy? And if yes, is there an easy way of changing all contacts directly via psql? Or maybe first: are there any drawbacks in modifying faulty fields directly in the database?
And finally, I know caldavzap supports "interval synchronization" for querying only the relevant time frame of information from the server and indeed calendar sync works fine even though the calendar database is even bigger. Is there anything like that for carddav queries? Like, only import the first hundred contacts and when the user scrolls down or searches a contact parse the next fifty and so on?
Thanks a lot and sorry for the essay!
Best, Paul