2011-08-31 3 views
5

मैं एक भर्ती नौसिखिया जावास्क्रिप्ट प्रोग्रामर हूं और अधिक जानने का प्रयास कर रहा हूं। तो मैं इस आसान सवाल के साथ, मदद के लिए लोगों के लिए बदल जाता हूं :)। O'Reilly पुस्तक जो मैं पढ़ रहा हूं वह जावास्क्रिप्ट कोड के संकलन-समय का जिक्र करती है। कार्यात्मक प्रोग्रामिंग (योजना और पसंद) का मेरा ज्ञान मुझे बताता है कि जावास्क्रिप्ट वास्तव में ब्राउज़र द्वारा व्याख्या किया जाता है, संभवतः जावास्क्रिप्ट के माध्यम से दो पास की आवश्यकता होती है।क्या जावास्क्रिप्ट संकलित या दो-पास व्याख्या करता है?

क्या मैं अपने मूल्यांकन में गलत हूं? या संकलन-समय है कि पुस्तक वास्तव में सिर्फ दुभाषिया का पहला पास संदर्भित करती है, जैसे कि पर्ल या पायथन कैसे काम करेंगे? धन्यवाद!

+0

अधिकांश गतिशील भाषा कार्यान्वयन पहले सार तत्व सिंटैक्स वृक्ष में इनपुट को "पार्स" करेंगे - यह वह हिस्सा है जहां सिंटैक्स त्रुटियों का पता लगाया गया है। उसके बाद एएसटी को चलाया जा सकता है ("चला गया") सीधे या इसे किसी प्रकार के आंतरिक बाइटकोड और/या JIT'ed में परिवर्तित किया जा सकता है। ईसीएमएस्क्रिप्ट विशिष्टता में "कैसे" चलाने के लिए निर्दिष्ट नहीं है और विभिन्न कार्यान्वयन के बीच काफी भिन्न होता है। –

उत्तर

11

यह ब्राउज़र-निर्भर है। वेबकिट के गिलहरीफिश चरम और Google V8 को देखने के लिए चीजों के सबसे तेज़ अंत में क्या है, और उस कार्यान्वयन के लिए मोज़िला के जेगर मॉन्की को देखें।

एफ़ाक वी 8 और एसएफएक्स जेआईटी हैं, इसलिए वे जेएस कोड को देशी में संकलित करते हैं। JaegerMonkey और TraceMonkey फ़ायरफ़ॉक्स में एक सिस्टम बनाने के लिए गठबंधन करते हैं, जहां कोड तेजी से पता लगाया जाएगा, TraceMonkey इसे निष्पादित करता है, और यदि कोड तेज़ मूल था, तो जेगर मॉन्की इसे एसएफएक्स की तरह संकलित करता है।

+0

दरअसल +1, ईसीएमएस्क्रिप्ट चलाने के लिए कोई जनादेश नहीं है, सिवाय इसके कि इसमें [ईसीएमएस्क्रिप्ट भाषा विशिष्टता] (http://www.ecma-international.org/publications/standards/Ecma] में उल्लिखित अर्थशास्त्र है। -262.htm)। –

+0

क्या आप जावास्क्रिप्ट को प्रीकंपाइल कर सकते हैं और उसे उपयोगकर्ता एजेंट के आधार पर ब्राउज़र पर भेज सकते हैं? – Ced

0

क्या आपके पास एक वाक्य है जिसे आप संदर्भ के साथ मदद करने के लिए उद्धृत कर सकते हैं?

ब्राउज़र पर जावास्क्रिप्ट संकलित किया गया है (इसे सादे स्रोत में ब्राउज़र में भेजा गया है)। लेकिन यह केवल लोड होने के रूप में संकलित हो जाता है। इसलिए यदि आपके पास स्क्रिप्ट टैग के बाद एक डिवी टैग के बाद एक स्क्रिप्ट टैग है तो यह उन चीजों को अनुक्रमिक रूप से लोड करेगा। ब्राउजर पूरे पृष्ठ को लोड करना बंद कर देगा (यह अभी भी संसाधन डाउनलोड करता है, सिर्फ HTML लोड नहीं करता है) जब तक कि आपकी स्क्रिप्ट लोड नहीं हो जाती है (ऐसा इसलिए है क्योंकि स्क्रिप्ट में 'document.write' हो सकती है)।

<script> 
var someVariable = 'hello world'; 
alert(document.getElementById('someid')); //alerts undefined 
</script> 

<div id='someid'></div> 

<script> 
alert(document.getElementById('someid')); //alerts 'someid' 
alert(someVariable); //alerts 'hello world' 
</script> 
0

वहाँ समय-पढ़ने के लिए है और रन-टाइम जे एस में (के रूप में मैं इसके बारे में सोचने के लिए है, क्योंकि यह वास्तव में संकलित नहीं कर रहा है पसंद है, लेकिन व्याख्या)। ऐसा लगता है कि O'Reilly पुस्तक संकलन-समय का उपयोग रीड-टाइम के समानार्थी के रूप में कर रही है।

रीड-टाइम तब होता है जब इंजन सभी कोड पढ़ता है और वैश्विक दायरे में सबकुछ का मूल्यांकन करता है। आम तौर पर यह उन घटनाओं पर हुक सेट करता है जो कोड निष्पादन को ट्रिगर करेंगे।

रन-टाइम सब कुछ है।