Комментарии 5
Может от тулсов ненадо лицензии было прикрепить? ну так на всякий случай.
+1
Код можно было еще жать и жать :)
Например:
Другой пример:
Запись in_range(r, 4, 8) на 1 байт короче, чем запись без вызова функции, функция вызывается всего 7 раз, но сама функция 36 байт. В итоге если все переписать на код без вызова и убрать функцию получаем +29 байт.
Кажется я уже сэкономил 111 дополнительных байт :)
Местами можно переписать алгоритмы, местами конструкции. Например, не сравнивать переменные с null:
Это +6 байт на каждом сравнении, коих не мало, и они не сокращаются компилятором.
В общем, есть, есть куда еще жать ;)
ЗЫ На всякий случай уточню, что цифры приводил для пожатого closure compiler'ом кода в режиме SIMPLE_OPTIMIZATIONS.
Например:
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.
+2
А вы, всё-таки попробуйте вместе с advanced + png. Дело в том, что более короткий исходник для advanced optimization не всегда даёт выигрыш после зипования. Поэтому переписанные куски, которые не давали выигрыша, или давали худший результат, мы просто отбрасывали. :)
if (object == null) и всякие || && нормально в advanced режиме переписываются, поэтому мы спичках не экономили.
if (object == null) и всякие || && нормально в advanced режиме переписываются, поэтому мы спичках не экономили.
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Исходный код игры «Fontanero», победителя конкурса 10k apart