Dis*_*oat 13 javascript performance jquery
我有一个大约500个项目的HTML列表和上面的"过滤器"框.当我输入一个字母时,我开始使用jQuery过滤列表(稍后添加定时代码):
$('#filter').keyup( function() {
var jqStart = (new Date).getTime();
var search = $(this).val().toLowerCase();
var $list = $('ul.ablist > li');
$list.each( function() {
if ( $(this).text().toLowerCase().indexOf(search) === -1 )
$(this).hide();
else
$(this).show();
} );
console.log('Time: ' + ((new Date).getTime() - jqStart));
} );
Run Code Online (Sandbox Code Playgroud)
但是,在键入每个字母(特别是第一个字母)后有几秒钟的延迟.所以我认为如果我使用普通的Javascript(我最近读到jQuery的each
功能特别慢)可能会稍快一些.这是我的JS等价物:
document.getElementById('filter').addEventListener( 'keyup', function () {
var jsStart = (new Date).getTime();
var search = this.value.toLowerCase();
var list = document.querySelectorAll('ul.ablist > li');
for ( var i = 0; i < list.length; i++ )
{
if ( list[i].innerText.toLowerCase().indexOf(search) === -1 )
list[i].style.display = 'none';
else
list[i].style.display = 'block';
}
console.log('Time: ' + ((new Date).getTime() - jsStart));
}, false );
Run Code Online (Sandbox Code Playgroud)
然而令我惊讶的是,普通的Javascript 比jQuery等效的慢 10倍.jQuery版本需要大约2-3秒来过滤每个字母,而Javascript版本需要17秒以上!我在Ubuntu Linux上使用谷歌浏览器.
这不是真正重要的事情,因此它不需要超级高效.但是我在这里使用我的Javascript做一些非常愚蠢的事情吗?