Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   Carbon.JS JavaScript framework (https://javascript.ru/forum/project/7571-carbon-js-javascript-framework.html)

tenshi 08.02.2010 20:39

по коду - не стоит делать гигантских двумерных функций

PeaceCoder 08.02.2010 20:40

Цитата:

Сообщение от tenshi
если твой движок селекторов так крут - ну так и развивай jquery встроив движок в него

я не говорю что он крут. Я просто говорю недостатки каждого. В моем тоже есть недостатки пока что, потому еще не показал конечный результат. Уже 3ю неделю ломаю голову как убрать недостатки jQ и что бы код был по меньше и скорость не меньше jQ

Cr@ZyBoY 08.02.2010 21:21

PeaceCoder,
а вы добавляли элементы в DOM вручную или использовав функции из Карбона? Просто на этот счёт во всех функциях из DOM-модуля есть функция автоматического обновления кэша, соответственно таких проблем возникнуть не должно.
Над комбинаторами подумаю, возможно будет проще сделать посимвольный разбор строки в данном случае, как я делал в getByPseudo(). Спасибо за замечания :)

tenshi,
как я уже написал на своём сайте, я не собираюсь делать очередной jQuery, и тем более модернизировать его. Почему? Не люблю ковыряться в чужом навороченном коде. Я как-то пытался понять, а как же оно там всё устроено... И решил, что проще написать свою библиотеку.

PeaceCoder 08.02.2010 22:07

Цитата:

Сообщение от Cr@ZyBoY
Просто на этот счёт во всех функциях из DOM-модуля есть функция автоматического обновления кэша, соответственно таких проблем возникнуть не должно.

Другими словами DOM привязан к вашему ФВ. А это плохо и если сторонний срипт(какойто модуль другого человека или еще что) изменит вручную дом контент, то эффект от Ваших селекторов 0. А если например innerHTML=....

Cr@ZyBoY 08.02.2010 22:36

Ну, можно ещё пошаманить с MutationEvents.

PeaceCoder 08.02.2010 23:31

Цитата:

Сообщение от Cr@ZyBoY
MutationEvents.

Они поддерживаются, ито плохо, вроде только в MZ и Safari

tenshi 08.02.2010 23:43

Цитата:

как я уже написал на своём сайте, я не собираюсь делать очередной jQuery, и тем более модернизировать его. Почему? Не люблю ковыряться в чужом навороченном коде. Я как-то пытался понять, а как же оно там всё устроено... И решил, что проще написать свою библиотеку.
напиши свою либу с тем же апи и засунь вместо sizzle

PeaceCoder 09.02.2010 01:51

Cr@ZyBoY,
Кстати спасибо за идею разделения getByCombinators. Если я на верном пути, а это кажется так, то вроде допер как быстро выбрать нужные элементы не затрачивая практически времени. ща буду соединять логику jQ и твою...

Riim 09.02.2010 08:31

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:
http://javascript.ru/forum/events/60...d-i-defer.html
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


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

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

Cr@ZyBoY 09.02.2010 12:22

PeaceCoder,
да не за что. Кстати, интересно поглядеть на ваш движок. Kolyaj говорил, что он где-то в соседней теме, но я что-то не нашёл...

Riim,
на мой выбор такого типа циклов повлияла вот эта статья - http://habrahabr.ru/blogs/yass/49679/ ("Перебор массива"). Если вы знаете более быстрый способ - пожалуйста, я его рассмотрю и протестирую.
Про onDOMready: это отголоски моей первой библиотеки 2-летней давности, код я пересмотрю. Большую часть функций из модуля utilities я тоже буду переписывать, просто ещё руки не дошли.
Насчёт циклов я своё мнение уже сказал. Если вас не затруднит, посмотрите подробнее другие модули.


Часовой пояс GMT +3, время: 20:10.