2009-07-30 6 views
8

मैं innerHTML संपत्ति का उपयोग DIV गतिशील रूप से संशोधित करने के लिए कर रहा हूं, ताकि प्रक्रिया को रिपोर्ट करने के लिए कुछ सेकंड लग जाए। समस्या यह है कि फ़ायरफ़ॉक्स पर पृष्ठ को वास्तव में उस बदलाव को प्रतिबिंबित करने के लिए पुन: प्रस्तुत नहीं किया जाता है जब तक स्क्रिप्ट समाप्त नहीं हो जाती है। यह ऐप सुस्त महसूस करता है। क्या यह सुनिश्चित करने का कोई तरीका है कि HTML में परिवर्तन तुरंत दिखाई दें, भले ही अधिक स्क्रिप्ट चल रहे हों?मेरी स्क्रिप्ट कुछ भारी प्रसंस्करण कर रही है, जबकि मैं ब्राउज़र को फिर से चलाने के लिए कैसे मजबूर कर सकता हूं?

उत्तर

14

ब्राउज़र एकल धागा है। जबकि स्क्रिप्ट चल रही है, ब्राउज़र कुछ और नहीं कर सकता है। यदि आप प्रगति मीटर की तरह कुछ करना चाहते हैं, तो आपको setTimeout(), या setInterval() का उपयोग करना होगा, और अपने कार्य को अंतराल पर चलने वाले छोटे हिस्सों में विभाजित करना होगा। यह स्क्रिप्ट रन के बीच अंतराल छोड़ देता है, ब्राउज़र पर नियंत्रण देता है, जहां ब्राउज़र फिर से चला सकता है।

+0

ऐसा लगता है कि ब्राउज़र एकल धागा नहीं है। इसमें एक जावास्क्रिप्ट थ्रेड है लेकिन समानांतर धागा है जो पृष्ठ को प्रस्तुत करता है और डीओएम –

+0

में हेरफेर करता है जो वास्तव में उस * ब्राउज़र पर निर्भर करता है जिस पर आप बात कर रहे हैं। कुछ लोग अब ऐसा कर सकते हैं, जैसे कि क्रोम अपने मल्टीप्रोसेस मॉडल के साथ- जहां प्रत्येक ब्राउज़र की सामग्री एक अलग प्रक्रिया होती है, और क्रोम अपनी प्रक्रिया पर भी होता है। लेकिन आप अभी भी 'while (1) 'के साथ किसी भी ब्राउज़र को आसानी से लटका सकते हैं। आप कितने ब्राउज़र को लटकाते हैं इस पर निर्भर करता है कि ब्राउजर कैसे बनाया गया है। – Breton

+0

आप (1) {} के दौरान कॉल करके जेएस थ्रेड लटका सकते हैं, लेकिन इसका मतलब यह नहीं है कि डोम हेरफेर या सामग्री प्रतिपादन के लिए उपयोग किए जाने वाले कोई अन्य थ्रेड नहीं हैं। इसका मतलब है कि जेएस थ्रेड संभवतः अन्य धागे निष्पादन को अवरुद्ध कर सकता है। और धागे का ब्राउज़र के प्रोसेस मॉडल (प्रति पृष्ठ एक प्रक्रिया या पूरी ब्राउज़र विंडो के लिए एक प्रक्रिया) से कोई संबंध नहीं हो सकता है –

6

समय-समय पर अपनी स्क्रिप्ट को बाधित करने का प्रयास करें। आप

setTimeout(nextFunction, 0); 

उपयोग करने के लिए एक लंबे समय से देरी है, जहां nextFunction समारोह है कि आपके लंबा प्रसंस्करण के साथ जारी है बिना आवश्यक रुकावट प्रदान करने के लिए सक्षम होना चाहिए।

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

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