[jQuery] Re: JSLitmus invaluable tool
Michael, I thought I had thanked you for your post yesterday but don't see that here today. Maybe I did a 'reply to author'? In any event, thanks again. I implemented your code and see where I went wrong. Also thanks for a good demonstration of how to use the call ( ) function -- very nice. I've always found the online descriptions of call( ) rather confusing; yours is a nice clear demonstration of its usefulness. You are correct that my 'this' turned out to be the window object. Bad! Howard On Nov 11, 10:23 am, Michael Geary [EMAIL PROTECTED] wrote: JSLitmus isn't testing what it appears to be testing. In the 'use instance var' case, take a look at what this is inside the test function. I'll bet it's the window object. That is the reason it's so much slower in Firefox. I didn't try it in IE, but the difference is probably even more dramatic there. It's not surprising that there is little difference in Chrome, with its completely different architecture. If 'this' a native JavaScript object, it's still slower to reference this.foo than it would be to reference foo, but not by such a great difference. Compare with this test that provides known values of this: var total = 100; function Test() {} Test.prototype.one = function() { var t1 = +new Date; var n = total; var x = 0; while( n-- ) x++; var t2 = +new Date; console.log( ( t2 - t1 ) / 1000 );}; Test.prototype.two = function() { var t1 = +new Date; var n = total; this.x = 0; while( n-- ) this.x++; var t2 = +new Date; console.log( ( t2 - t1 ) / 1000 ); }; test = new Test; test.one(); test.two(); test.one.call(window); test.two.call(window); In an example run, that logged these values to the Firebug console: 0.051 - test.one() 0.199 - test.two() 0.052 - test.one.call(window) 2.408 - test.two.call(window) As you can see, test.two() is several times slower than test.one() when it's called as a method of the test object, but dramatically slower when it's called as a method of the window object. -Mike From: howardk I've been experimenting with several different coding styles for plug- ins. Lately I've been curious about the difference in performance between using local variables vs. instance variables for storing state. JSLitmus, while not itself jQuery-based, has just given me the answers I've been looking for. I found them a bit surprising: http://www.fatdog.com/litmus_tests/InstanceVsLocalTest.html (Apologies for the color scheme! :-) Howard
[jQuery] Re: JSLitmus invaluable tool
JSLitmus isn't testing what it appears to be testing. In the 'use instance var' case, take a look at what this is inside the test function. I'll bet it's the window object. That is the reason it's so much slower in Firefox. I didn't try it in IE, but the difference is probably even more dramatic there. It's not surprising that there is little difference in Chrome, with its completely different architecture. If 'this' a native JavaScript object, it's still slower to reference this.foo than it would be to reference foo, but not by such a great difference. Compare with this test that provides known values of this: var total = 100; function Test() {} Test.prototype.one = function() { var t1 = +new Date; var n = total; var x = 0; while( n-- ) x++; var t2 = +new Date; console.log( ( t2 - t1 ) / 1000 ); }; Test.prototype.two = function() { var t1 = +new Date; var n = total; this.x = 0; while( n-- ) this.x++; var t2 = +new Date; console.log( ( t2 - t1 ) / 1000 ); }; test = new Test; test.one(); test.two(); test.one.call(window); test.two.call(window); In an example run, that logged these values to the Firebug console: 0.051 - test.one() 0.199 - test.two() 0.052 - test.one.call(window) 2.408 - test.two.call(window) As you can see, test.two() is several times slower than test.one() when it's called as a method of the test object, but dramatically slower when it's called as a method of the window object. -Mike From: howardk I've been experimenting with several different coding styles for plug- ins. Lately I've been curious about the difference in performance between using local variables vs. instance variables for storing state. JSLitmus, while not itself jQuery-based, has just given me the answers I've been looking for. I found them a bit surprising: http://www.fatdog.com/litmus_tests/InstanceVsLocalTest.html (Apologies for the color scheme! :-) Howard
[jQuery] Re: JSLitmus invaluable tool
With Normalize checked, I get infinity for both of them. With it unchecked, I get 12.6M and 10.9M. I'm using google chrome (which the test reports as Safari). --Erik On Tue, Nov 11, 2008 at 9:16 AM, howardk [EMAIL PROTECTED] wrote: I've been experimenting with several different coding styles for plug- ins. Lately I've been curious about the difference in performance between using local variables vs. instance variables for storing state. JSLitmus, while not itself jQuery-based, has just given me the answers I've been looking for. I found them a bit surprising: http://www.fatdog.com/litmus_tests/InstanceVsLocalTest.html (Apologies for the color scheme! :-) Howard