[dev] [commits] Horde branch newprefsui updated. 28ee4e1e04b5f112d4a308cda5c42053d61e412c
Chuck Hagenbuch
chuck at horde.org
Thu Apr 15 14:19:03 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>:
>>>
>>>> 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.
>
> Even then, we are are rarely storing huge serialized hashes in the
> prefs. Did you profile if this has any measurable influence on an
> avarage page load?
>
>> 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.
>
> Right, this shouldn't keep us from using json. If we serialize
> anything but hashes/stdClasses or arrays, that should be fixed
> anyway. The inconsistency argument still holds though. I don't think
> it's a good idea to have 2 or 3 different serialization methods in
> the prefs. If the json serialization has a worthwhile performance
> improvement in a real-life situation, we might consider switching to
> json altogether.
I do like JSON vs. tab/newline strings, and for people not comfortable
with json, I think that's where we should get a UI on top of this
(like config files).
So I'm fine with switching everything over.
-chuck
More information about the dev
mailing list