apply-optimization.js (1114B)
1 function make(k) { 2 var a = new Array(k); 3 for ( let i=0 ; i < k ; i++ ) 4 a[i] = {} 5 return a; 6 } 7 8 function g() { 9 return arguments.length; 10 } 11 12 function f(a) { 13 var sum = 0; 14 for ( let i=0 ; i < 1000 ; i++ ) 15 sum += g.apply(null, a); 16 return sum; 17 } 18 19 function F2() { 20 var sum = 0; 21 for ( let i=0 ; i < 1000 ; i++ ) 22 sum += g.apply(null, arguments); 23 return sum; 24 } 25 26 function F(a) { 27 return F2.apply(null, a); 28 } 29 30 function time(k, t) { 31 var then = Date.now(); 32 assertEq(t(), 1000*k); 33 var now = Date.now(); 34 return now - then; 35 } 36 37 function p(v) { 38 // Uncomment to see timings 39 // print(v); 40 } 41 42 f(make(200)); 43 44 // There is currently a cutoff after 375 where we bailout in order to avoid 45 // handling very large stack frames. This slows the operation down by a factor 46 // of 100 or so. 47 48 p(time(374, () => f(make(374)))); 49 p(time(375, () => f(make(375)))); 50 p(time(376, () => f(make(376)))); 51 p(time(377, () => f(make(377)))); 52 53 F(make(200)); 54 55 p(time(374, () => F(make(374)))); 56 p(time(375, () => F(make(375)))); 57 p(time(376, () => F(make(376)))); 58 p(time(377, () => F(make(377))));