Actually, forget that, it doesn't work, it just no longer throws a
javascript error :)

On Jun 11, 12:21 pm, Gordon <[EMAIL PROTECTED]> wrote:
> I tried the following:
>
>         self.handleRange                = function (rule)
>         {
>                 valFields = $(rule.valField);
>                 if (!(minVal = parseInt ($(rule.minField).val (),
> 10))) {minVal =
> 0};
>                 if (!(maxVal = parseInt ($(rule.maxField).val (),
> 10))) {maxVal =
> 0x7FFFFFFF};
>
>                 self.containerItems.each (function ()
>                 {
>                         // This line doesn't work!
>                        thisVal = parseInt (valFields.filter
> (this.id).val (), 10);
>                         if ((thisVal < minVal) || (thisVal > maxVal))
>                         {
>                                 // do stuff
>                         }
>                 });
>         };
>
> This seems to work but is actually slower than the original function,
> according to FireBug
>
> On Jun 11, 11:01 am, Gordon <[EMAIL PROTECTED]> wrote:
>
> > I am currently working through a script that at the moment works just
> > fine but where there are some performance bottlenecks that I am trying
> > to reduce.  It works with acceptible speed when dealing with 40 or so
> > elements but in practice the system could be dealing with hundreds so
> > every ms I can scrape off the execution time will help.
>
> > There are two sections I am focusing on in particular. One is my
> > initialization function, the other is part of a loop which processes
> > elements based on the value of fields contained within.
>
> > The loop has the highest optimization priority so I'll start with
> > that.  Here is my code (with some details missing)
>
> >         self.handleRange                = function (rule)
> >         {
> >                 if (!(minVal = parseInt ($(rule.minField).val (), 10))) 
> > {minVal =
> > 0};
> >                 if (!(maxVal = parseInt ($(rule.maxField).val (), 10))) 
> > {maxVal =
> > 0x7FFFFFFF};
>
> >                 //console.log (self.containerItems.not 
> > ('.fxUnSelected').length);
> >                 self.containerItems.each (function ()
> >                 {
> >                         // This line needs optimizing!
> >                         thisVal = parseInt ($(rule.valField, this).val (), 
> > 10);
> >                         if ((thisVal < minVal) || (thisVal > maxVal))
> >                         {
> >                                 // do stuff
> >                         }
> >                 });
> >         };
>
> > self.containerItems is a jQuery selector I run at initialization so I
> > don't have to keep reselecting all the items I want to work with.
>
> > I wanted to rewrite the function as follows:
>
> >         self.handleRange                = function (rule)
> >         {
> >                 valFields = $(rule.valField);
> >                 if (!(minVal = parseInt ($(rule.minField).val (), 10))) 
> > {minVal =
> > 0};
> >                 if (!(maxVal = parseInt ($(rule.maxField).val (), 10))) 
> > {maxVal =
> > 0x7FFFFFFF};
>
> >                 self.containerItems.each (function ()
> >                 {
> >                         // This line doesn't work!
> >                         thisVal = parseInt (valFields.filter (this).val (), 
> > 10);
> >                         if ((thisVal < minVal) || (thisVal > maxVal))
> >                         {
> >                                 // do stuff
> >                         }
> >                 });
> >         };
>
> > in my experience I have found that filtering out elements I'm not
> > interested in from a selection I have already made is considerably
> > faster than running a new selector to get the elements I want.  My
> > intent here was to grab all the fields which match the selector
> > specified in the rule passed to the function (say, '.priceval' for
> > example) and then in the loop select only the one that was relevent
> > with this.  Unfortunately, this doesn't seem to work.
>
> > If anyone knows what I am doing wrong here I'd appreciate a pointer to
> > get me going in the right direction.
>
> > The other optimization I need is in initialization.  My suspicion here
> > is that copious use of parseInt is slowing this function down
> > significantly.
>
> >         self.computeGridCols    = function ()
> >         // Calculate number of columns needed
> >         {
> >                 return (self.colCount = Math.floor (container.width () /
> > self.itemWidth));
> >         };
> >         self.computeGridRows    = function ()
> >         // Calculate numer of rows needed
> >         {
> >                 return (self.rowCount = Math.floor (container.height () /
> > self.itemHeight));
> >         };
> >         self.initGrid                   = function ()
> >         // Compute a grid layout for movement effects
> >         {
> >                 // Container dimensions
> >                 self.containerWidth             = container.width ();
> >                 self.containerHeight    = container.height ();
> >                 // container padding
> >                 self.containerPadX              = parseInt (container.css 
> > ('padding-left'), 10);
> >                 self.containerPadY              = parseInt (container.css 
> > ('padding-top'), 10);
> >                 // All CSS attributes that affect how much space an item 
> > takes up
> >                 self.itemPadX                   = (
> >                         parseInt (self.containerItems.css 
> > ('border-left-width'), 10)
> >                         + parseInt (self.containerItems.css 
> > ('border-right-width'), 10)
> >                         + parseInt (self.containerItems.css 
> > ('margin-left'), 10)
> >                         + parseInt (self.containerItems.css 
> > ('margin-right'), 10)
> >                         + parseInt (self.containerItems.css 
> > ('padding-left'), 10)
> >                         + parseInt (self.containerItems.css 
> > ('padding-right'), 10)
> >                 );
> >                 self.itemPadY                   = (
> >                         parseInt (self.containerItems.css 
> > ('border-top-width'), 10)
> >                         + parseInt (self.containerItems.css 
> > ('border-bottom-width'), 10)
> >                         + parseInt (self.containerItems.css ('margin-top'), 
> > 10)
> >                         + parseInt (self.containerItems.css 
> > ('margin-bottom'), 10)
> >                         + parseInt (self.containerItems.css 
> > ('padding-top'), 10)
> >                         + parseInt (self.containerItems.css 
> > ('padding-bottom'), 10)
> >                 );
> >                 // Item dimensions
> >                 self.itemStartWidth             = self.itemWidth        = 
> > self.containerItems.width ()
> > + self.itemPadX;
> >                 self.itemStartHeight    = self.itemHeight       = 
> > self.containerItems.height
> > () + self.itemPadY;
> >                 // Column and row counts
> >                 self.colStartCount              = self.computeGridCols ();
> >                 self.rowStartCount              = self.computeGridRows ();
> >         };
>
> > ParseInt seems to be the only reliable way of grabbign the CSS values
> > I need, and as the designer hasn't finialized the page layout yet and
> > might do any thing with the margin, border and padding values they all
> > have to be checked individually.  If anyone knows of improvements I
> > can make here I'd appreciate the feedback.

Reply via email to