John, perfect except the new.
The Function itself returns an anonymous function. new in front of a
function like this:

var o = new function(){
    return function(){};
};

simply means that o will bhe the function and new will be ignored (if a
function return an instance of something, it does not matter if you use new
before or not)

Accordingly, new Function is a common mistake, unless somebody demonstrates
that it makes logically or practically sense :-)

quick patch, remove new, just Function(whatever)();


On Wed, May 20, 2009 at 10:29 PM, John Resig <jere...@gmail.com> wrote:

> Ticket filed:
> http://dev.jquery.com/ticket/4680
>
> Fix landed:
> http://dev.jquery.com/changeset/6361
>
> --John
>
>
> On Wed, May 20, 2009 at 10:24 AM, John Resig <jere...@gmail.com> wrote:
>
>> Ok, it all sounds in order to me - someone want to file a ticket?
>> http://dev.jquery.com/newticket
>>
>> --John
>>
>>
>>
>> On Wed, May 20, 2009 at 10:04 AM, mike.helgeson 
>> <mike.helge...@gmail.com>wrote:
>>
>>>
>>> The YUI compressor does not seem complain about using the Function
>>> technique.
>>>
>>> (function(){
>>>
>>> function evaluate( data ){
>>>        return Function("return "+( data ) )();
>>>        };
>>>
>>> })();
>>>
>>> becomes...
>>>
>>> (function(){function A(B){return Function("return "+(B))()}})();
>>>
>>>
>>> On May 20, 9:06 am, John Resig <jere...@gmail.com> wrote:
>>> > Has anyone been able to figure out if YUIMin still behaves as you would
>>> > expect it to?
>>> >
>>> > --John
>>> >
>>> > On Wed, May 20, 2009 at 6:48 AM, Andrea Giammarchi <
>>> >
>>> > andrea.giammar...@gmail.com> wrote:
>>> > > Ok, the reason eval is so slow is because of FireBug, it costed 17
>>> seconds
>>> > > with FireBug enabled while FireBug seems to do not affect Function
>>> execution
>>> > > (which makes Function against better than eval).
>>> >
>>> > > In any case, Function is faster or exactly fast as eval is, even in
>>> > > Internet Explorer, at least in my tests.
>>> >
>>> > > this is a truly simple readapted test case:
>>> >
>>> > > <!DOCTYPE html>
>>> > > <script type="text/javascript">
>>> > > portable = (function(msg, i, interval){
>>> > >     function timeout(){
>>> > >         alert(msg.join("\n"));
>>> > >         msg = [];
>>> > >         i = 0;
>>> > >     };
>>> > >     return {
>>> > >         log:function(test){
>>> > >             msg[i++] = test;
>>> > >             clearTimeout(interval);
>>> > >             interval = setTimeout(timeout, 100);
>>> > >         }
>>> > >     }
>>> > > })([], 0, 0);
>>> > > var count = 10000, o = null, i = 0, jsonString =
>>> > >
>>> '{"value":{"items":[{"x":1,"y":2,"z":3},{"x":1,"y":2,"z":3},{"x":1,"y":2,"z":3},{"x":1,"y":2,"z":3},{"x":1,"y":2,"z":3}]},"error":null}';
>>> > > var beginTime = new Date();
>>> > > for ( i = 0; i < count; i++ )
>>> > >     o = eval( "(" + jsonString + ")" );
>>> > > portable.log( "eval:" + ( new Date() - beginTime ) );
>>> > > var beginTime = new Date();
>>> > > for ( i = 0; i < count; i++ )
>>> > >     o = new Function( "return " + jsonString )();
>>> > > portable.log( "new Function:" + ( new Date() - beginTime ) );
>>> > > var beginTime = new Date();
>>> > > for ( i = 0; i < count; i++ )
>>> > >     o = Function( "return " + jsonString )();
>>> > > portable.log( "Function:" + ( new Date() - beginTime ) );
>>> > > var beginTime = new Date();
>>> > > var callback = Function( "return " + jsonString );
>>> > > for ( i = 0; i < count; i++ )
>>> > >     o = callback();
>>> > > portable.log( "precompiled Function:" + ( new Date() - beginTime ) );
>>> > > if(this.JSON){
>>> > >     var beginTime = new Date();
>>> > >     for ( i = 0; i < count; i++ )
>>> > >         o = JSON.parse(jsonString);
>>> > >     portable.log( "native:" + ( new Date() - beginTime ) );
>>> > > };
>>> > > </script>
>>> >
>>> > > Let me know what you think.
>>> >
>>> > > Regards
>>> >
>>> > > On Wed, May 20, 2009 at 7:43 AM, Andrea Giammarchi <
>>> > > andrea.giammar...@gmail.com> wrote:
>>> >
>>> > >> As I said, Function does not do scope resolution except the global
>>> one so
>>> > >> in my opinion should be always preferred for JSON evaluations.
>>> Firefox does
>>> > >> not care about implicit returned value plus brackets plus scope, it
>>> simply
>>> > >> create the anonimous function doing a syntax check and returns
>>> errors only
>>> > >> at call time so if there are no errors the precompiled funcion will
>>> be like
>>> > >> a manual one, time for parsing syntax is then one against every eval
>>> call.
>>> > >> To be fair, that bench make sense declaring the function once and
>>> simply
>>> > >> calling it inside the for to always return the same object.
>>> Unfortunately
>>> > >> this is not a real world case.
>>> >
>>> > >> On May 20, 2009 7:33 AM, "Michael Geary" <m...@mg.to> wrote:
>>> >
>>> > >>  Function( 'return ' + data )() is also MUCH faster in Firefox than
>>> eval.
>>> >
>>> > >> In a test case of JSON data containing 1000 names and addresses
>>> (about
>>> > >> 112KB), eval() takes a full second to execute on my machine in
>>> Firefox 3. On
>>> > >> all other browsers (including IE!) it takes hardly any time at all.
>>> >
>>> > >> The Function version takes essentially no time in Firefox. (Didn't
>>> test it
>>> > >> in other browsers.)
>>> >
>>> > >> -Mike
>>> >
>>> > >>  ------------------------------
>>> > >> *From:* jquery-dev@googlegroups.com [mailto:
>>> jquery-...@googlegroups.com]
>>> > >> *On Behalf Of *John Resig
>>> > >> *Sent:* Tuesday, May 19, 2009 4:20 PM
>>> > >> *To:* jquery-dev@googlegroups.com
>>> > >> *Subject:* [jquery-dev] Re: window['eval']() in rhino
>>> >
>>> > >> > I don't remember the original discussion/change, off-hand. If
>>> YUIMin is
>>> > >> still able to generate an ...
>>>
>>>
>>
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"jQuery Development" group.
To post to this group, send email to jquery-dev@googlegroups.com
To unsubscribe from this group, send email to 
jquery-dev+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/jquery-dev?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to