Показать сообщение отдельно
  #19 (permalink)  
Старый 09.02.2010, 08:31
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

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


//----------------

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

Последний раз редактировалось Riim, 09.02.2010 в 09:51.
Ответить с цитированием