0
<< предыдущая заметкаследующая заметка >>
27 января 2011
Пост ненависти ко всем JavaScript-мудакам мира

Я ненавижу фреймворки. Фреймворки — уебищное изобретение, созданное для того, чтобы новички смогли побыстрее сваять себе домашнюю страничку с выплывающим окошечком. Не надо мне пиздеть, что фреймворки «облегчают разработку сайта и сокращают время». Вы занимаетесь говнокодерством, если вам нужно сократить время. Давайте я буду в свои книги вставлять по 40 страниц из Библии или Гомера и объяснять, что мне просто было лень возиться, когда уже есть хорошая отлаженная реализация нужного эпизода.

Ситуация. Некий фотосайт, на котором вдруг перестают работать некоторые функции движка. Начинаю разбираться. Оказывается, хозяевам фотосайта понадобилось, чтобы фотографии в полный размер разворачивались через некий lightbox — громадный уебищный фреймворк, который полчаса после клика на фотку разворачивает вертикальные горизонты, затем горизонтальные, затем выдает по центру фотку в полный размер и еще долго дорисовывает какие-то вензеля и стрелочки навигации по бокам. В итоге получается почти то же самое, что делает движок с фотками своими штатными средствами в 10 строк, но только здесь — через задницу и с подвисаниями. Но это их в общем-то дело — поставили поверх движка lightbox и поставили, смотрите свои фотки.

Но ведь и этот ебаный lightbox, хоть и занимает мег в дебильных скриптах, он тоже сам по себе работать не способен. Потому что его дебильные разработчики зачем-то использовали фреймворк prototype.js Который вообще непонятно зачем им был нужен, но они тащат за собой и его. Ну хуй с вами, кретины безрукие, тащите за собой хоть миллион фреймворков, которые помогут вам закрыть скобки или расставить пробелы или напечатать «hello world» или что там у вас никак своими руками не удается без «популярных» библиотек на сотни килобайт. Мне-то, казалось бы, какое дело?

Оказывается, дело есть. Пишем на JavaScript простенькую фразу: var massiv=['A','B']; Как вы думаете, что теперь содержит наш массив? Два элемента, буквы А и Б? Хуй там! Поскольку на странице рядом присутствовал некий фреймворк prototype.js на 200 кил, теперь любой массив содержит неслыханные килобайты говна. Вот теперь полное содержание нашего массива massiv:

[показать спрятанное]
toJSON=function () {

var results = [];

this.each(function (object) {var value = Object.toJSON(object);if (!Object.isUndefined(value)) {results.push(value);}});

return "[" + results.join(", ") + "]";
}
clone=function () {

return [].concat(this);
}
intersect=function (array) {

return this.uniq().findAll(function (item) {return array.detect(function (value) {return item === value;});});
}
uniq=function (sorted) {

return this.inject([], function (array, value, index) {if (0 == index || (sorted ? array.last() != value : !array.include(value))) {array.push(value);}return array;});
}
without=function () {

var values = $A(arguments);

return this.select(function (value) {return !values.include(value);});
}
flatten=function () {

return this.inject([], function (array, value) {return array.concat(Object.isArray(value) ? value.flatten() : [value]);});
}
compact=function () {

return this.select(function (value) {return value != null;});
}
last=function () {

return this[this.length — 1];
}
first=function () {

return this[0];
}
clear=function () {

this.length = 0;

return this;
}
_each=function forEach() {

[native code]
}
_reverse=function reverse() {

[native code]
}
entries=function () {

return this.map();
}
member=function (object) {

if (Object.isFunction(this.indexOf)) {

if (this.indexOf(object) != -1) {

return true;

}

}

var found = false;

this.each(function (value) {if (value == object) {found = true;throw $break;}});

return found;
}
select=function (iterator, context) {

iterator = iterator.bind(context);

var results = [];

this.each(function (value, index) {if (iterator(value, index)) {results.push(value);}});

return results;
}
find=function (iterator, context) {

iterator = iterator.bind(context);

var result;

this.each(function (value, index) {if (iterator(value, index)) {result = value;throw $break;}});

return result;
}
inspect=function () {

return "[" + this.map(Object.inspect).join(", ") + "]";
}
size=function () {

return this.length;
}
zip=function () {

var iterator = Prototype.K, args = $A(arguments);

if (Object.isFunction(args.last())) {

iterator = args.pop();

}

var collections = [this].concat(args).map($A);

return this.map(function (value, index) {return iterator(collections.pluck(index));});
}
toArray=function () {

return [].concat(this);
}
sortBy=function (iterator, context) {

iterator = iterator.bind(context);

return this.map(function (value, index) {return {value: value, criteria: iterator(value, index)};}).sort(function (left, right) {var a = left.criteria, b = right.criteria;return a < b ? -1 : a > b ? 1 : 0;}).pluck(«value»);
}
reject=function (iterator, context) {

iterator = iterator.bind(context);

var results = [];

this.each(function (value, index) {if (!iterator(value, index)) {results.push(value);}});

return results;
}
pluck=function (property) {

var results = [];

this.each(function (value) {results.push(value[property]);});

return results;
}
partition=function (iterator, context) {

iterator = iterator ? iterator.bind(context) : Prototype.K;

var trues = [], falses = [];

this.each(function (value, index) {(iterator(value, index) ? trues : falses).push(value);});

return [trues, falses];
}
min=function (iterator, context) {

iterator = iterator ? iterator.bind(context) : Prototype.K;

var result;

this.each(function (value, index) {value = iterator(value, index);if (result == null || value < result) {result = value;}});

return result;
}
max=function (iterator, context) {

iterator = iterator ? iterator.bind(context) : Prototype.K;

var result;

this.each(function (value, index) {value = iterator(value, index);if (result == null || value >= result) {result = value;}});

return result;
}
invoke=function (method) {

var args = $A(arguments).slice(1);

return this.map(function (value) {return value[method].apply(value, args);});
}
inject=function (memo, iterator, context) {

iterator = iterator.bind(context);

this.each(function (value, index) {memo = iterator(memo, value, index);});

return memo;
}
inGroupsOf=function (number, fillWith) {

fillWith = Object.isUndefined(fillWith) ? null : fillWith;

return this.eachSlice(number, function (slice) {while (slice.length < number) {slice.push(fillWith);}return slice;});
}
include=function (object) {

if (Object.isFunction(this.indexOf)) {

if (this.indexOf(object) != -1) {

return true;

}

}

var found = false;

this.each(function (value) {if (value == object) {found = true;throw $break;}});

return found;
}
grep=function (filter, iterator, context) {

iterator = iterator ? iterator.bind(context) : Prototype.K;

var results = [];

if (Object.isString(filter)) {

filter = new RegExp(filter);

}

this.each(function (value, index) {if (filter.match(value)) {results.push(iterator(value, index));}});

return results;
}
findAll=function (iterator, context) {

iterator = iterator.bind(context);

var results = [];

this.each(function (value, index) {if (iterator(value, index)) {results.push(value);}});

return results;
}
detect=function (iterator, context) {

iterator = iterator.bind(context);

var result;

this.each(function (value, index) {if (iterator(value, index)) {result = value;throw $break;}});

return result;
}
collect=function (iterator, context) {

iterator = iterator ? iterator.bind(context) : Prototype.K;

var results = [];

this.each(function (value, index) {results.push(iterator(value, index));});

return results;
}
any=function (iterator, context) {

iterator = iterator ? iterator.bind(context) : Prototype.K;

var result = false;

this.each(function (value, index) {if ((result = !!iterator(value, index))) {throw $break;}});

return result;
}
all=function (iterator, context) {

iterator = iterator ? iterator.bind(context) : Prototype.K;

var result = true;

this.each(function (value, index) {result = result && !!iterator(value, index);if (!result) {throw $break;}});

return result;
}
eachSlice=function (number, iterator, context) {

iterator = iterator ? iterator.bind(context) : Prototype.K;

var index = — number, slices = [], array = this.toArray();

while ((index += number) < array.length) {

slices.push(array.slice(index, index + number));

}

return slices.collect(iterator, context);
}
each=function (iterator, context) {

var index = 0;

iterator = iterator.bind(context);

try {

this._each(function (value) {iterator(value, index++);});

} catch (e) {

if (e != $break) {

throw e;

}

}

return this;
}
1=B
0=A


Что это за немыслимая хуйня?!! Почему наши буквы А и Б где-то в жопе, а массив забит под завязку запредельным количеством каких-то сраных говнофункций?! Это все сделал «присутствующий рядом» prototype.js. Разумеется, если вы начнете работать с элементами своего массива как с буквами (а вы ничего другого и не ждете — сами же создали массив с двумя буквами), то на первом же элементе-функции все полетит к ебеням. А спасибо надо сказать говнокодерам, которые для вывода несчастной фотки по центру экрана притащили в код кучу сраных чемоданов с говном, которое имеет наглость вторгаться теперь в любые процессы и срать веером.

<< предыдущая заметка следующая заметка >>
пожаловаться на эту публикацию администрации портала
архив понравившихся мне ссылок
Оставить комментарий


Include not found: `/home/www/lleo.me/blog/template/_reklamnaya_lirica.htm`