Инструменты и методы кэширования Javascript
У меня есть требование, где я хочу пройти через все элементы управления DropDown (выбрать) на странице. Я выбираю все элементы управления DropDown, используя:
var DropDowns = document.getElementByTagName('select');
Я перебираю эти DropDowns для программной установки нескольких элементов управления:
for (i=0; i<= DropDowns.Length; i++)
{
var CurrentControl = DropDowns[i];
CurrentControl.options[CurrentControl.selectedIndex].value = 1;
}
Есть ли какой-либо фреймворк Javascript, который поддерживает кэширование? Я хочу кэшировать все имена элементов управления DropDown и циклически проходить через кэшированные имена вместо прямой циклической обработки объекта Document.
Есть ли какие-то хитрости для увеличения производительности цикла?
4 ответа
Я не думаю, что вы увидите огромные улучшения в производительности для цикла, который повторяет только 30-40 элементов, но некоторые браузеры получат огромный прирост скорости от циклического перемещения по массиву вместо NodeList
или же HTMLCollection
как это называется в некоторых браузерах, которые реализуют DOM уровня 1.
Итак, чтобы ответить на ваш вопрос, вы можете "кэшировать" объекты и т. Д. В массиве, и это должно ускорить этот цикл для будущих итераций.
Имейте в виду, что вам нужно поддерживать этот массив в актуальном состоянии, потому что он не "живой", как DOM.
Я думаю, вы уже делаете это гораздо эффективнее, чем описывают некоторые ответы. Имейте в виду, что вы не зацикливаетесь на документе, вы зацикливаетесь на кэше NodeList
из DropDowns
, Если вы хотите изменить каждый из этих элементов, то вам неизбежно потребуется пройтись по ним, чтобы изменить их по отдельности.
В jquery это будет выглядеть примерно так:
var $menus = $('select');
$.each($menus, function(index, menu) {
// Do whatever you want to the menu here
};
Я предлагаю другой подход - сохраните параметры в скрытом поле со значениями, разделенными запятыми, и при загрузке страницы установите значения элемента управления, анализируя разделенные значения.