среда, 23 июня 2010 г.

JavaScript Performance Best Practices от Nokia

Избегать использования функции eval()

   1: //slow
   2: setInterval(1000, "alert('hello')");
   3:  
   4: //faster
   5: setInterval(1000, function() { alert('hello'); });

Избегать использования выражения with



   1: //slow
   2: with (test.object) {    
   3:     foo = 'Value of foo property of object';    
   4:     bar = 'Value of bar property of object';
   5: }
   6:  
   7: //faster
   8: var myObj = test.object;
   9: myObj.foo = 'Value of foo property of object';
  10: myObj.bar = 'Value of bar property of object';


Не использовать try-catch-finnaly в требующих времени функциях



   1: //slow
   2: var object = ['foo', 'bar'], i;
   3: for (i = 0; i < object.length; i++) {   
   4:     try {      
   5:         // do something that throws an exception   
   6:     } 
   7:     catch (e) {      
   8:         // handle exception   
   9:     }
  10: }
  11:  
  12: //faster
  13: var object = ['foo', 'bar'], i;
  14: try {    
  15:     for (i = 0; i < object.length; i++) {        
  16:         // do something    
  17:     }
  18: } 
  19: catch (e) {    
  20:     // handle exception
  21: }


Использовать минимум глобальных переменных



   1: //slow
   2: var i,    str = '';
   3: function globalScope() {    
   4:     for (i=0; i < 100; i++) {        
   5:         str += i; 
   6:     }
   7: }
   8: globalScope();
   9:  
  10: //faster
  11: function localScope() {    
  12:     var i, str = '';    
  13:     for (i=0; i < 100; i++) {        
  14:         str += i; 
  15:     }
  16: }
  17: localScope();


В сложных и долговременных циклах стараться не использовать выражение for-in


Не делать многоразовых арифметических операций над строками одним выражением



   1: //Slow
   2: a += 'x' + 'y'; 
   3:  
   4: //Faster
   5: a += 'x'; a += 'y'; 
   6:  


Бинарные, тернарные, простые операции будут выполняться быстрее чем вызов аналогичных функций



   1: //slow
   2: var min = Math.min(a, b);
   3: arr.push(val);
   4:  
   5: //faster
   6: var min = a < b ? a : b;
   7: arr[arr.length] = val;


Не создавать без надобности переменные, имеющие привязки к DOM-модели



   1: //bad
   2: var car = new Object();
   3: car.color = "red";
   4: car.type = "sedan";
   5:  
   6: //good
   7: var car = { color : "red"; type : "sedan"}


Стараться не вызывать элементы из глобального скопа



   1: //bad
   2: var url = location.href;
   3:  
   4: //good
   5: var url = window.location.href;

Не использовать длинных комментариев и длинных названий переменных



   1: //bad
   2: function someFunction() {
   3:     var user_first_last_name = "first last"; /* stores the full name of user*/ 
   4: }
   5:  
   6: //good
   7: function someFunction() {
   8:     var fullName = "first last";
   9: }

Кешировать переменные, значения которых не меняются



   1: //slow
   2: var m = 10;
   3: for(var i=0; i<250; i++)
   4:     n += Math.tan(m);
   5:  
   6: //falster
   7: var m = 10;
   8: var exp = Math.tan(m);
   9: for(var i=0; i<250; i++)
  10:     n += exp;

Комментариев нет:

Отправить комментарий