2009-04-22 19 views
2

入力ボックスでテーブルをフィルタリングしたいと思います。それは動作しますが、私のターゲットプラットフォームであるスマートフォンでは低速です - Iphone、Htc Touch HD(800行はフィルタリングに約4秒かかります)。スマートフォンでJavaScriptをフィルタリングするテーブルの速度を改善するにはどうすればよいですか?

これをスピードアップできるかどうか教えてください。

function time(){ 
    var now = new Date(); 
    var time = now.getTime(); 

    return time 
} 

function filter (phrase, _id){ 
    var starttime = time(); 
    var words = phrase.value.toLowerCase().split(" "); 
    var table = document.getElementById(_id); 
    var ele = null; 
    var rows = new Array(); 
    for (var r=0 ; r < table.rows.length; r++){ 
     ele = table.rows[r].innerHTML.replace(/<[^>]+>/g,""); 
     var displayStyle = 'none'; 
     for (var i=0 ; i < words.length; i++) { 
      if (ele.toLowerCase().indexOf(words[i])!=-1){ 
       displayStyle = ''; 
      }else { 
       displayStyle = 'none'; 
       break; 
      } 
     } 
     rows[r] = displayStyle; 
    } 
    alert((time() - starttime)/1000 +" Sec"); 
    for(var k=0; k < rows.length; k++){ 
     table.rows[k].style.display = rows[k]; 
    } 
} 

答えて

2

パフォーマンスはプラットフォーム与えられ、やや合理的であるが、ここではいくつかのアイデアですのような音:

1)の反復のために、それぞれの間に、あなたの配列の長さを計算しないでください(https://developer.mozilla.org/en/A_re-introduction_to_JavaScript#Arraysを参照してください)

2)ではない各行の間に、一度始めに、検索文字列にあなたのtoLowerCaseメソッドを()を実行するには、

3)最大の豚がでチェックおそらく innerHTMLプロパティのANの使用d replace()は、ブラウザの実装に依存します。比較する必要があるセルからテキストを取得するより効率的な方法で置き換えることができるかどうかを確認してください。

+0

リンクのための+1(ただし、リンクする必要があります)、いくつかの良いヒント。 –

0

たとえば、Firebug profilerを使用してJavaScriptをプロファイルします。次に、どの操作が最も長くかかるかを見ることができます。測定は知っている。

関連する問題