このようなWebページがあります(簡略化された例)
<table id="events_results_table">
<thead>
<tr>
<th class="header">Title One</th>
<th class="header">Title Two</th>
</tr>
</thead>
<thead>
<tr>
<td><input id="search" type="text" /></td>
</tr>
</thead>
<tbody>
<tr>
<td>value 1</td>
<td>...</td>
</tr>
<tr>
<td>value 2</td>
<td>...</td>
</tr>
</tbody>
</table>
そのページには、次のようなJavaScriptもあります
$("#search").keyup(function(event){
var theText = $('#search').val();
$('#events_results_table tbody tr td').closest('tr').hide();
$('#events_results_table tbody tr td:contains("'+theText+'")').closest('tr').show();
});
これは基本的なテキスト フィルターを実装します。ユーザーが検索フィールドに文字を入力すると、一致しない行が非表示になり、一致する行が表示されます。簡単なテーブル検索。
問題は、この単純な実装では、テーブルに数百行ある場合にパフォーマンスのボトルネックが発生することです。行が常にキーボードに応答するとは限らないか、テーブルが追いつくまでキーボードの入力がブロックされます。
この種の機能をパフォーマンスの高い方法で実装するための「既知の科学」はありますか? 私は自分でいくつかの異なるアプローチを考えることができますが、始める前に既に解決された問題を再発明していないことを確認したかった.