Циклы, особенно те, в которых вы взаимодействуете с DOM, обычно могут привести к снижению производительности в старых браузерах. Вы можете помочь в решении вопросов, гарантируя, что ваши селекторы будут более оптимизированы, как предполагает Non-Stop Time Travel. Вместо того, чтобы повторять $(this)
снова и снова, кэшируйте элемент в переменной:
var $this = $(this);
Кроме того, как правило, вы можете значительно повысить производительность, используя обычный цикл for, в отличие от метода $.each()
jQuery:
function filterAvailable () {
var filterText = 'ca';
var items = $('.ms-container .ms-selectable li');
var $currentItem;
var a_val;
var a_txt;
for (var i = 0, j = items.length; i < j; i++) {
$currentItem = $(items[i]); // in place of $(this)
// Contents of $.each() loop here
}
}
Множество тестов для поддержки этого на jsPerf: http://jsperf.com/jquery-each-vs-for-loop/186
Важно помнить, что любое взаимодействие с DOM, включая поиск, происходит медленно. Это особенно верно, когда на вашей странице много разметки. Вы можете ускорить процесс, используя идентификаторы, кэшируя селекторы, минимизируя взаимодействие с DOM и используя регулярные циклы for. Вот отличная сводка от Николая Закаса:
http://jonraasch.com/blog/10-javascript-performance-boosting-tips-from-nicholas-zakas