2010-06-12 44 views
9

Tôi biết cả hai ví dụ và firefox đều có giới hạn cho việc thực thi javascript (Source 1, Source 2). Dựa trên số lượng các câu lệnh được thực hiện, tôi nghe nói nó là 5 triệu ở đâu đó trong IE và dựa trên số giây trong firefox: nó là 10 giây theo mặc định cho phiên bản của tôi.Thời gian thực hiện tối đa cho JavaScript

Điều tôi không nhận được là những gì trường hợp sẽ đi qua những giới hạn này:

  1. Tôi chắc chắn một vòng khổng lồ sẽ đi vượt quá giới hạn cho thời gian thực hiện

  2. Nhưng sẽ là một sự kiện hander đi qua giới hạn, nếu chính nó là thời gian thực hiện là theo giới hạn nhưng nếu nó xảy ra nhiều lần?

Ví dụ:

phép nói rằng tôi có một bộ đếm thời gian trên trang của mình, mà thực hiện một số javascript mỗi 20 giây. Thời gian thực hiện cho trình xử lý hẹn giờ là 1 giây. Có firefox và tức là xử lý mỗi cuộc gọi của chức năng hẹn giờ seperatly, do đó, nó không bao giờ vượt quá giới hạn, hoặc là firefox/ie cho biết thêm thời gian của mỗi cuộc gọi như vậy sau khi xử lý kết thúc, vì vậy sau 200 giây trên trang web của tôi (với bộ đếm thời gian gọi là 10 lần) một lỗi xảy ra mặc dù bộ điều khiển bộ đếm thời gian chính nó chỉ dài 1 giây?

Trả lời

1

Trình xử lý sự kiện được coi là ngữ cảnh thực thi mới - giới hạn thời gian được đặt lại.

Nếu bạn cần thực hiện nhiều tính toán hơn, hãy xem WebWorkers.

+0

nhờ ok cho câu trả lời –

8

Bài viết sau đây bởi Nicholas C. Zakas thảo luận về cách thức và thời trình duyệt khác nhau ngắt dài chạy mã JavaScript:

Breaking mã xử lý dài thành nhiều phần nhỏ và tung chúng với giờ thực chất là một cách để giải quyết vấn đề này. sau bài Stack Overflow gợi ý một phương pháp để giải quyết vấn đề này:

Mặt khác, web workers sẽ là phù hợp hơn cho việc xử lý chạy dài, kể từ khi thực hiện của họ xảy ra trong một quá trình riêng biệt, và do đó không chặn thread UI:

Tuy nhiên nhân viên web không được hỗ trợ trong Internet Explorer nêu ra, và họ sẽ không có quyền truy cập vào DOM.

0

Tôi quá mắc kẹt trong loại lỗi JS này. Tôi cũng nhận được các giải pháp, tiếc là chỉ cho IE, mà nói để chỉnh sửa registry (lệnh regedit) và cập nhật số lượng các lệnh JS để cho phép. Đọc thêm tại đây http://support.microsoft.com/?kbid=175500.Tuy nhiên đây không phải là giải pháp tốt cho tôi nếu bạn đang phát triển một ứng dụng web, bạn không thể yêu cầu mọi người dùng chỉ sử dụng IE và cập nhật hệ thống đăng ký của mình.

Giải pháp thay thế: Nếu dữ liệu của bạn để xử lý ở cuối ứng dụng thực sự lớn thì bạn có thể đặt một số chậm trễ thủ công giữa bộ sửa lỗi xử lý sự kiện. Ví dụ: Nếu có 100 sự kiện của bất kỳ tác vụ nào bạn muốn xử lý thì bạn có thể chia chúng thành 10 bộ 100 và xử lý từng tác vụ trong 100ms. Để biết làm thế nào để làm điều đó theo bên dưới liên kết:

http://www.nczonline.net/blog/2009/01/13/speed-up-your-javascript-part-1/

+0

Các OP đã không thực sự yêu cầu "giải pháp" chỉ tự hỏi những gì xác định hành vi này trong mỗi trình duyệt. –

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