tôi sẽ mương "mỗi" chức năng trong lợi của một vòng lặp for vì nó là nhanh hơn. Tôi cũng sẽ thêm một số chờ đợi bằng cách sử dụng "setTimeout" nhưng chỉ mỗi lần như vậy thường xuyên và chỉ khi cần thiết. Bạn không muốn chờ 5ms mỗi lần vì sau đó xử lý 3500 bản ghi sẽ mất khoảng 17,5 giây.
Dưới đây là một ví dụ sử dụng vòng lặp for xử lý 100 bản ghi (bạn có thể tinh chỉnh điều đó) ở khoảng thời gian 5 mili giây, cho phép chi phí 175 ms.
var xmlElements = $(xmlDoc).find('Object');
var length = xmlElements.length;
var index = 0;
var process = function() {
for (; index < length; index++) {
var toProcess = xmlElements[index];
// Perform xml processing
if (index + 1 < length && index % 100 == 0) {
setTimeout(process, 5);
}
}
};
process();
Tôi cũng sẽ đánh giá các phần khác nhau của quá trình xử lý xml để xem liệu có một nút cổ chai ở đâu đó có thể được khắc phục hay không. Bạn có thể chuẩn trong firefox bằng cách sử dụng trình tạo hồ sơ của firebug và bằng cách viết ra bảng điều khiển như sau:
// start benchmark
var t = new Date();
// some xml processing
console.log("Time to process: " + new Date() - t + "ms");
Hy vọng điều này sẽ hữu ích.
Nhận một ngôn ngữ nhanh hơn! Không, thực sự: trừ khi nó hoàn toàn cần thiết, không sử dụng JS cho điều này - như bạn thấy, nó là 1) đơn luồng và 2) chậm. – Piskvor
Đây là một chức năng phía máy khách, và JS là cần thiết. –
@Triptych - Và các lựa chọn của anh ấy là gì? Chắc chắn người ta hy vọng rằng việc nâng hạng nặng như thế này có thể được thực hiện ở phía máy chủ, nhưng vì chúng ta không biết tình hình của anh ta tốt nhất nên cho rằng anh ta có lý do chính đáng để thực hiện nó, và khi làm việc với ứng dụng web , bạn chỉ thực sự có một sự lựa chọn giữa Javascript và, cũng ... Javascript. – Toji