If there's a need to selectively show particular elements out of a
large number, something to try while experimenting with performance
improvements is to construct a CSS block dynamically and then update
it. You'd put together the CSS as a stream of "#randomDiv0021 {
display: block; }" CSS statements, and then just jam the whole thing
into a <style> block (which you can access by "id" attribute.  I know
that you have to update style blocks with a particular function in IE
(Firefox lets you use "innerHTML" pretty much anywhere, but IE will
throw an "unknown error" exception); it may be "innerText" or
"cssText" or something like that. Perhaps jQuery deals with that for
us.

Building and updating a CSS block en masse may or may not be faster
than explicit calls to show() and hide(). If you do build a CSS block,
make sure you do it by constructing an array of strings and then
joinging it together rather than repeatedly appending to a single
accumulating string.


On Sun, Sep 27, 2009 at 1:56 PM, Michael Geary <m...@mg.to> wrote:
>> You would expect the "waitingdiv" to appear instantaneously
>> because the bottleneck is in show()ing all 3000 divs. But for
>> some reason it takes a really long time for it to show up.
>> And then it's gone in a flash and all 3000 divs appear.
>
> That's because the browser doesn't refresh the page while JavaScript code is
> running. It waits until all your code finishes running and then refreshes
> with all the changes you've made.
>
> If you want to see partial results, use setTimeout() to delay part of your
> code:
>
> doOneThing();
> setTimeout( function() {
>     doAnotherThing();
> }, 1 );
>
> Now you will see the results of doOneThing() immediately, before
> doAnotherThing() is called.
>
> Mike M's tip sounds good for hiding and showing all your divs, but I think
> that leaves the problem of hiding and showing a subset of them according to
> your filter. I don't have any ideas for you on that, though - I'd have to
> see a test page to get a better idea of what it's doing.
>
> -Mike
>
> On Sat, Sep 26, 2009 at 10:25 PM, Sid <nikhil...@gmail.com> wrote:
>>
>> I have a page with about 3000 (expected to grow to around 5000)
>> floating divs. It's a list of entities.
>>
>> The page also has filters to allow the user to narrow down (no one
>> wants to see 3000 items, of course).
>>
>> When all filters are removed, I want to show all 3000 divs. After
>> every 2 of these divs, I also need to insert an additional div to
>> "clear" the float. The problem is that $("div.mydivclass").show(); is
>> taking a really long time. Any performance tips?
>>
>> The other interesting thing that's happening is this:
>> $("body").append(waitingdiv);//Positioned in the center of the screen
>> with a wait gif and "Please wait" message
>> if(appliedfilters.length==0) //No filters. Show all divs
>>    $("div.mydivclass").show();
>> else {
>>  .. show only divs that meet filter criteria..
>> }
>> insertClearingDivs();//Insert a div to clear the float after every 2
>> visible divs
>> $("div#waitingdiv).remove();
>>
>> You would expect the "waitingdiv" to appear instantaneously because
>> the bottleneck is in show()ing all 3000 divs. But for some reason it
>> takes a really long time for it to show up. And then it's gone in a
>> flash and all 3000 divs appear. Incidentally, this also happens when
>> the first filter is applied. In that case, the filter usually narrows
>> down 3000 items to about 100.
>
>



-- 
Turtle, turtle, on the ground,
Pink and shiny, turn around.

Reply via email to