私のクライアントは、自分が持っている静的 xml ファイルにエントリの検索フォームを作成したいと考えていますが、サーバー側のテクノロジは使用したくありません。彼は、ブラウザで JavaScript を使用するだけにしたいと考えています。私が持っているものは機能しますが、一致するエントリがたくさんあるものを検索すると、ブラウザが少しロックされます。どうすればこれを防ぐことができますか? ここに私が持っているものがあります:
$(function(){
var root, searchEvent = setTimeout(function(){}, 0);
$.get('allitems.xml', function(xml){
root = $(xml);
});
$('#search-field').on('keyup', function(e){
clearTimeout(searchEvent);
searchEvent = setTimeout($.proxy(function(){search($(this).val());}, this), 500);
});
function search(q){
var results = 0;
$('#searchResults').empty();
root.find('Beskrivning').each(function(i, el){
/*if(results > 9)
return false;*/
el = $(el);
if(el.text().toLowerCase().indexOf(q) != -1){
addToResults(el.parent());
results++;
}
});
}
function addToResults(node){
var div = $('<a>').attr(
'href',
'http://www.pn-trading.se/Objekt/tabid/125/' +
(node.find('ID').text()) +
'/123055/auktion/' +
(node.find('paplatsnamn').text()) +
'/Default.aspx?tabselect=' +
(node.find('paplatsnamn').text())
)
.attr('target', '_blank')
.addClass('sr-item')
.append(
$('<div>').addClass('sr-item-image').append(
$('<img>').attr(
'src',
'http://www.pn-trading.se/Portals/0/' +
(node.find('katalog').text()) +
'/' + (node.find('bildnr').text()) + '-200.jpg'
)
),
$('<div>').addClass('sr-item-details').append($('<div>').html(node.find('Beskrivning').text()))
);
$('#searchResults').append(div);
}
});
基本的には、xml ファイルを取得してキャッシュし、keyup
イベントで xml ファイルを検索します。パフォーマンスを向上させるためのヒントはありますか? 検索する前に少なくとも 2 ~ 3 文字、さらにはページネーションを要求できることはわかっていますが、可能であれば、これらのオプションは避けたいと思います。
また、>= IE7 を含むすべての標準ブラウザで動作する必要があります。