Tôi có một sự kiện có thể tự cháy. Tôi cố gắng làm cho mã hiệu quả nhất có thể, nhưng nó có thể đạt tới mức tối đa trong một số trường hợp, điều đó nằm ngoài tầm kiểm soát của tôi. Nó không phải là một ngăn xếp vô hạn và nó sẽ kết thúc tại một số điểm, nhưng đôi khi nó có khả năng có thể bị rơi trước khi nó kết thúc vì giới hạn.Làm cách nào để tăng số lượng cuộc gọi tối đa trong Javascript?
Tôi có tăng số lượng ngăn xếp cuộc gọi nếu tôi thiết lập 2 trình xử lý sự kiện tương tự và chia mã không? Hoặc tôi có thể làm gì?
CẬP NHẬT: Đó là sự kiện thay đổi DOM (chỉ làm việc với Webkit, vì vậy không quan tâm đến các trình duyệt khác), điều này cũng có thể sửa đổi DOM dựa trên một số điều kiện. Tôi chưa thực sự đạt đến giới hạn đó, nhưng về mặt lý thuyết, nó có khả năng có thể. Tôi vẫn đang tối ưu hóa mã để thực hiện các thao tác DOM ít nhất có thể.
UPDATE 2: Tôi bao gồm mẫu (không có thật) ví dụ:
document.addEventListener('DOMSubtreeModified', function(event){
this.applyPolicy(event);
}, true);
function applyPolicy(event){
if(typeof event != "undefined"){
event.stopPropagation();
event.stopImmediatePropagation();
}
if(!isButtonAllowed){
$('button:not(:disabled)').each(function(){
$(this).attr('disabled', true);
});
}
}
Đây chỉ là một mẫu mã, nhưng ngay cả trong trường hợp này, nếu bạn có nói 100s của nút, cuộc gọi stack cũng sẽ ở độ tuổi 100. Lưu ý rằng nếu bạn sử dụng $('button').attr('disabled', true);
, điều này sẽ gây ra sự cố ngăn xếp cuộc gọi, vì jQuery sẽ cố gắng sửa đổi DOM vô hạn.
Có lẽ bạn nên chuyển đổi hàm đệ quy thành vòng lặp '' while''? Tôi không thể tưởng tượng rằng bạn cần tác dụng phụ của hàng trăm nghìn sự kiện kích hoạt sự kiện thực sự để kích hoạt một số chức năng khác ... –
Không bao giờ đạt đến giới hạn đó, nếu không phải khi mã hóa sai vòng lặp vô hạn. Hiển thị mã .. – gpasci
Câu trả lời ngắn gọn: không có cơ chế (tiêu chuẩn) nào để thực hiện việc này. Tùy chọn duy nhất sau đó, là thay đổi mã. –