On May 20, 2:48 pm, Andrea Giammarchi <[email protected]>
wrote:
> OK, in this case I am sorry and forget my previous comment, I will
> eventaully talk about this with Caja people.


Hi Andrea, I have only now noticed your question at
http://webreflection.blogspot.com/2009/05/google-caja-whats-wrong-with-this.html
Thanks for posting my reply on your blog.

For anyone here curious about the matter, see my reply on the blog
page of Andrea's.



> On Wed, May 20, 2009 at 10:45 PM, John Resig <[email protected]> wrote:
> > Actually, if I remember correctly, new is explicitly required in order to
> > have jQuery work with Caja (you can't do just String() or Number() or
> > Object() or Function() you must include 'new' in front of all of them). We
> > had to change some other methods to match this, previously.
>
> > --John
>
> > On Wed, May 20, 2009 at 5:38 PM, Andrea Giammarchi <
> > [email protected]> wrote:
>
> >> 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 <[email protected]> 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 <[email protected]> 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 <
> >>>> [email protected]> 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 <[email protected]> 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 <
>
> >>>>> > [email protected]> 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 <
> >>>>> > > [email protected]> 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" <[email protected]> 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:* [email protected] [mailto:
> >>>>> [email protected]]
> >>>>> > >> *On Behalf Of *John Resig
> >>>>> > >> *Sent:* Tuesday, May 19, 2009 4:20 PM
> >>>>> > >> *To:* [email protected]
> >>>>> > >> *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 [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/jquery-dev?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to