Tôi có bộ hẹn giờ đếm ngược mỗi giây. Nó hoạt động tuyệt vời cho đến khi người dùng mở ra 3 hoặc 4 tab của trang web của tôi, tại thời điểm đó, bộ đếm thời gian của tab mới nhất tăng gấp đôi hoặc gấp ba lần. Hiện tại tôi chỉ có thể tạo lại lỗi trong IE8. Trước đây tôi đã sử dụng setInterval và có thể tạo lại lỗi trong Firefox.Tại sao tốc độ setTimeout của tôi tăng tốc khi tôi có nhiều tab mở cho trang web của mình?
Tôi thực sự đang sử dụng FBJS (Javascript của Facebook), vì vậy tôi sẽ chỉ cung cấp một số mã giả.
function countDown() {
...
setTimeout(function() { countDown() }, 1000);
}
countDown();
Tuy nhiên, điều tôi thực sự tìm kiếm là lý thuyết hơn. Tôi biết các trình duyệt có thể thử và chơi "bắt kịp" với setInterval, nhưng làm thế nào nhiều tab có thể gây ra hành vi này cho setTimeout?
Wow, cho các chức năng tên ngẫu nhiên đã làm các trick! Làm thế nào có thể javascript trong các cửa sổ khác nhau có thể ảnh hưởng lẫn nhau? – lamplighter
Kỳ lạ, phải không? Tôi đoán nó phải là một cái gì đó như tôi đã nói, "làm mịn" mã một nơi nào đó trong ruột của trình duyệt xác định chức năng chỉ theo tên (tốt, có lẽ bởi trang web + tên) và không phân biệt giữa các tab khác nhau/cửa sổ. Có thể đáng giá một báo cáo lỗi ở đâu đó, thực sự. – chaos
Đây có thể là giải pháp thay thế không có PHP: http://stackoverflow.com/questions/6112671/settimeout-speeds-up-with-multiple-tabs/6112864#6112864 – namuol