Array.prototype.inArray = function(value) {
var i = 0, ii;
while (ii = this[i++]) {
if (ii === value) return true;
}
return false;
};
перезапись переменной (ii = thi) довольно медленная операция (относительно) и в данном случае происходит при каждой итерации цикла, можно легко избавиться от нее.
Вторая перезапись (i++) срабатывает лишний раз в последней итерации цикла.
Вообще все циклы очень не оптимизировано написаны.
CarbonJS.onDOMready = function(func) {
var init = function() {
if (arguments.callee.done) return;
....
ужасно написано:
- отдельный Interval для каждого вызова, можно обойтись одним.
- целевая функция должна вызываться в контексте document так как является обработчиком события DOMContentLoaded (в идеале) которое принадлежит документу.
- способ для отслеживания readyState в WebKit давно не имеет смысла, версиями браузеров для которых он придуман уже давно вообще никто не пользуется.
- вызов CarbonJS.onDOMready после onload уходит в пустоту, может это и правильно, но обычно это не так, кроме того при этом останутся Interval-ы которые уже никогда не будут сброшены.
- перезапись window.onload.
- вместо defer лучше использовать doScroll.
Мой старый вариант с defer:
DOMContentLoaded и defer
Octane там объяснил чем doScroll лучше.
window.onunload = function() { // Чтобы избежать утечек памяти во всеми любимом браузере, удаляем вручную все установленные обработчики событий
while (CarbonJS.events.length > 0) Q(CarbonJS.events[0].obj).removeEvent(CarbonJS.events[0].evt);
};
если я через addEvent назначу событие onunload, то unload удаляющий все события вероятно сработает раньше моего (мой unload удалится и не сработает), window.onunload тоже занят, и как мне теперь свой unload поставить?
cl = cl.split(" "); // Чтобы удалить класс, сначала разбиваем className на массив значений
разделителем имен может быть любой пробельный символ, а не только пробел.
while (++i < cl.length) ncl += cl[i]; // и перезаписываем className
Array#join
//----------------
Вывод: при максимально беглом осмотре двух модулей множество стандартных ошибок, что будет если я детально стану разбирать? Сильно не оптимизированный код, особенно циклы, множество спорных решений.