Andreas Junghans schrieb:
> Am 02.08.2006 um 07:14 schrieb Sebastian Werner:
>
>>>> Ah. Cool. Thank you for the information. But this doesn't explain
>>>> why
>>>> for some stuff arrays are faster. If arrays really are built up with
>>>> hash maps why are they faster for common array actions like loops?
>>> Because you can use simple counter loops ("for (i=0;i<x;i++)") to
>>> enumerate the keys (instead of "for (x in y)"). I think when you
>>> iterate over an array with for/in, you get the same performance as
>>> with any other object. I can't say whether there are some more
>>> internal optimizations for arrays, but at least semantically they
>>> behave like ordinary hash maps (with the exception of having an
>>> automatically updated "length" property whenever numeric keys are
>>> used).
>> But nobody really knows it, or is this explained in any reference.
>
> It's explained in the ECMAScript spec: http://www.ecma-
> international.org/publications/files/ECMA-ST/Ecma-262.pdf (section
> 15.4, page 88). This section states that an array simply uses special
> treatment for certain property names (namely numeric ones in a
> certain range), but otherwise it's just an ordinary property
> container like any other JavaScript object.
>
>> Generally they could have a comparable API with completely different
>> implementations.
>
> From reading the spec, I don't think this is true.
But we don't know. The SPEC IMHO only defines the API, not the internals.
>
>> Mhh, I don't see why a counter should be faster than enumerate over
>> the
>> keys. I there a reason to think it must be slower?
>
> Of course. I think it's fairly obvious that iterating over a
> collection and reading the values out of it is slower than simply
> adding to a variable.
>
> Just for kicks, I performed a short test, and for/in was 7-8 times
> slower than the counter loop:
>
> var keyCacheLength = keyCache.length;
> for (var i = 0; i < 2000; ++i) {
> for (var j = 0; j < keyCacheLength; ++j) {
> key = keyCache[j];
> }
> }
>
> vs.
>
> var keyCacheLength = keyCache.length;
> for (var i = 0; i < 2000; ++i) {
> for (j in keyCache) {
> key = keyCache[j];
> }
> }
>
> (The keyCache array has about 200 entries.)
7-8 times? Would you share you test file? I don't know that's that
dramatic. Puuh.
Sebastian
>
> Regards,
>
> Andreas
>
>
> -------------------------------------------------------------------------
> Take Surveys. Earn Cash. Influence the Future of IT
> Join SourceForge.net's Techsay panel and you'll get the chance to share your
> opinions on IT & business topics through brief surveys -- and earn cash
> http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
> _______________________________________________
> qooxdoo-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/qooxdoo-devel
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys -- and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
qooxdoo-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/qooxdoo-devel