Well if you create a single global function you will at least save memory
and allocation time (as function literal creates a new function  every time
it is executed).

Additionally if you always pass empty function to async_http_get then its
better to create a single function to help inlining as explained in my
previous mail.

Anyway all this matters only on a very hot path.

Vyacheslav Egorov
On Oct 21, 2012 7:10 PM, "idleman" <evoo...@gmail.com> wrote:

> 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> 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
>>> http://groups.google.com/**group/v8-users<http://groups.google.com/group/v8-users>
>>
>>  --
> v8-users mailing list
> v8-users@googlegroups.com
> 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