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