2015-12-02 20 views
10

Aureliaを使用して大規模なデータテーブルをレンダリングすると、パフォーマンスが低下します。Aureliaで大規模なデータテーブルを効率的にレンダリングする

中規模サイズのテーブル(20x20)の場合でも、Chromeの場合は200ms未満にはならないので、MS Edgeは約800ms、IE11は約2sかかります。 (仮想)スクロールを追加したい場合は、200msも問題になります。処理時間は、表セルあたりのバインディング数とともに増加します。私は、 'css'、 'class'、そしてもちろんセルの内容をバインドする(example)をまとめました。

<table class="table"> 
    <tbody> 
    <tr repeat.for="row of rows"> 
     <td repeat.for="column of columns" css.bind="getCellStyle(column, $parent.$first)" class.bind="getCellClasses(column, row)"> 
     <template replaceable part="cell-template"> 
      <span>${getCellText(column, row)}</span> 
     </template> 
     </td> 
    </tr> 
    </tbody> 
</table> 

どのようにパフォーマンスを向上させることができますか?

最初の提案に基づいて、ネストされたリピートを避けようとしましたが、私の場合、列と行の両方が動的なので、これは不可能です。

+0

[ui-virtualization](http://aurelia.io/ui-virtualization)? –

+0

目に見える表のセルをレンダリングするための最適化に関する質問がありました。目に見えない行がたくさんある場合、Aurelia UI仮想化が役立ちます。 – reinholdk

+0

ohhhhhhhhhhh ... –

答えて

9

大きな質問ですが、これは最近注目されています。

最初に、大量のデータが含まれている場合は、繰り返しのネストは避けてください。このシナリオでは、このシナリオではテンプレートを展開することでパフォーマンスが大幅に向上しますが、まだリリースする準備はできていません。

第2に、可能な限り、一度限りのバインディングを使用してください。これにより、プロパティーの観測と配列の突然変異の観察オーバーヘッドがなくなります。

<table class="table"> 
    <tbody> 
    <tr repeat.for="row of rows & oneTime"> 
     <td repeat.for="column of columns & oneTime" css.one-time="getCellStyle(column, $parent.$first)" class.one-time="getCellClasses(column, row)"> 
     <span>${getCellText(column, row) & oneTime}</span> 
     </td> 
    </tr> 
    </tbody> 
</table> 

2015年12月13日EDIT

、今後のリリースでも半分以下に大きなグリッドのレンダリング時間をカットしたりします2つの変更を持っています。変更の1つは一方向バインディング(これまでに最も一般的に使用されているバインディングモード)の効率を向上させ、もう一方は初期レンダリングが完了するまでバインディング作業を延期します。これにより、oneTimeoneWayを初期レンダリングと同じように高速に使用できます。ここではこれらの改善の詳細情報:ここhttp://blog.durandal.io/2015/12/04/aurelia-repaint-performance-rules/

デモ:述べたようにhttp://jdanyow.github.io/aurelia-dbmonster/

+0

ありがとうございました。ただし、oneTimeを使用すると、データセット(列)が変更されたときにテーブルが再描画されなくなります。ビューの再描画をどのようにトリガーしますか?あなたの偉大なブログの "シグナル"バインディングの動作についてお読みください:http://www.danyow.net/aurelia-binding-behaviors/ここで役立つかもしれませんが、シグナルは上記のパフォーマンス修正の恩恵を受けていないようです。 – reinholdk

+0

whoa、繰り返し表現に「&oneTime」と書かれているのはどこですか?かなり元気。 –

-2

ちょうど1にあなたの配列を兼ね備えています。

+2

これは質問に対する答えを提供しません。批評をしたり、著者の説明を求めるには、投稿の下にコメントを残してください。 - [レビューより](/レビュー/低品質の投稿/ 10428922) –

+0

@MikeB Imそれは直接彼の質問に直接答えることを確かめてください。それは文字通り何をすべきか正確に彼に伝えます。 –

+0

フィードバックのおかげでありがたいですが、私は提供された回答がここに記載されているガイドラインに満たないと感じます:http://stackoverflow.com/help/how-to-answer –

関連する問題