Thanks for your answer!

To make the question some more clear, I invoke huge number of asynchronous 
functions, but sometimes I just don´t care about the result, but the 
function itself require a callback to pass the result of the operation to. 
Would it in those cases be smarter to create a global do_nothing() function 
and pass it into all the asynchronous functions where I don´t care about 
the result, than on invocation just create a new empty function:

//new empty functions each time
async_http_get("http://statics.com?webpage=abc";, function() { });
async_flush(function() { });

//or using a global do_nothing function
function do_nothing() { }

async_http_get("http://statics.com?webpage=abc";, do_nothing);
async_flush(do_nothing);

My question regards if V8 would easier optimize away the "callback" call 
when using anonymous empty functions or not, because if it does, it would 
be worthless to create a global do_nothing on the first place.

But what I understood, V8 does no such optimizations? What would be better 
in that case, using a global do_nothing() or not?

Thanks in advance!


Den söndagen den 21:e oktober 2012 kl. 16:15:19 UTC+2 skrev Vyacheslav 
Egorov:
>
> V8 does inline functions at call sites where target is observed to be 
> always the same. Inclined body is guarded by an identity check against 
> identity of the call target. If guard fails code is deoptimized.
>
> Thus what matters is whether each call site is monomorphic ( sees the same 
> function all the time) or megamorphic (sees different functions).
>
> Without seeing complete code it is hard to say whether you will help 
> inlining by creating a single empty function (inlining definitely will not 
> happen if you create new functions and send them to a single call site 
> again and again). But you will definitely save space.
>
> --
> Vyacheslav Egorov
>  On Oct 20, 2012 10:05 PM, "idleman" <evo...@gmail.com <javascript:>> 
> wrote:
>
>> Hi,
>>
>> Is empty functions in lined whenever the function is know? Example:
>>
>> function do_nothing() { }
>>
>> //somewhere later in the code:
>> var cb = do_nothing;
>> cb(null, "Will this call be inlined/optimized away?");
>>
>> Will V8 actually call the function, even if it does nothing? I wonder 
>> because I want to know if it is smarter to create a do_nothing() function 
>> which will be reused over and over again (but not as obvious) or each time 
>> create an empty function { } directly in place and let the V8 more easily 
>> optimize away the call.
>>
>> Thanks in advance!
>>
>>
>>
>>  -- 
>> v8-users mailing list
>> v8-u...@googlegroups.com <javascript:>
>> http://groups.google.com/group/v8-users
>
>

-- 
v8-users mailing list
v8-users@googlegroups.com
http://groups.google.com/group/v8-users

Reply via email to