जोश ने (थोड़ी देर पहले) पूछा कि ब्राउज़र कैसे जानता है "जब ड्राइंग प्रक्रिया समाप्त हो जाती है" तो झिलमिलाहट से बचने के लिए। मैंने उनकी पोस्ट पर सीधे टिप्पणी की होगी, लेकिन मेरा प्रतिनिधि उच्च नहीं है। साथ ही यह सिर्फ मेरी राय है। मेरे पास इसे वापस करने के लिए तथ्य नहीं हैं, लेकिन मैं इसके बारे में काफी आश्वस्त महसूस करता हूं और भविष्य में इसे पढ़ने वाले अन्य लोगों के लिए यह उपयोगी हो सकता है।
मैं अनुमान लगा रहा हूं कि जब आप ड्राइंग कर रहे हैं तो ब्राउज़र को "पता नहीं" है। लेकिन अधिकांश जावास्क्रिप्ट की तरह, जब तक आपका कोड ब्राउज़र पर नियंत्रण के बिना चलता है, तब तक ब्राउज़र अनिवार्य रूप से लॉक हो जाता है और अपने UI पर अपडेट / प्रतिक्रिया नहीं दे सकता है। मैं अनुमान लगा रहा हूं कि यदि आप कैनवास को साफ करते हैं और ब्राउज़र पर नियंत्रण के बिना अपने पूरे फ्रेम को खींचते हैं, तो यह वास्तव में आपके कैनवास को तब तक नहीं खींचेगा जब तक आप इसे पूरा नहीं कर लेते।
यदि आप एक ऐसी स्थिति सेट करते हैं, जहाँ आपका रेंडर कई सेटटाइमआउट / सेट इन्टरवल / रिक्वेस्ट एनाइमेशनफ्रेम कॉल करता है, जहाँ आप एक कॉल में कैनवस को क्लियर करते हैं और अगले कई कॉल्स में अपने कैनवस पर एलिमेंट ड्रॉ करते हैं, तो हर 5 कॉल में साइकिल (उदाहरण के लिए) को दोहराते हैं प्रत्येक शर्त के बाद कैनवास अपडेट होने के बाद आप फ़्लिकर देखना चाहते हैं।
उस ने कहा, मुझे यकीन नहीं है कि मुझे भरोसा होगा। हम पहले से ही इस बिंदु पर हैं कि जावास्क्रिप्ट को निष्पादन से पहले देशी मशीन कोड में संकलित किया जाता है (कम से कम यही क्रोम का V8 इंजन जो मुझे समझ में आता है)। मुझे आश्चर्य नहीं होगा कि यह बहुत पहले नहीं था जब ब्राउज़र ने UI से एक अलग थ्रेड में अपनी जावास्क्रिप्ट को चलाना शुरू कर दिया था और किसी भी यूआई तत्वों को यूआई को अपडेट करने / प्रतिक्रिया करने के लिए यूआई को अपडेट करने की अनुमति देने वाले यूआई तत्वों को सिंक्रोनाइज़ करना शुरू कर दिया था। जब / अगर ऐसा होता है (और मैं समझता हूं कि कई बाधाएं हैं, जिन्हें दूर करना होगा, जैसे कि घटना संचालकों को किक मारते हुए जब आप अभी भी अन्य कोड चला रहे हैं), तो हम शायद कैनवास एनीमेशन पर झिलमिलाहट देखेंगे जो उपयोग नहीं कर रहे हैं किसी तरह का दोहरापन।
व्यक्तिगत रूप से, मुझे दो कैनवस तत्वों के विचार एक दूसरे के ऊपर तैनात हैं और बारी-बारी से जो प्रत्येक फ्रेम पर दिखाए / खींचे गए हैं। कोड की कुछ पंक्तियों के साथ एक मौजूदा अनुप्रयोग में बहुत आसानी से अनपेक्षित और शायद बहुत आसानी से जोड़ा गया।