Я пытаюсь увеличить производительность jQuery моего мобильного приложения html 5. Я прочитал несколько руководств о хранении используемых селекторов jquery в глобальных объектах. Приложение довольно большое, и я не ожидал большого повышения производительности, но приложение работало еще медленнее (например, 20%).Глобальное кеширование селектора JQuery для повышения производительности
Я использую только jquery для поиска элементов по идентификатору ($ ("# id") или $ _element.find ("# id")). Идентификаторы уникальны, поэтому меня интересует только поиск первого элемента. Мне удалось глобализовать все вызовы jquery в объекте cacheHandler, который хранит все селекторы по id. Кэш часто очищается и содержит около 30 элементов за цикл.
С этим изменяется приложение побежал медленнее, поэтому я попытался еще несколько вещей, чтобы увеличить производительность:
- кэша [ID] = $ (document.getElementById ("ID"))
- кэша [идентификатор ] = document.getElementById («ID»)
- магазин селекторы с хэш-код: кэш [id.hashCode()]
Я пришла в голову идея, что это решение является медленным, потому что память увеличивается часто, потому что весь дом со всеми его дочерними элементами хранится в кеше.
Так что я была новая идея, кэшировать путь элемента в виде массива, как
document.body.children [1] .children [5] .children [0] => [1,5,0 ]
Так что мне просто нужно найти элемент один раз, сохранить массив и посмотреть путь, если мне понадобится элемент снова.
Это ничего не меняет, и все идеи были еще медленнее, чем вызов $ ("# id"), когда мне нужен элемент.
При необходимости я могу предоставить более подробную информацию или фрагменты.
Я благодарен за каждое объяснение, почему это замедляет мое приложение.
Спасибо за ваш ответ и усилие. Я вижу, что неплохо начать кэшировать родителей и использовать jquery.find(), но это то, что я уже пробовал. Возможно, мне просто нужно написать и добавить тестовый пример jsperf. Я все еще не могу себе представить, почему каждый селектор или кеширование работает медленнее, чем прямой выбор элемента по его идентификатору ($ ("# id")). –
Да, это немного волосатое, потому что это зависит от того, как работает ваша разметка. Но если у вас проблемы с памятью и т. Д., Я бы рекомендовал попробовать разные версии; один, где вы кешируете некоторые вещи по всему миру, а другой - там, где нет. Затем используйте «Инструменты для разработчиков Chrome», чтобы проверить различия в использовании памяти и т. Д., Поскольку в основном это плохое управление памятью и плохая коллекция мусора, которая разрушает производительность. – Tommie