12.03.2009, 19:12
|
Профессор
|
|
Регистрация: 18.04.2008
Сообщений: 152
|
|
кэширование селекторов
Господа, а кто знает — кэширует ли новый движок jQuery полученные результаты?
Например,
$('.some-div').bind('click', function(evt){
$('.another-div').text("OMG U CLIKT TEH BUTTON!!11")
})
По каждому клику jQuery будет заново перерывать весь DOM в поисках .another-div, или где-то закэширует, а потом будет искать в кэше?
|
|
12.03.2009, 19:20
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
рискую предположить, что не кеширует,ибо DOM может быть перерисован не зависимо от jQuery, и кеш будет неактуальным
не уверен, что получится, но попробуйте сами закешировать результаты, схранив результат получения коллекции в какую-нибудь переменную.по идее должно получится.
|
|
12.03.2009, 19:27
|
Профессор
|
|
Регистрация: 18.04.2008
Сообщений: 152
|
|
Сообщение от Gvozd
|
ибо DOM может быть перерисован не зависимо от jQuery, и кеш будет неактуальным
|
вот да, например.
Сообщение от Gvozd
|
закешировать результаты, схранив результат получения коллекции в какую-нибудь переменную.по идее должно получится.
|
А я так и делаю. Но подумалось — а вдруг зря.
Честно говоря, пишу на jQuery недавно, и код пока что выходит неизящный. Вот и подумалось — может, я что не так делаю
|
|
12.03.2009, 19:35
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
я так подозреваю вы понимаете под изяществом более красивые конструкции, занимающие меньше символов и прочее?
я бы не стал за этим сильно гнатся.
но в плане красоты можете попробовать как-то так(не верен,что сработает,но попробовать стоит)
var cache_some_div=$('.some-div')
var cache_another_div=$('.another-div')
$(cache_some_div).bind('click', function(evt){
$(cache_another_div).text("OMG U CLIKT TEH BUTTON!!11")
})
|
|
12.03.2009, 19:40
|
Профессор
|
|
Регистрация: 18.04.2008
Сообщений: 152
|
|
Так и делаю.
А зачем $(cache_some_div), ведь cache_some_div уже jQuery-обьект?
|
|
12.03.2009, 19:49
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
ну, дык для красоты-же))))
насколько я помню если передатьв $() объект jQuery, то оно его и вернет.
короче говоря тавтология.
|
|
12.03.2009, 20:32
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
А я думал не существует пользователей jQuery, задающихся этим вопросом
|
|
12.03.2009, 21:33
|
Профессор
|
|
Регистрация: 25.02.2008
Сообщений: 707
|
|
hogart, код же открыт (я бегло посмотрел версию 1.3.2). Посмотрите jQuery.fn.init (строка 36): объект именно этого конструктора создаётся каждый раз по вызову функции $ (т.е. в любом случае, $ - возвращает всегда новый объект jQuery, поэтому даже $('some') != $('some')).
Касаемо же кеширования DOM-объектов - я не увидел (но, повторю - просмотрел код бегло). Например, в строке 61 видно, что .getElementById вызывается каждый раз (для $('#someId')).
В строке 41 видно, что, если передан DOM-объект, он возвращается сразу (вернее, возвращается новый объект jQuery, в который обёрнут DOM-объект).
Все остальные селекторы обрабатываются функцией .find; причём, забавно (см. строку 78) - заново запускается эта же функция - $, и снова создаётся новый объект, и затем уже вызывается её метод .find =)
Последний раз редактировалось Dmitry A. Soshnikov, 13.03.2009 в 12:19.
|
|
13.03.2009, 12:46
|
Профессор
|
|
Регистрация: 18.04.2008
Сообщений: 152
|
|
Gvozd, какая ж тут красота…
Kolyaj, а почему нет?
Dmitry A. Soshnikov, спасибо.
Честно говоря, когда задавал этот вопрос, ужасно не хотелось копаться еще и в чужом коде — думал, может, кто-то знает уже.
Так что спасибо за изыскания
|
|
13.03.2009, 12:56
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
Сообщение от hogart
|
Gvozd, какая ж тут красота…
|
ну, значит глупость сделал)))
Сообщение от hogart
|
Kolyaj, а почему нет?
|
попробую выразить свое мнение(не факт, что оно совпадает с мнением Kolyaj)
Принято считать,что большинство людей пишущих с использованием фреймворков понятия не имеют что творится в самом фреймворке, и как можно реализовать ту же задачу без фреймворка.как некое логическое следствие мало кто из них задумывается над оптимизацией кода, до того момента "как приспичит".как правило код, полученный у этому моменту проще выкмнуть чем исправить, так как в нем могут использоватся поистине ужасные конструкции, которые изначльно надо было писть нормально, а не потом.
PS исключение из этого правила есть.вы на верном пути.научитесь не боятся копания в чужом коде(если он качественный, там много интересного может быть)
|
|
|
|