Tôi có một số mã javascript/jquery (cho một trang web nội bộ) mà có rất nhiều xử lý phía khách hàng trên một bảng lớn. Nó chạy chậm một chút, nhưng đó là OK.Làm thế nào để cho javascript "hơi thở"
Vấn đề là nó đóng băng trình duyệt trong khi chạy qua các vòng mà nó cần thực hiện. Điều này có hai hiệu ứng không mong muốn:
- Trình xử lý spinner (ảnh động gif, nhưng tôi cũng cố spin.js và có cùng sự cố) bị treo.
- Nếu có đủ hàng trong bảng, các vòng mất nhiều thời gian và trình duyệt báo cáo một kịch bản không đáp ứng
Có cách nào tôi có thể có một số loại của một "hơi thở" tuyên bố trong các mã, sao cho mỗi (nói) 100 lần lặp lại, nó tạm dừng để cho phép quay quay và trình duyệt biết rằng tập lệnh vẫn đang hoạt động trên đó? Giống như (pseudo code):
for (i=0;i<20000;i++)
{
fnProcessRow();
if (i % 100 == 0) breath();
}
Bạn có thể đăng mã thích hợp mà bạn gặp sự cố về hiệu suất không? Có lẽ điều đó có thể được tối ưu hóa trước tiên trước khi xem xét các cấu trúc "chờ đợi" nhân tạo khác –
Có, nhưng chỉ khi bạn đang sử dụng một chức năng tự thực thi thay vì một vòng lặp for. Bạn cũng có thể di chuyển điều này đến một webworker trong các trình duyệt hỗ trợ nó. –
có thể thực hiện bất kỳ thao tác nào trên máy chủ để làm giảm tải trên giao diện người dùng không? – Evan