2015-12-02 24 views
10

Tôi đang gặp khó khăn với hiệu suất khi hiển thị bảng dữ liệu lớn bằng Aurelia.Hiển thị bảng dữ liệu lớn hiệu quả với Aurelia

Ngay cả trong trường hợp bảng có kích thước vừa phải (20x20) Tôi không nhận được dưới 200ms cho Chrome, MS Edge mất ~ 800ms và IE11 mất ~ 2 giây. 200ms cũng là một vấn đề, nếu bạn muốn thêm (cuộn) ảo. Thời gian xử lý tăng lên với số lượng các ràng buộc trên mỗi ô của bảng. Tôi đã đặt cùng một (example) liên kết 'css', 'lớp', và tất nhiên nội dung ô.

<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> 

Bất kỳ ý tưởng nào về cách tôi có thể cải thiện hiệu suất?

Dựa trên các đề xuất ban đầu, tôi đã cố gắng tránh lặp lại lồng nhau nhưng điều này là không thể trong trường hợp của tôi vì cả hai cột và hàng đều là động.

+0

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

+0

Câu hỏi đặt ra là tối ưu hóa để hiển thị các ô bảng hiển thị. Aurelia ui-virtualization giúp, nếu có nhiều hàng vô hình. – reinholdk

+0

ohhhhhhhhhhh ... –

Trả lời

9

Câu hỏi hay, đây là điều chúng tôi đã tập trung nhiều vào thời gian gần đây.

Trước tiên, tránh lặp lại lồng khi có rất nhiều dữ liệu liên quan. Chúng tôi đang làm việc để cải thiện hiệu suất cho trường hợp này sẽ cải thiện hiệu suất hoàn hảo cho kịch bản này bằng cách bỏ mẫu nhưng chưa sẵn sàng để phát hành.

Thứ hai, sử dụng liên kết một lần bất cứ khi nào có thể. Điều này sẽ loại bỏ bất kỳ quan sát bất động sản và quan sát đột biến mảng trên cao.

<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> 

12/13/2015 EDIT

Việc phát hành sắp tới có hai sự thay đổi đó sẽ cắt giảm thời gian render lưới lớn trong nửa hoặc thậm chí ít hơn. Một trong những thay đổi này cải thiện hiệu quả của các ràng buộc một chiều (đến nay là chế độ liên kết thường được sử dụng nhất) và các thay đổi khác sẽ làm giảm một số công việc liên kết cho đến sau khi kết xuất ban đầu được thực hiện. Điều này sẽ làm cho việc sử dụng oneTimeoneWay cũng nhanh về mặt hiển thị ban đầu. Thông tin thêm về những cải tiến ở đây: http://blog.durandal.io/2015/12/04/aurelia-repaint-performance-rules/

Demo đây: http://jdanyow.github.io/aurelia-dbmonster/

+0

Cảm ơn, lloking về phía trước để thay đổi. Tuy nhiên, bằng cách sử dụng OneTime, bảng sẽ không còn vẽ lại khi tập dữ liệu (cột) thay đổi. Làm cách nào để kích hoạt vẽ lại chế độ xem? Chỉ cần đọc về hành vi ràng buộc "tín hiệu" trong blog tuyệt vời của bạn: http://www.danyow.net/aurelia-binding-behaviors/ có thể trợ giúp ở đây, nhưng tín hiệu dường như không được hưởng lợi từ sửa lỗi hiệu suất được đề cập ở trên. – reinholdk

+0

whoa, tài liệu "& oneTime" được ghi lại trong biểu thức lặp lại ở đâu? Khá tiện lợi. –

-2

Chỉ cần kết hợp các mảng của bạn thành một như đã đề cập.

+2

Điều này không cung cấp câu trả lời cho câu hỏi. Để phê bình hoặc yêu cầu làm rõ từ tác giả, hãy để lại nhận xét bên dưới bài đăng của họ. - [Từ đánh giá] (/ đánh giá/chất lượng thấp-bài viết/10428922) –

+0

@MikeB Im khá chắc chắn rằng nó trực tiếp trả lời câu hỏi của mình. nó nghĩa đen bảo anh ta chính xác phải làm gì. –

+0

cảm ơn phản hồi, nhưng tôi cảm thấy Câu trả lời được cung cấp không phù hợp với các nguyên tắc được đề cập ở đây: http://stackoverflow.com/help/how-to-answer –

Các vấn đề liên quan