02.02.2010, 22:35
|
Новичок на форуме
|
|
Регистрация: 02.02.2010
Сообщений: 1
|
|
Грамотная организация кода
Всем привет!
Собственно, разрабатываю сайты с использованием JS уже достатоно давно (использую jQuery), но вот недавно подвернулся довольно крупный проект и в связи с этим задался таким вопросом: а как наиболее правильно и грамотно структурировать код?
К примеру, у меня много обработчиков событий после $(document).ready вешается, но часть из них используется только на определенных страницах. Аналогичная ситуация с бОльшей частью кода: все функции тупо в одном файле, но юзается на странице на одной только процентов 20-30 из них. Или плевать на это: юзер загрузил файл, он попал в кэш и все, уже неважно?..
Другой пример, на странице необходимо повесить обработчики событий на нажатие клавиш. Что же, в середине страницы подключать файл с функциями для обработки нажатий клавиш, а ниже делать блок <script>, где инициализировать этот код? По-моему, не совсем изящно.
Вот как лучше устроить структуру кода, всех функций?
Как я понимаю, желательно на странице инициализировать только то, что потенциально может использоваться на ней, но какими способами можно это сделать(выстроить такую структуру)? Разбить все на классы?
С ООП в JS особо не работал, если честно.
Конечная цель: чтобы обилие функций (и в дальнейшем увеличение их кол-ва) не сказывалось на скорости работы браузера.
P.S. Кстати, что лучше использовать: bind или live? Различия между функциями знаю, но с точки зрения производительности браузера что лучше? live, вероятно, постоянно мониторит появление новых элементов -- влияет ли это как-то на скорость?
Всем спасибо за внимание.
|
|
03.02.2010, 00:39
|
|
Профессор
|
|
Регистрация: 15.12.2009
Сообщений: 742
|
|
Сообщение от trasher
|
постоянно мониторит появление новых элементов -- влияет ли это как-то на скорость?
|
не элементов а при событии проходится по всем элементам от источника (до document если ничего не подходит) с проверкой селекторов. Обилие .live при событии mousemove|over|out - браузер загнется.
__________________
Настоящий программист думает и осознает сам решение задачи, а не копирует другие мысли, не осознавая их (c)
Относись к человеку так же, как хотелось бы отношения к себе (с)
Все нужно там, где оно нужно, а все не нужно нигде (с) Gozar
B~Vladi: А кто такой JavaScript стрелок?! micscr: это тот, кто не jQuery танкист.
Программы становятся медленнее быстрее, чем компьютеры становятся быстрее (с) Никлаус Вирт
|
|
03.02.2010, 11:01
|
|
Пионэр
|
|
Регистрация: 16.11.2009
Сообщений: 1,322
|
|
…зато для click .live подходит шикарно. Единственное, что не радует, так это то, что Рейсиг решил полностью забить на capturing.
PeaceCoder, в Вашей библиотеке же будет capturing? (Ну, а для кривого априори IE — setCapture(), свойства onbeforeactivate, ondeactivate и прочие радости)
Последний раз редактировалось subzey, 03.02.2010 в 11:04.
|
|
03.02.2010, 13:11
|
|
Профессор
|
|
Регистрация: 15.12.2009
Сообщений: 742
|
|
Сообщение от subzey
|
PeaceCoder, в Вашей библиотеке же будет capturing?
|
Можно реализовать, но скажите хоть 1 плюс этой фишки ?
__________________
Настоящий программист думает и осознает сам решение задачи, а не копирует другие мысли, не осознавая их (c)
Относись к человеку так же, как хотелось бы отношения к себе (с)
Все нужно там, где оно нужно, а все не нужно нигде (с) Gozar
B~Vladi: А кто такой JavaScript стрелок?! micscr: это тот, кто не jQuery танкист.
Программы становятся медленнее быстрее, чем компьютеры становятся быстрее (с) Никлаус Вирт
|
|
03.02.2010, 21:41
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
Сообщение от trasher
|
Что же, в середине страницы подключать файл с функциями для обработки нажатий клавиш, а ниже делать блок <script>, где инициализировать этот код? По-моему, не совсем изящно.
|
почему в середине? Конечно, в конце
Сообщение от trasher
|
Как я понимаю, желательно на странице инициализировать только то, что потенциально может использоваться на ней, но какими способами можно это сделать(выстроить такую структуру)? Разбить все на классы?
|
классы при чем? Они тебе могут помочь лучше организовать код, но к подключению только нужных файлов это не относиться
Сообщение от trasher
|
Конечная цель: чтобы обилие функций (и в дальнейшем увеличение их кол-ва) не сказывалось на скорости работы браузера
|
попробуй поразбивать свои скрипты на более маленькие (не от фонаря, естественно) и померяй производительность
|
|
03.02.2010, 21:49
|
-
|
|
Регистрация: 16.07.2008
Сообщений: 207
|
|
|
|
04.02.2010, 01:32
|
|
Пионэр
|
|
Регистрация: 16.11.2009
Сообщений: 1,322
|
|
PeaceCoder,
Фазу capturing (в нормальных браузерах) проходит любое событие, в то время, как bubbling — только те, для которых исторически так сложилось.
К тому же, обработчики на фазе capturing запускаются раньше DOM0-обработчиков и bubbling. Да и почти любое событие проходит при capturing через document в любом случае.
Кто контролирует спайс capturing, — контролирует Вселенную.
|
|
04.02.2010, 05:38
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
С. Макконнелл, Совершенный код
вот не знаю, пытался ее читать не так давно. Невероятными усилиями воли заставил себя прочитать половину или около того. Ничего нового для себя не нашел. Плохо искал?
|
|
04.02.2010, 10:38
|
|
Модератор Всея Форума
|
|
Регистрация: 14.05.2009
Сообщений: 4,021
|
|
Сообщение от x-yuri
|
Плохо искал?
|
Не дочитал видимо
|
|
04.02.2010, 16:20
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
Сообщение от B~Vladi
|
Не дочитал видимо
|
ну а что там такого интересного написано? Лучше бы написал пару статей и не в таком нудном стиле (вот такие вот от нее у меня впечатления остались)
|
|
|
|