2009-09-19 4 views
11

मेरे पास एक सीपीयू गहन काम है और मैं उपयोगकर्ता अनुभव को अपनाना नहीं चाहता हूं। चूंकि वेब श्रमिक (http://ejohn.org/blog/web-workers/) एक नई सुविधा हैं और सभी ब्राउज़रों द्वारा समर्थित नहीं हैं, मैंने एक HTML + JS के साथ एक आईफ्रेम खोलने का विचार किया है जो सभी गंदे काम करेगा और परिणाम पारित करने के लिए कुछ क्रॉस-डोमेन संचार का उपयोग करेगा। दुर्भाग्यवश मैंने देखा कि आईफ्रेम का मालिक आईफ्रेम विंडो के सीपीयू काम से पीड़ित है।क्या iframe मालिक के समान धागे पर चलता है?

क्या यह व्यवहार डिज़ाइन किया गया है? क्या इसे हल करने का कोई तरीका है?

उत्तर

8

बहु-थ्रेडेडियंस अनुकरण करने का एक तरीका होगा जावास्क्रिप्ट फ़ंक्शन थोड़ा सा काम करेगा, फिर उसी कार्य के साथ setTimeout पर कॉल करें; तो फ़ंक्शन थोड़ा काम करेगा और setTimeout को फिर से कॉल करेगा, और यह चक्र हमेशा के लिए जारी रहेगा या जब तक कि वे फ्रेम बंद न करें या आप काम करना बंद कर दें। MDN has a good example of how to set this up.

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

+6

w3schools संवाद नहीं कर सकता! = W3C –

+0

16ms स्क्रीन रिफ्रेश है, मैं सलाह देते हैं। – Fresheyeball

4

जावास्क्रिप्ट एकल-चलने वाला है। अलग-अलग टैब या विंडो ब्राउज़र के आधार पर अलग-अलग धागे या प्रक्रियाओं में चल सकती हैं, हालांकि आप इन विंडो के बीच संवाद नहीं कर सकते हैं, इसलिए जावास्क्रिप्ट में एक से अधिक धागे या प्रक्रिया का स्पष्ट रूप से उपयोग करने का कोई तरीका नहीं है।

यदि यह यूआई प्रतिक्रिया का सवाल है, तो रशकॉफ़ का अच्छा जवाब है। जबकि जावास्क्रिप्ट चल रहा है, कोई HTML प्रतिपादन नहीं होता है और यूआई उत्तरदायी नहीं है। टाइमआउट का उपयोग करके, समय-समय पर प्रतिपादन/यूआई-थ्रेड पर नियंत्रण जारी किया जा सकता है, और अधिक प्रतिक्रियाशील अनुभव दे सकता है, भले ही यह अभी भी एकल-थ्रेडेड चलाए।

+5

> लेकिन आप इन खिड़कियों के बीच 'postMessage' –