Hi all,
while working on a project, I have a following situation. There is a page
that has about 1000 images on it. Divs which hold images have few classes
that I use as filter for showing/hiding only images that belong to specific
category.
Following piece of code does the actual show/hide job (by specified
criteria):
function show_elems(filt)
{
var all = $('.game-list .games > ul > li').hide();
if (filt['soft'] != '') all = all.filter('.'+filt['soft']);
if (filt['cat'] != '') all = all.filter('.'+filt['cat']);
all.show();
}
All this lengthy introduction is because of the fact that this code (and
whole page) works very well (almost to say perfectly) in all but
webkit-based browsers (namely, safari and chrome). After some lengthy
discussions on webkit irc support channel, discovering a bug in webkit, etc,
one of developers found a way to optimize .hide() method so that it doesn't
trigger that specific bug. After I made proposed change in jquery.js, the
problem has disappeared, while functionality was preserved.
*Comment #4 From Mark Rowe (bdash) <[email protected]> 2009-01-31 03:54 PDT*
I suspect that a trivial change to jQuery could be made to avoid tickling this
performance cliff. If the "hide" method were changed to use two separate loops
it would avoid modifying the style info between each query of the "display"
property and would therefore avoid the need to re-layout so many times.
Something like the following:
hide: function(speed,callback){
if ( speed ) {
return this.animate( genFx("hide", 3), speed, callback);
} else {
for ( var i = 0, l = this.length; i < l; i++ ){
var old = jQuery.data(this[i], "olddisplay");
if ( !old && old !== "none" )
jQuery.data(this[i], "olddisplay",
jQuery.css(this[i], "display"));
}
for ( var i = 0, l = this.length; i < l; i++ )
this[i].style.display = "none";
}
},
This is not to say that jQuery is to blame; quite opposite: they are
glad that it helped the bug to uncover itself; this is at the same
time both performance optimization and a workaround for problem that's
going to be fixed sometime soon.
Regards,
Boris
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"jQuery Development" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/jquery-dev?hl=en
-~----------~----~----~----~------~----~------~--~---