2009-07-21 10 views
6

मेरे पास एक टाइमर है जो हर सेकेंड की गणना करता है। जब तक उपयोगकर्ता मेरी साइट के 3 या 4 टैब खोलता है तब तक यह बहुत अच्छा काम करता है, जिस बिंदु पर नवीनतम टैब का टाइमर डबल या ट्रिपल स्पीड चला जाता है। मैं वर्तमान में केवल IE8 में बग को पुन: पेश कर सकता हूं। मैं पहले setInterval का उपयोग कर रहा था, और फ़ायरफ़ॉक्स में भी बग को पुन: उत्पन्न कर सकता था।मेरे सेटटाइमआउट की गति क्यों बढ़ती है जब मेरे साइट पर एकाधिक टैब खुलते हैं?

मैं वास्तव में एफबीजेएस (फेसबुक की जावास्क्रिप्ट) का उपयोग कर रहा हूं, इसलिए मैं कुछ छद्म कोड दे दूंगा।

function countDown() { 
    ... 
    setTimeout(function() { countDown() }, 1000);  
} 

countDown(); 

हालांकि, क्या मैं वास्तव में तलाश कर रहा हूँ अधिक सैद्धांतिक है। मुझे पता है कि ब्राउज़र सेट इंटरवल के साथ "पकड़ो" को आजमा सकते हैं और खेल सकते हैं, लेकिन एकाधिक टैब सेटटाइमआउट के लिए इस व्यवहार का कारण कैसे बना सकते हैं?

उत्तर

5

वह पूरी स्थिति बहुत विषम है। एकमात्र परिदृश्य जो दिमाग में आ रहा है, जहां यह कोई समझ में आता है वह एक ऐसा स्थान है जहां ब्राउज़र स्वयं-पुनर्स्थापना सेटटाइमआउट की अवधि को "चिकनी" करने की कोशिश कर रहा है, जैसा कि सेट इंटरवल के लिए है, और वह कोड जो वास्तव में अलग-अलग विंडो में टाइमर को भ्रमित करता है अन्य।

मैं अगर यह संभव है पता नहीं, फेसबुक शामिल विशेष रूप से के साथ, लेकिन एक दिलचस्प परीक्षण countDown समारोह के लिए प्रत्येक उदाहरण के एक यादृच्छिक नाम देने और देखें कि क्या इस तरह, किसी भी फर्क नहीं पड़ता होगा:

<?php $timerTag = rand(1, 1000); ?> 
function countDown<?php echo $timerTag ?>() { 
    ... 
    setTimeout(function() { countDown<? php echo $timerTag ?>() }, 1000);  
} 

countDown<?php echo $timerTag ?>(); 

यदि यह देखा गया व्यवहार बदलता है, जो उस परिदृश्य के लिए तर्क देता है जो मुझे दिमाग में है। (और संभवतः समस्या को हल करने का एक तरीका प्रदान करता है।)

+0

वाह, कार्यों को यादृच्छिक नाम देने से चाल चल रही है! यह कैसे संभव है कि विभिन्न विंडो में जावास्क्रिप्ट एक-दूसरे को प्रभावित कर सके? – lamplighter

+1

विचित्र, है ना? मुझे लगता है कि यह कुछ ऐसा होना चाहिए जैसा कि मैं कह रहा था, ब्राउजर के गलतियों में कहीं भी "चिकनाई" कोड केवल नाम से (अच्छी तरह से, शायद साइट + नाम से) और अलग-अलग टैब/विंडो के बीच अंतर नहीं कर रहा है। वास्तव में कहीं भी एक बग रिपोर्ट लायक हो सकता है। – chaos

+0

यह PHP के बिना वैकल्पिक समाधान हो सकता है: http://stackoverflow.com/questions/6112671/settimeout-speeds-up-with-multiple-tabs/6112864#6112864 – namuol

संबंधित मुद्दे