Как стать автором
Обновить

Комментарии 5

Может от тулсов ненадо лицензии было прикрепить? ну так на всякий случай.
надо*
думаете гугл нас будет судебно преследовать? :(
Код можно было еще жать и жать :)
Например:
  this.find = function(name) {
		var objs = this.objects;
		for(var i = 0; i < objs.length; ++i) {
			var o = objs[i];
			if (o.name == name) 
				return o;
		}
		return null;
	}
// если немного переписать

  this.find = function(name) {
		for(var i = 0, o; o = this.objects[i++];) {
			if (o.name == name) 
				return o;
		}
	}
// дает 81 байт вместо 112 (+31 байт экономии)

Другой пример:
      this.toString = function() {
		var c = {};
		var l = this.objects;
		if (!l.length)
			return "nothing";
		for(var i = 0; i < l.length; ++i) {
			var name = l[i].name;
			if (!c[name])
				c[name] = 1;
			else
				++c[name];
		}
		var r = "";
		for(var i in c) {
			var n = c[i];
			r += i;
			if (n > 1)
				r += "*" + n;
			r += ", ";
		}
		r = r.slice(0, -2);
		return r;
	}
// переписываем
        this.toString = function(){
		var c = {};

		for(var i = 0, obj, n; obj = this.objects[i]; ++i){
		  n = obj.name;
                  c[n] = ++c[n] || 1;
		}

		var res = [];
		for (var i in c){
		  res.push(c[i] > 1 ? i + '*' + c[i] : i);
		}

		return res.join(', ') || 'nothing';
	}
// получаем 167 байт вместо 218 ( +51 байт экономии)

Запись in_range(r, 4, 8) на 1 байт короче, чем запись без вызова функции, функция вызывается всего 7 раз, но сама функция 36 байт. В итоге если все переписать на код без вызова и убрать функцию получаем +29 байт.
Кажется я уже сэкономил 111 дополнительных байт :)

Местами можно переписать алгоритмы, местами конструкции. Например, не сравнивать переменные с null:
// вместо
  if (object == null)
  {
     ...
  }
// писать
  if (object)
  {
  }

Это +6 байт на каждом сравнении, коих не мало, и они не сокращаются компилятором.

В общем, есть, есть куда еще жать ;)

ЗЫ На всякий случай уточню, что цифры приводил для пожатого closure compiler'ом кода в режиме SIMPLE_OPTIMIZATIONS.
А вы, всё-таки попробуйте вместе с advanced + png. Дело в том, что более короткий исходник для advanced optimization не всегда даёт выигрыш после зипования. Поэтому переписанные куски, которые не давали выигрыша, или давали худший результат, мы просто отбрасывали. :)

if (object == null) и всякие || && нормально в advanced режиме переписываются, поэтому мы спичках не экономили.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации