2012-09-15 6 views
7

に大量の要素を追加すると、膨大な量のデータを取得し、データ(約800行、10列のテーブル)を作成する必要があります
いつ、 append()メソッドを通じて、ブラウザはしばらく応答しません。

巨大なデータにアクセスするために、私はajax呼び出しのためにWebワーカーを使用しています。
ウェブワーカーからDOMを操作することはできません。どうすればいいですか?
感謝:)私のWebアプリケーションでDOM

編集
私はそれ以上の非表示のようないくつかの関数()(jQueryの非表示)をしたい場合は、作業をinnerHTMLのでしょう?

+0

どのような形式でのデータである場合には? JSON?その場合は、JavaScriptテンプレートエンジン(例:Handlebars)を使用してHTML文字列全体を作成し、その文字列をDOMに一度に追加することをおすすめします。 –

+0

これを確認してください(http://stackoverflow.com/questions/429174/posest-to-add-large-amount-of-dom-nodes-with-browser-choking) –

+0

あなたはDocumentFragmentを作成し、それを一度追加します。私は、ブラウザがフラグメントの作成中にブロックする必要があるとは思わない。 – jimp

答えて

1

いくつかのJavaScriptテンプレートエンジンを使用して、手動で要素を追加したり、innerHTML文字列を作成したりすることを避けることができます。

たとえば、http://ejohn.org/blog/javascript-micro-templating

<script type="text/html" id="user_rows_tpl"> 
    <% for(var y = 0, l = users.length; l > y; y++) { %> 
     <tr id="user-row-<%=y%>"> 
      <td><%=users[y].name%></td> 
      <td><%=users[y].surname%></td> 
      <td><%=users[y].age%></td>  
     </tr> 
    <% } %> 
</script>​ 

そしてあなたがオブジェクトをレンダリングするためにあなたのはJavaScriptでこのテンプレートを使用している:テスト用

<script type="text/javascript"> 
    var table = document.getElementById("userTable"); 
    table.innerHTML = tmpl("user_rows_tpl", { 
     users: getUsers() 
    }); 
</script> 

は、あなたがどこかHTMLでテンプレートを持っていると言います私は1000のユーザーオブジェクトを作成し、それらをテーブルにレンダリングしました。
平均レンダリング時間は、Google Chromeでは約20〜25msです。それは悪くないのですか?

DEMO

1

JavaScriptでDOM要素にアクセスするのが遅いため、応答性の高いページが表示されます。

あなたは

var buffer = []; 
setInterval(function(){ $("#div").html(buffer.join(""); buffer = []; }, 1000); 

buffer.push("html"); 
buffer.push("html"); 

ことによってこれを行うとBest Practices for Speeding Up Your Web Site

1
あなたはDOM要素の怠惰な挿入をサポートしているテーブルのプラグインを使用する場合があります

(このlink for the performance

も、このリンクをチェックチェックすることができますすなわちオンデマンドで)。 DataTablesは、豊富な機能、including this oneを提供します。また、書かなければならないコードのサイズを減らすのに役立ちます。

+0

ドム要素の怠惰な挿入を行う方法を私に説明できますか? thanx :) – Navaneeth

関連する問題