Thanks, exactly what I wanted to hear. :-) PS. async_http_get and async_flush was only used as an example, they does not exist.
Den söndagen den 21:e oktober 2012 kl. 19:58:03 UTC+2 skrev Vyacheslav Egorov: > > 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" <[email protected] <javascript:>> 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" <[email protected]> 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 >>>> [email protected] >>>> http://groups.google.com/**group/v8-users<http://groups.google.com/group/v8-users> >>> >>> -- >> v8-users mailing list >> [email protected] <javascript:> >> http://groups.google.com/group/v8-users > > -- v8-users mailing list [email protected] http://groups.google.com/group/v8-users
