IE中的jQuery非常慢
我写了一个代码来过滤元素列表。
HTML:
- France
- Canada
- Argentina
- Portugal
- France
- Canada
使用Javascript:
function filterAvailable() { var filterText = "ca"; // 0) { $(this).hide(); } else { if ($(this).text().toUpperCase().indexOf(filterText) >= 0) { $(this).show(); } else { $(this).hide(); } } });//each }//end
我在类’ms-selectable’中用大约500个
谢谢!
循环,特别是那些与DOM交互的循环,通常可能会在旧版浏览器中造成性能损失。 通过确保您的选择器更加优化,您可以提供帮助,因为不间断时间旅行建议。 而不是一遍又一遍地重复$(this)
,将元素缓存在变量中:
var $this = $(this);
此外,通过使用常规的“for”循环而不是jQuery的$.each()
方法,通常可以获得相当大的性能提升:
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交互(包括查找)都很慢。 当您的页面中包含大量标记时尤其如此。 您可以通过使用ID,缓存选择器,最小化DOM交互和使用常规for循环来加快速度。 以下是Nicholas Zakas的精彩综述: http : //jonraasch.com/blog/10-javascript-performance-boosting-tips-from-nicholas-zakas