кэширование селекторов
Господа, а кто знает — кэширует ли новый движок jQuery полученные результаты?
Например, $('.some-div').bind('click', function(evt){ $('.another-div').text("OMG U CLIKT TEH BUTTON!!11") }) По каждому клику jQuery будет заново перерывать весь DOM в поисках .another-div, или где-то закэширует, а потом будет искать в кэше? |
рискую предположить, что не кеширует,ибо DOM может быть перерисован не зависимо от jQuery, и кеш будет неактуальным
не уверен, что получится, но попробуйте сами закешировать результаты, схранив результат получения коллекции в какую-нибудь переменную.по идее должно получится. |
Цитата:
Цитата:
Честно говоря, пишу на jQuery недавно, и код пока что выходит неизящный. Вот и подумалось — может, я что не так делаю:) |
я так подозреваю вы понимаете под изяществом более красивые конструкции, занимающие меньше символов и прочее?
я бы не стал за этим сильно гнатся. но в плане красоты можете попробовать как-то так(не верен,что сработает,но попробовать стоит) 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") }) |
Так и делаю.
А зачем $(cache_some_div), ведь cache_some_div уже jQuery-обьект?:) |
ну, дык для красоты-же))))
насколько я помню если передатьв $() объект jQuery, то оно его и вернет. короче говоря тавтология. |
А я думал не существует пользователей jQuery, задающихся этим вопросом :)
|
hogart, код же открыт ;) (я бегло посмотрел версию 1.3.2). Посмотрите jQuery.fn.init (строка 36): объект именно этого конструктора создаётся каждый раз по вызову функции $ (т.е. в любом случае, $ - возвращает всегда новый объект jQuery, поэтому даже $('some') != $('some')).
Касаемо же кеширования DOM-объектов - я не увидел (но, повторю - просмотрел код бегло). Например, в строке 61 видно, что .getElementById вызывается каждый раз (для $('#someId')). В строке 41 видно, что, если передан DOM-объект, он возвращается сразу (вернее, возвращается новый объект jQuery, в который обёрнут DOM-объект). Все остальные селекторы обрабатываются функцией .find; причём, забавно (см. строку 78) - заново запускается эта же функция - $, и снова создаётся новый объект, и затем уже вызывается её метод .find =) |
Gvozd, какая ж тут красота…
Kolyaj, а почему нет?:) Dmitry A. Soshnikov, спасибо. Честно говоря, когда задавал этот вопрос, ужасно не хотелось копаться еще и в чужом коде — думал, может, кто-то знает уже. Так что спасибо за изыскания:) |
Цитата:
Цитата:
Принято считать,что большинство людей пишущих с использованием фреймворков понятия не имеют что творится в самом фреймворке, и как можно реализовать ту же задачу без фреймворка.как некое логическое следствие мало кто из них задумывается над оптимизацией кода, до того момента "как приспичит".как правило код, полученный у этому моменту проще выкмнуть чем исправить, так как в нем могут использоватся поистине ужасные конструкции, которые изначльно надо было писть нормально, а не потом. PS исключение из этого правила есть.вы на верном пути.научитесь не боятся копания в чужом коде(если он качественный, там много интересного может быть) |
Часовой пояс GMT +3, время: 17:00. |