As can be noted by increasing the argument in String#times, execution time slows down dramatically and makes logarithmically identical curve (to one produced my String#times in FireFox), yet of doubled order magnitude.
An alternative method for IE exists that makes use of array concatenation. Below are the tests, benchmarks and conclusions: Object.extend(String.prototype, { times1: function(count) { // current method employed in Prototype var result = ''; for (var i = 0; i < count; i++) result += this; return result; }, times2: function(count) { // a method that works best in IE: for (var i = 0, result = []; i < count; i++) result.push(this); return result.join(''); } }); Unit tests: testTimes1: function() {with(this) { /* */ for (var i = 55, j = 34, k; i < 10000; k = i + j, j = i, i = k) // using fibonacci series to use for arguments benchmark(function() { 'foo'.times1(i); }, 100); }}, testTimes2: function() {with(this) { /* */ for (var i = 55, j = 34, k; i < 10000; k = i + j, j = i, i = k) benchmark(function() { 'foo'.times2(i); }, 100); }}, Results in FF: passed testTimes1 7 assertions, 0 failures, 0 errors Info: Operation finished 100 iterations in 0.015s (1) Info: Operation finished 100 iterations in 0.016s (2) Info: Operation finished 100 iterations in 0.031s (3) Info: Operation finished 100 iterations in 0.063s (4) Info: Operation finished 100 iterations in 0.078s (5) Info: Operation finished 100 iterations in 0.406s (6) Info: Operation finished 100 iterations in 0.406s (7) Info: Operation finished 100 iterations in 0.563s (8) Info: Operation finished 100 iterations in 0.922s (9) Info: Operation finished 100 iterations in 1.468s (10) Info: Operation finished 100 iterations in 2.266s (11) passed testTimes2 7 assertions, 0 failures, 0 errors Info: Operation finished 100 iterations in 0.031s (1) Info: Operation finished 100 iterations in 0.047s (2) Info: Operation finished 100 iterations in 0.078s (3) Info: Operation finished 100 iterations in 0.125s (4) Info: Operation finished 100 iterations in 0.172s (5) Info: Operation finished 100 iterations in 0.297s (6) Info: Operation finished 100 iterations in 0.687s (7) Info: Operation finished 100 iterations in 0.985s (8) Info: Operation finished 100 iterations in 1.422s (9) Info: Operation finished 100 iterations in 2.453s (10) Info: Operation finished 100 iterations in 7.297s (11) Results in IE: passed testTimes1 7 assertions, 0 failures, 0 errors Info: Operation finished 100 iterations in 0.031s (1) Info: Operation finished 100 iterations in 0.078s (2) Info: Operation finished 100 iterations in 0.141s (3) Info: Operation finished 100 iterations in 0.5s (4) Info: Operation finished 100 iterations in 0.875s (5) Info: Operation finished 100 iterations in 1.828s (6) Info: Operation finished 100 iterations in 5.281s (7) !!! Info: Operation finished 100 iterations in 11.781s (8) !!! Info: Operation finished 100 iterations in 29.156s (9) !!! Info: Operation finished 100 iterations in 70.813s (10) !!! Info: Operation finished 100 iterations in 184.812s (11) !!!! passed testTimes2 7 assertions, 0 failures, 0 errors Info: Operation finished 100 iterations in 0.047s (1) Info: Operation finished 100 iterations in 0.063s (2) Info: Operation finished 100 iterations in 0.078s (3) Info: Operation finished 100 iterations in 0.172s (4) Info: Operation finished 100 iterations in 0.234s (5) Info: Operation finished 100 iterations in 0.406s (6) Info: Operation finished 100 iterations in 0.719s (7) Info: Operation finished 100 iterations in 1.094s (8) Info: Operation finished 100 iterations in 1.859s (9) (15.9 times better) Info: Operation finished 100 iterations in 2.891s (10) (24.5 times better) Info: Operation finished 100 iterations in 4.5s (11) (40 times better!) Can it be considered that more suiting method is used for IE? Like: if (Prototype.Browser.IE) { String.prototype.times = function(count) { for (var i = 0, result = []; i < count; i++) result.push(this); return result.join(''); }; } Thanks! Best regards, Andrew Revinsky --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Prototype: Core" group. To post to this group, send email to prototype-core@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/prototype-core?hl=en -~----------~----~----~----~------~----~------~--~---