[dev] [commits] Horde branch newprefsui updated. 28ee4e1e04b5f112d4a308cda5c42053d61e412c
Michael M Slusarz
slusarz at horde.org
Mon Apr 12 19:28:15 UTC 2010
Quoting Jan Schneider <jan at horde.org>:
> Zitat von Michael M Slusarz <slusarz at horde.org>:
>
>> Quoting Jan Schneider <jan at horde.org>:
>>
>>> Zitat von Michael M Slusarz <slusarz at horde.org>:
>>>
>>>> commit 2b3abe74f295dcedc13498a2c86131c493977d4b
>>>> Author: Michael M Slusarz <slusarz at curecanti.org>
>>>> Date: Wed Apr 7 09:17:03 2010 -0600
>>>>
>>>> Convert turba addressbooks pref to json format
>>>
>>> Why, what's wrong with the current format, that doesn't require an
>>> upgrade step?
>>
>> It was a PITA to convert to/from the old serialized format, and
>> then convert this intermediate object to the javascript format.
>> The code completely failed my general test: I couldn't reliably
>> figure out what the chunk of code was doing even after staring at
>> it for a few minutes.
>>
>> Just as important, it is *much* easier for an admin to set a
>> default value, rather than using tabs and newlines.
>> Providing an example that looks like this:
>>
>> json_encode(array(
>> 'foo1' => array(
>> 'bar1',
>> 'bar2'
>> ),
>> 'foo2' => array(
>> 'bar3'
>> )
>> ))
>>
>> is much easier to visually parse than this (especially since all
>> the rest of our configuration files are array/hash based, so an
>> admin necessarily is familiar with the PHP array data structure):
>>
>> "foo1\tbar1\tbar2\nfoo2\tbar3"
>
> I'm not sure, especially since the current format is easy to
> understand even for not-php-capable admins.
> What I find more irritating though is, that you added yet another
> serialization format to the prefs. I see how it's easier for the
> implementation to use a native serialization format, but then we
> should stick to PHP's serialization like we do anywhere else in the
> prefs, instead of introducing JSON serialization.
> Alternatively we might consider switching to JSON altogether because
> that's easier to write and understand than PHP's machine-readable
> serialization. But I'm not sure if I really want to open this can of
> worms.
Can of worms is already open. I have already used json_encode for IMP
flags. The advantage is that json encoding is *much* more efficient.
We are not talking slightly more efficient, we are talking about more
efficient by ~250%.
Quick example. This script:
<?php
$a = array();
for ($i = 0; $i <= 1000; ++$i) {
$a[strval($i)] = array(
'a' => 1,
'b' => 'foo',
'c' => array(1, 2)
);
}
print 'Serialize size: ' . strlen(serialize($a)) .
"\n".
'json_encode size: ' . strlen(json_encode($a));
?>
Serialize size: 71972
json_encode size: 28029
For something like IMP's flag array, if you have tens of thousands of
users potentially using a non-default value, the serialization savings
adds up.
Obviously, you can't use json_encode() if we are serializing something
other than a string, number, array, or stdClass object. But in the
prefs file, I doubt we are serializing something besides those items.
michael
--
___________________________________
Michael Slusarz [slusarz at horde.org]
More information about the dev
mailing list