Thanks for your observation! On my machine I get the following results:

Fast:103
Slow:1511
Fast:934
Slow:1519
Fast:933
etc.

So far I can see two performance differences with your example: Slow is
always slower than Fast, subsequent executions of Fast are slower than the
first execution. Here is an attempt to explain why at a high level:

1. Property access with a symbol string literal ("test101") are faster than
using a generic key expression. ("test" + "101" is not treated as a symbol
currently). Since each property access is optimized for the type of receiver
and key seen, it is not a good idea to mix different types of keys at the
same access site.

2. The store object[y] = "someValue" adds a property to object on the first
execution. This triggers a so-called map transition internally in V8. As a
general rule, it is not a good idea to have a store that may add a property
inside a loop.

With the following modifications below to your example I get consistently
fast performance for the Fast case:

Fast:89
Slow:1471
Fast:74
Slow:1439
Fast:74
Slow:1437


> #####################################
>
> function loop2(y) {
>        var len = 1000*1000*10;
>        var object = {};
>        var start = Date.now();
>       * object[y] = "someValue";*
>        while (len--) {
>                object[y] = "someValue";
>        }
>        return Date.now()-start;
> };

function loop(y) {
>        var len = 1000*1000*10;
>        var object = {};
>        var start = Date.now();
>        while (len--) {
>                object[y] = "someValue";
>        }
>        return Date.now()-start;
> };

var x = "test101"; // this is fast
> var y = "test" + "101"; // this is slower ???
>
> var tries = 10;
> while (tries--) {
>        console.log("Fast:" + loop2(x));
>        console.log("Slow:" + loop(y));
> }
>

Hope this helps.

--Florian


>
> ####################################
>
> regards, Peter
>
> --
> v8-users mailing list
> [email protected]
> http://groups.google.com/group/v8-users
>

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

Reply via email to