2013-12-18 14 views
16

Tôi đang tạo ứng dụng web sencha bằng cách sử dụng sencha touch 2.2.1. Trong ứng dụng của tôi, tôi có màn hình bao gồm một vùng chứa nơi tôi đã thêm nhiều bảng. Một bảng điều khiển bao gồm hai bảng, một bảng điều khiển trên cùng và bảng điều khiển bên trong.ứng dụng sencha chậm lại khi hiển thị trên chủ đề ui

Khi khởi tạo trang, tôi đang gọi ajax api để tìm nạp danh sách dữ liệu cho bảng trên cùng của mỗi mục trong vùng chứa. và trên bảng điều khiển hàng đầu được nhấp, tôi đang gọi api cho mục đó để tìm nạp dữ liệu cho bảng điều khiển bên trong. Khi kết thúc cuộc gọi api, tôi sẽ kết xuất dữ liệu vào bảng điều khiển bên trong và hiển thị bảng điều khiển đó. Mã này giống nhau cho tất cả các mục trong vùng chứa trên bảng điều khiển hàng đầu được nhấp.

Ngoài ra còn có một nút ở trên cùng để 'expandAll' sẽ gọi api cho tất cả các mục trong vòng lặp for one after one và hiển thị dữ liệu cho mỗi bảng điều khiển bên trong. Đầu tiên tôi gọi một api và sau đó nhận được phản hồi rằng tôi đang lưu trữ trong cửa hàng và hiển thị trên màn hình sau đó gọi api tiếp theo, như thế này cho tất cả các mục.

getDetailData:function(params){ 
    var detailStore=Ext.getStore('DetailData'); 

    detailStore.load({ 
     callback:function(data,opt,success) { 
      detailStore.storeDetailData(data); 
      _this.onShowDetailData(data); 

      // now call next api from here until all items data fetched and displayed 
     } 
    }); 
} 

Trong trường hợp này, tìm nạp tất cả dữ liệu mục và hiển thị trên chuỗi đang mất nhiều thời gian và ứng dụng sẽ chậm hơn.

Ngoài ra trong khi kết xuất dữ liệu, tôi phải áp dụng bộ lọc trên cửa hàng để lọc dữ liệu trước khi hiển thị dữ liệu cho mỗi lần.

Tôi muốn biết làm cách nào để xử lý và hiển thị này hoạt động. Khi gọi api ajax và tìm nạp dữ liệu từ máy chủ không mất nhiều thời gian hơn nhưng việc xử lý và hiển thị sẽ mất nhiều thời gian hơn.

Bất kỳ suggessions về vấn đề này,

nhờ

+0

Có bao nhiêu mục hoặc tổng số cuộc gọi API mà chúng ta đang nói đến ở đây? Các mẫu mục phức tạp như thế nào? – OhmzTech

+0

Tối thiểu 10 và tại các cuộc gọi tối đa 14 api mà chúng tôi đang thực hiện tại đây. Và mục mẫu là cấu trúc phức tạp, Một bảng có bố cục vbox và hai bảng trong đó, 1. Bảng điều khiển (layout = hbox), trong đó chúng tôi có 5 bảng và hai danh sách 2. Panel (layout = hbox) , trong đó chúng tôi có 6 danh sách và hai ô – nleshjinde

+0

Tôi đã giải quyết vấn đề hiển thị này. Đối với mọi thành phần sencha, sencha đang tạo thêm cấu trúc bởi chính nó. Trong ứng dụng của tôi, tôi đã sử dụng nhiều thành phần sencha hơn với các khung nhìn phức tạp và nhiều thành phần bên trong hơn. Vì vậy, bây giờ tôi đã sử dụng bảng điều khiển duy nhất và tôi đang tạo duy nhất html thay vì nhiều thành phần sencha và trực tiếp thiết lập văn bản HTML cuối cùng này thành bảng điều khiển như setHtml. Vì vậy, trong trường hợp này chúng tôi đang ghi đè cấu trúc sencha và hiển thị đơn giản đang xảy ra. – nleshjinde

Trả lời

1

Tôi sẽ suy nghĩ về tách tạo bảng điều khiển của bạn từ dân số dữ liệu của bạn. Tức là, tạo các bảng của bạn khi ứng dụng của bạn đang tải, sau đó khi bạn tạo XHR, bạn chỉ có thể đẩy dữ liệu vào các bảng và hiển thị chúng, thay vì chi phí của cuộc gọi AJAX, tạo bảng và hiển thị tiện ích cùng một lúc.

Bạn có thể thử để móng tay xuống vấn đề bằng cách profiling JavaScript với tab Profiles của Công cụ nhà phát triển Chrome hoặc với các công cụ bên ngoài như profiler Compuware của (Tôi sử dụng nó khi nó được dynaTrace):

http://www.compuware.com/en_us/application-performance-management/products/ajax-free-edition/overview.html

Tuy nhiên, từ kinh nghiệm của tôi, bạn có thể sẽ thấy rất nhiều thời gian thực hiện trong các phương pháp Sencha mà làm cho nó khó khăn để xem những gì thay đổi được yêu cầu.

Cuối cùng, các trình duyệt cũ hơn sẽ thực hiện việc hiển thị này chậm hơn nhiều so với các trình duyệt mới hơn. Nếu bạn có thể tránh hỗ trợ IE 6, 7 và 8 - ứng dụng Sencha của bạn sẽ phản hồi nhanh hơn nhiều!

1

Trước hết tôi sẽ làm hồ sơ như đề xuất ở trên. Bạn cần phải tìm hiểu thời gian các cuộc gọi API hoặc hiển thị bố cục chậm.

Theo kinh nghiệm của tôi, hầu hết các sự cố về hiệu suất đều đến từ cấu trúc DOM phức tạp. Sencha đang thêm số lượng lớn các DIV cho mỗi thành phần bạn thêm vào màn hình (chỉ cần kiểm tra nguồn kết quả). Điều này có ảnh hưởng đáng kể đến hiệu suất ứng dụng.

Nếu bạn thấy bố cục phức tạp của mình là nguyên nhân của sự cố về hiệu suất thì bạn có thể xem xét lại bố cục màn hình hoặc thay thế một số điều khiển sencha bằng HTML thuần túy vào tpl của vùng chứa.

+0

Vì anh ấy đang sử dụng Sencha Touch, có vẻ như nó sẽ là một ứng dụng di động đa nền tảng. Vì lý do bạn mô tả ở trên, tôi nghĩ rằng Sencha Touch đơn giản là không tốt như quảng cáo khi nói đến hiệu suất di động. Thay thế các thành phần Sencha cồng kềnh với HTML đơn giản, nếu có thể, chắc chắn là con đường để đi. – ashack

+0

Thông thường hiệu suất là ok trên màn hình thiết bị di động. Tuy nhiên, nếu ứng dụng của bạn sử dụng kích thước màn hình tăng của máy tính bảng thì vấn đề này sẽ xuất hiện. Màn hình lớn hơn -> nhiều điều khiển hơn -> hiệu suất hút. :) –

2

Tôi khuyên bạn không nên sử dụng bảng, trừ khi bạn cũng có. Với một số lượng lớn các mặt hàng, bạn sẽ tốt hơn với một số dataview list với infinite checked to true. Điều này sẽ hiển thị nhanh hơn nhiều và bạn có thể liên kết tương tác của mình với từng mục trên danh sách thay thế. Nếu bạn chỉ làm đánh dấu, nó sẽ làm cho nhanh hơn nhiều. Nếu không, mọi bổ sung sẽ yêu cầu bố cục.

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