2010-07-13 48 views
9

Gần đây tôi đã gặp phải một chút đau đớn. Tôi đã sử dụng hộp thoại JQuery Dialog để hiển thị một số màn hình cấu hình trong một ứng dụng web. Không có gì quá đặc biệt. Tuy nhiên tôi có một vài trường hợp cạnh mà hình thức cấu hình này sẽ hiển thị một thả xuống của một số ... 11.000 tùy chọn. [DODGES ROTTEN TOMATOES]Hộp thoại giao diện người dùng JQuery chậm

Không cần phải nói, nó chậm. Có thể mất tối đa 9 giây để Hộp thoại JQuery hiển thị (và init cũng chậm).

Câu hỏi đầu tiên là: Có cách nào tăng tốc hộp thoại không? Từ những gì nó có vẻ, nó sao chép tất cả các nội dung mỗi khi nó mở ra. Nếu có cách nào để tránh điều đó, nó sẽ giúp ích một chút.

Câu hỏi thứ hai: Có hộp thoại jQuery nào khác hoạt động tốt hơn khi được yêu cầu hiển thị lượng lớn dữ liệu không?

Và như mọi khi, các giải pháp khác được hoan nghênh. Một số ajax tự động hoàn thành sẽ không tệ, nhưng có lẽ vẫn còn chậm, trừ khi nó yêu cầu ít nhất một vài ký tự ban đầu.

+3

Người đàn ông, đó là danh sách thả xuống. Ngay cả khi bạn có thể giải quyết vấn đề kỹ thuật của bạn, tôi sẽ đề nghị sử dụng điều khiển khác nhau có thể lọc danh sách hoặc một số loại trình duyệt dữ liệu. Tùy thuộc vào nội dung dữ liệu. – Tx3

Trả lời

1

Được quản lý để cải thiện hiệu suất một chút. Tôi đi lạc từ giao diện người dùng JQuery và tạo ra một phiên bản nhẹ hơn nhiều. Thay vì sao chép nội dung của mục tiêu của tôi vào hộp thoại của tôi, tôi xây dựng hộp thoại của mình xung quanh nội dung.

Hiệu suất khôn ngoan, hộp thoại đi từ khoảng 10 giây để 2.

1

Làm thế nào về một lựa chọn với tất cả các chữ cái đầu tiên có thể nhận được thông qua AJAX tùy chọn duy nhất bắt đầu bằng chữ cái đó vào lựa chọn thứ hai?

1

2 giây âm thanh tốt hơn rất nhiều, nhưng có thể bạn sẽ thấy nó rất phụ thuộc nhiều vào trình duyệt người dùng và hệ thống cấu hình - nó có thể là tồi tệ hơn nhiều trên một hệ thống chậm hơn trong IE ...

Tôi sẽ cân nhắc việc sử dụng cái gì khác thay vì trình đơn thả xuống khổng lồ (chắc chắn không thân thiện với người dùng) - nó giống như một ứng cử viên tốt cho hộp tìm kiếm tự động hoàn thành hoặc có thể là các trình đơn thả xuống nhiều tầng.

Bạn cũng có thể tạo ra các hộp thoại khi tải trang, và chỉ mở khi cần thiết (thiết lập AutoOpen: false trong các tùy chọn)

1

Nếu bạn phải làm một danh sách thả xuống trong một hộp thoại như vậy, sau đó tôi đề nghị tải thông tin vào phong cách div ajax ẩn sau khi tải trang và sau đó hiển thị div ẩn đó trong bất kỳ hộp đèn/hộp thoại nào bạn đang sử dụng khi cần. Bằng cách đó, nội dung sẽ được tải trong khi người dùng đang làm những việc khác và hy vọng sẽ sẵn sàng vào thời điểm đó.

+0

Đó sẽ là một giải pháp tốt cho tải ban đầu. Mặc dù tải không bị ảnh hưởng quá khủng khiếp. Vấn đề xảy ra khi đã đến lúc IE hiển thị trình đơn thả xuống. Ban đầu div là vô hình và mọi thứ diễn ra tốt đẹp. Vấn đề lớn nhất là hộp thoại giao diện người dùng JQuery phải sao chép tất cả thông tin đó trong DOM để di chuyển nó vào các thùng chứa tùy chỉnh của nó. Nó cũng đã làm điều này mỗi khi hộp thoại được tải. Hộp thoại mới hiện kết thúc tốt hơn dữ liệu hiện có thay vì sao chép dữ liệu. Điều này dường như tăng tốc độ một chút. Đã đấu tranh với các washout trong suốt nhưng nó hoạt động tốt đủ bây giờ. –

+0

Vui vì nó hoạt động tốt hơn một chút. –

0

tùy thuộc vào html bạn đang sử dụng để hiển thị dữ liệu, tức là có thể siêu chậm so với chrome hoặc firefox.

đặc biệt là khi bạn đang hiển thị các bảng lớn. các liên kết này có thể hữu ích - thậm chí bạn có thể bỏ thêm một chút thời gian nữa.

http://jquery-howto.blogspot.com/2009/02/5-easy-tips-on-how-to-improve-code.html

http://www.artzstudio.com/2009/04/jquery-performance-rules/

2

Tôi đã gặp phải vấn đề này và tìm thấy giải pháp ở đây: http://forum.jquery.com/topic/select-in-dialog-causes-slowness-in-ie8

Chỉ cần phải thiết lập các hộp thoại draggableresizable tùy chọn để false.

+0

Tôi chỉ vấp phải câu trả lời của bạn trong khi đấu vật với cùng một vấn đề. Làm việc như người ở! –

+0

Wow, thật là một sự đồng tình kỳ lạ. Tôi gặp vấn đề này một lần nữa hơn một năm sau đó trên một hộp chạy IE 10 và thấy rằng có thể thay đổi kích thước và kéo được dường như không có tác động rõ rệt về sự chậm chạp. –

1

Cài đặt có thể kéo và thay đổi kích thước thành sai.

+0

Tôi có một vấn đề tương tự (nhưng không có trình đơn thả xuống khổng lồ) và cài đặt có thể kéo và thay đổi kích thước thành sai không hoạt động đối với tôi. –

0

Tôi vừa gặp sự cố này bằng hộp thoại được gắn thẻ với hàng trăm hộp kiểm. Tôi thấy this link rất hữu ích. Đã 17 tuổi để mở hộp thoại trước đây, nhưng giờ đã giảm xuống còn khoảng 1,3 giây. (Tôi đang sử dụng một hộp thoại resizeable không kéo)

Bí quyết là để tách html trước khi bạn mở hộp thoại, và sau đó sử dụng mở chức năng cho hộp thoại để lắp lại nội dung.

$('#triggerDialogFast').click(function() { 
    var $dialogContainer = $('#dialogContentFast'); 
    var $detachedChildren = $dialogContainer.children().detach(); 
    $dialogContainer.dialog({ 
     width: 425, 
     height: 400, 
     draggable: false, 
     resizable: false, 
     open: function() { 
      $detachedChildren.appendTo($dialogContainer); 
     }, 
    }); 
}); 

Tôi không chắc nhưng có lẽ nó sẽ làm việc chỉ bằng cách gắn các html trong mở chức năng nếu đó là có thể có trong kịch bản của bạn.

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