(044) 362 48 16   (098) 294 41 60 
			   			  
             
             
            			 | 
         
        
            
            
                   
             | 
         
        | 
    
    
            
            
            
             1. Switch vs If-Then-Else 
   Порівняння продуктивності конструкцій SWITCH і IF-ELSE IF   тестувався наступний код: 
 
   var x = 20;   var y = 0; 
   for (var i = 0; i <100000; i + +) ( 
   if (x == 0) (y = x)   else if (x == 1) (y = x)   else if (x == 2) (y = x)   else if (x == 3) (y = x)   else if (x == 4) (y = x)   else if (x == 5) (y = x)   else if (x == 6) (y = x)   else if (x == 7) (y = x)   else if (x == 8) (y = x)   else if (x == 9) (y = x)   else if (x == 10) (y = x)   else if (x == 11) (y= X)   else if (x == 12) (y = x)   else if (x == 13) (y = x)   else if (x == 14) (y = x)   else if (x == 15) (y = x)   else if (x == 16) (y = x)   else if (x == 17) (y = x)   else if (x == 18) (y = x)   else if (x == 19) (y = x)   else if (x == 20) (y = x) 
   ) 
   і
   var x = 20;   var y = 0; 
   for (var i = 0; i <100000; i + +) ( 
   switch (x) ( 
   case 0: y = x; break;   case 1: y = x; break;   case 2: y = x; break;   case 3: y = x; break;   case 4: y = x; break;   case 5: y = x; break;   case 6: y = x; break;   case 7: Y = x; break;   case 8: y = x; break;   case 9: y = x; break;   case 10: y = x; break;   case 11: y = x; break;   case 12: y = x; break;   case 13: y = x; break;   case 14: y = x; break;   case 15: y = x; break;   case 16: y = x; break;   case 17: y = x; break;   case 18: y = x; break;   case 20: y = x;   )   ) 
 
   FireFox: IFTE: 250ms, SWITCH: 25ms Приріст продуктивності: 10.00 раз   IE: IFTE: 281ms, SWITCH: 219ms Приріст продуктивності: 1.28 рази 
   Цього ж тест в PHP показав приріст продуктивності при использованіі оператора switch в 1.46 рази 
 
  2. Switch Structure 
   Оператор switch швидше виконується, якщо змінні (за якими ведеться порівняння значення) впорядковані і збільшуються передбачувано. 
 
   iter2 = 100000;   var x = 20; 
   for (var i = 0; i <iter2; i + +) ( 
   switch (x) ( 
   case 0: y = x;   case 1: y = x;   case 2: y = x;   case 3: y = x;   case 4: y = x;   case 5: y = x;   case 6: y = x;   case 7: y = x;   case 8: y = x;   case 9: y = x;   case 10: y = x;   case 12: y = x;   case 13: y = x;   case 14: y = x;   case 15: y = x;   case 16: y = x;   case 17: y = x;   case 18: y = x;   case 19: y = x;   case 20: y = x;   )   ) 
   і 
   iter2 = 100000;   var x = 200;   var y = 0; 
   for (var i = 0; i <iter2; i + +) (   switch (x) ( 
   case 0: y = x;   case 9: y = x;   case 23: y = x;   case 35: y = x;   case 41: y = x;   case 50: y = x;   case 62: y = x;   case 70: y = x;   case 87: y = x;   case 91: y = x;   case 102: y = x;   case 111: y = x;   case 125: y = x;   case 130: y = x;   case 149: y = x;   case 152: y = x;   case 161: y = x;   case 171: y = x;   case 183: y = x;   case 190: y = x;   case 199: y = x;   )   ) 
 
   FireFox: SWITCH БЕЗ оптимізація: 78ms, SWITCH з оптимізацією: 47ms Приріст производітельності: 1.66 рази   IE: SWITCH БЕЗ оптимізація: 218ms, SWITCH з оптимізацією: 218ms Приріст продуктивності: немає 
   в PHP це теж не дає приросту до проіводітельності.   в PHP switch відпрацьовує швидше, якщо мінлива x не збігається з жодним із значень case ... 
 
  3. Look Up Tables   Суть оптимізації полягає в тому, щоб мінімізувати трудомісткі операції, наприклад математичні. Ця мінімізація полягає в тому щоб усі можливі результати заздалегідь помістити в масив і вибирати результати минаючи операції обчислення.   Наприклад 
 
  sin = new Array (); 
   for (var i = 1; i <= 360; i + +) (   sin = i * (Math.PI/180);   )   
   для того, щоб вибрати синус необхідного кута наприклад 34 градуси: 
    var trigVal = sin [34];    Код використовується в тестах: 
   створюємо масив-таблицю значень 
   logTable = new Array (100); 
   for (var i = 0; i <= 99; i + +) (   logTable = Math.log (i);   ) 
    4. Loop Unrolling  
   Ідея полягає в прискоренні виконанийия циклів, наочний приклад: 
 
  for (var i = 0; i <iterations;) (   [робимо щось із i]; i + +;   [робимо щось із i]; i + +;   [робимо щось із i]; i + +;   [робимо щось із i]; i + +;   [робимо щось із i]; i + +;   )  
   виконуватися набагато швидше ніж код
 
  for (var i = 0; i <iterations; i + +) (   [робимо щось із i];   )  
   в PHP теж дуже добре видно збільшення продуктивності при використанні Loop Unrolling. 
 
  5. Reverse Loop Counting   Справа в тому, що порівняное змінної з числом виконується швидше, ніж порівняння змінної з іншого змінної. Також автор статті згадує, що порівняння змінної із числом 0 виконується швидше, ніж порівняння змінної з яким-небудь іншим числом. 
   За цим цикл 
 
  for (i = 0; i <iterations; i + +) (   / / Do something here   )  
   буде краще замінити на цикл 
 
  for (var i = iterations; i> 0; i -) (   / / Do something here   )  
 
   Тестувався код: 
   CODE 1: 
 
  rIter = 500000;   for(var i = rIter; i> 0; i -) ( 
   )  
   CODE 2: 
 
  rIter = 500000;   for (var i = 0; i <rIter; i + +) ( 
   )  
   FireFox: CODE 2: 219ms, CODE 1: 78ms Приріст продуктивності: 2.80 рази   IE: CODE 2: 188ms, CODE 1: 125ms Прірост продуктивності: 1.50 рази 
   Це справедливо і для PHP! 
 
  6. Loop Flipping 
   Автор в статті говорить, що зустрічаються ситуації, коли постфіксний цикл буде працювати швидше, але конкретних прикладів не приводить.   Цього слід уникати, такяк постфіксний цикл 
   CODE1: 
 
  var fIter = 500000;   i = 0;   do   (   i + +;   ) While (i <fIter);  
   виконується повільніше ніж префіксний (по крайней мере у всіх проведених javascript тестах) 
   CODE2: 
 
  var fIter = 500000;   for (var i = 0; i <fIter; i + +) ( 
   )  
   FireFox: CODE1: 578ms, CODE2: 219ms Приріст продуктивності: 2.64 рази   IE: CODE1: 313ms, CODE2: 187ms Приріст продуктивності: 1.67 рази 
   в PHP ситуація зворотна, постфіксний цикл (не знаюпочему) трохи швидше працює.               | 
             
             
               
     
   
  
     |