mirror of
https://github.com/EGroupware/egroupware.git
synced 2024-11-22 16:03:47 +01:00
Performance improvement:
JSON stringify/parsing deep object copy is quite faster than jQuery.extend deep copy, especially in IE
This commit is contained in:
parent
aba5cf102f
commit
092cbb5059
@ -780,7 +780,7 @@ jQuery.extend(et2_selectbox,
|
|||||||
{
|
{
|
||||||
var name_parts = widget.id.replace(/[/g,'[').replace(/]|]/g,'').split('[');
|
var name_parts = widget.id.replace(/[/g,'[').replace(/]|]/g,'').split('[');
|
||||||
|
|
||||||
var type_options = [];
|
var type_options = {};
|
||||||
var content_options = {};
|
var content_options = {};
|
||||||
|
|
||||||
// First check type, there may be static options. There's some special handling
|
// First check type, there may be static options. There's some special handling
|
||||||
@ -796,7 +796,18 @@ jQuery.extend(et2_selectbox,
|
|||||||
attrs.other = attrs.other.split(',');
|
attrs.other = attrs.other.split(',');
|
||||||
}
|
}
|
||||||
// Copy, to avoid accidental modification
|
// Copy, to avoid accidental modification
|
||||||
jQuery.extend(true, type_options, this[type_function].call(this, widget, attrs));
|
//
|
||||||
|
// type options used to use jQuery.extend deep copy to get a clone object of options
|
||||||
|
// but as jQuery.extend deep copy is very expensive operation in MSIE (in this case almost 400ms)
|
||||||
|
// we use JSON parsing instead to copy the options object
|
||||||
|
type_options = this[type_function].call(this, widget, attrs);
|
||||||
|
try{
|
||||||
|
type_options = JSON.parse(JSON.stringify(type_options));
|
||||||
|
}catch(e)
|
||||||
|
{
|
||||||
|
egw.debug(e);
|
||||||
|
}
|
||||||
|
|
||||||
widget._type = old_type;
|
widget._type = old_type;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -891,7 +902,7 @@ jQuery.extend(et2_selectbox,
|
|||||||
{
|
{
|
||||||
content_options = {};
|
content_options = {};
|
||||||
}
|
}
|
||||||
|
|
||||||
// Include type options, preferring any content options
|
// Include type options, preferring any content options
|
||||||
if(type_options.length || !jQuery.isEmptyObject(type_options))
|
if(type_options.length || !jQuery.isEmptyObject(type_options))
|
||||||
{
|
{
|
||||||
@ -1081,7 +1092,7 @@ jQuery.extend(et2_selectbox,
|
|||||||
{
|
{
|
||||||
// normalize options by removing trailing commas
|
// normalize options by removing trailing commas
|
||||||
options_string = options_string.replace(/,+$/, '');
|
options_string = options_string.replace(/,+$/, '');
|
||||||
|
|
||||||
var cache_id = widget._type+'_'+options_string;
|
var cache_id = widget._type+'_'+options_string;
|
||||||
var cache = egw.window.et2_selectbox.type_cache[cache_id];
|
var cache = egw.window.et2_selectbox.type_cache[cache_id];
|
||||||
if (typeof cache == 'undefined')
|
if (typeof cache == 'undefined')
|
||||||
|
Loading…
Reference in New Issue
Block a user