Советы по оптимизации Javascript

Автор: Николай Петрунин Дата публикации: 03.04.2012

Примеры конвертирования переменных

	var myVar   = "3.14159",  
		str     = ""+ myVar,//  в стринг     (string)
		int     = ~~myVar,  //  в интеджер   (integer)
		float   = 1*myVar,  //  во флоат     (float)
		bool    = !!myVar,  //  в булен - все непустые строки и числа кроме 0 будут true
		array   = [myVar];  //  в массив

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

Не оптимально:

	var i, s = "";
	function testfunction() {
		for( i = 0; i < 20; i++ ) {
			s += i;
		}
	}
	testfunction();
	

Оптимально:

	function testfunction() {
	var i, s = "";
		for( i = 0; i < 20; i++ ) {
			s += i;
		}
	}
	testfunction();
	

Оптимизация создания методов обьекту

Не оптимально:

	var Class = function(a0, a1){ 
		this.publicVar = defaultValue; 
		this._fn0 = function(){ 
			this.publicVar = 1;
		};
	};
	

Оптимально:

	var Class = function(a0, a1){ 
		this.publicVar = defaultValue; 
	};
	Class.prototype. _fn0 = function(){ 
		this.publicVar = 1;
	};
	

Пример оптимизации условия

Не оптимально:

	a < sqrt(b);
	

Оптимально:

	var с = a*a;
	
	c < b;
	

Если есть возможность простого вычисления операций из объекта Math то оптимальнее его заменить, и вычисления проводить до условия.

Операторы сравнения "==" vs "==="

Оператор сравнения "=="

Примеры результатов

	""             ==   "0"           // false
	0              ==   ""           // true
	0              ==   "0"          // true
	false        ==   "false"       // false
	false        ==   "0"           // true
	false        ==   undefined     // false
	false        ==   null          // false
	null          ==   undefined     // true
	"trn"  ==   0             // true
	

Оператор сравнения "==="

Примеры результатов

	""             ===   "0"           // false
	0              ===   "            // false
	0              ===   "0"           // false
	false        ===   "false"       // false
	false        ===   "0"           // false
	false        ===   undefined     // false
	false        ===   null          // false
	null          ===   undefined     // false
	"trn"   ===   0             // false
	

Крайне рекомендуется использовать только операторы строгого равенства. В случае, когда намечается преобразование типов, нужно сделать явное приведение и не оставлять их на совести языковых хитростей с преобразованиями.