I hadn't considered the ramifications of a "miss" on a sparse array,
and since (in my test case) only 18% of the string being traversed was
white space, then there were a lot of "misses".

Thanks for the great response - it helped a lot.

Chad

On Jul 8, 1:57 am, "Lasse R.H. Nielsen" <[email protected]> wrote:
> I am guessing[1] it's just a matter of being very fast at calling functions
> vs. needing to do extra work for missing elements in the array.
>
> I'm assuming your array is sparse (only have elements at the positions that
> are actually whitespace).
> That means that for all non-whitespace char-codes, you first fail to find
> the property in the whitespace array, and then you traverse the prototype
> chain and fail to find it in Array.prototype and Object.prototype as well.
> It's also likely that the sparse array is implemented using a hash-map,
> meaning that it has to do even more computation before it can fail to find
> the value.
>
> The function call, on the other hand, always call the same function, so the
> Inline Cache will speed up the actual call a lot.
>
> There is a prevalent superstition that function calls have to be slow.
> That's just not true. Compared to many other things a JavaScript engine has
> to do, function calls can be pretty quick.
>
> /Lasse
> [1] from the code shown, it's impossible to be certain what bottlenecks are
> most significant.On Wed, Jul 7, 2010 at 15:01, Chad <[email protected]> 
> wrote:
> > Sorry - should have specified the version that yielded these numbers
> > is: Chrome (Mac) v 5.0.375.99.
>
> > On Jul 7, 7:54 am, Chad <[email protected]> wrote:
> > > I was surprised to find that a function call returning a boolean from
> > > a simple test was much (3x!) faster than an associative array
> > > lookup... I was wondering if someone could explain to me how that
> > > could be the case. Is v8 inlining the function somehow, or is the
> > > overhead of a function call extremely low?
>
> > > Note 1: I'm not complaining, I'm just curious as to how things were
> > > working under the covers.
> > > Note 2: The opposite is true for Firefox, which is 2x slower using the
> > > function call than the associative array... so an optimization for one
> > > would result in a performance regression for another... :(
>
> > > Example:
>
> > > ------
> > > isWhitespace:function(charCode) {
> > >   return charCode == this.spaceCharCode || charCode ==
> > > this.tabCharCode || ... etc ...;
>
> > > },
>
> > > for (var i = 0; i < aString.length; i++) {
> > >   var isWs = this.isWhitespace(aString.charCodeAt(i));}
>
> > > ------
>
> > > Is 3x faster than:
>
> > > ------
> > > whitespace: Associative array mapping whitespace char codes to true,
>
> > > for (var i = 0; i < aString.length; i++) {
> > >   var isWs = this.whitespace[aString.charCodeAt(i)];}
>
> > > ------
>
> > > Thanks in advance, Chad
>
> > --
> > v8-users mailing list
> > [email protected]
> >http://groups.google.com/group/v8-users
>
> > --
> > Lasse R.H. Nielsen /  <http://groups.google.com/group/v8-users>
> > [email protected]
> > 'Faith without judgement merely degrades the spirit divine'

-- 
v8-users mailing list
[email protected]
http://groups.google.com/group/v8-users

Reply via email to