2008-09-16 30 views
5

क्या यह एक बड़ी जीडब्ल्यूटी परियोजना में संभव है, फ्लाई पर जावास्क्रिप्ट आलसी के कुछ हिस्से को लोड करें? ओवरले की तरह।gwt आलसी लोडिंग

पीएस: इफ्रेम कोई समाधान नहीं है।

+0

पांडित्य (समय 25:30 के आसपास) – GEOCHET

उत्तर

0

मुझे लगता है कि यह वही है जो आप खोज रहे हैं।

<body onload="onloadHandler();"> 
<script type="text/javascript"> 
function onloadHandler() { 
    if (document.createElement && document.getElementsByTagName) { 
     var script = document.createElement('script'); 
     script.type = 'text/javascript'; 
     script.src = './test.js'; 
     var heads = document.getElementsByTagName('head'); 
     if (heads && heads[0]) { 
      heads[0].appendChild(script); 
     } 
    } 
} 
function iAmReady(theName) { 
    if ('undefined' != typeof window[theName]) { 
     window[theName](); 
    } 
} 
function test() { 
    // stuff to do when test.js loads 
}   
</script> 

- test.js

iAmReady('test'); 

परीक्षण किया और विंडोज, IE 6 और ओपेरा 9.52 के लिए फ़ायरफ़ॉक्स 2, सफारी 3.1.2 में काम कर रहे। मुझे लगता है कि उन लोगों के अप-स्तरीय संस्करणों को भी काम करना चाहिए।

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

आप भारित स्क्रिप्ट के नीचे एक आंतरिक फ़ंक्शन को केवल एक बार लोड करने के बाद कुछ भी करने के लिए कॉल कर सकते हैं।

0

GWT आसानी से इसका समर्थन नहीं करता है क्योंकि आपके द्वारा लोड किए गए मॉड्यूल के लिए आवश्यक सभी जावा कोड (या बल्कि हो सकता है) एक जावास्क्रिप्ट फ़ाइल में संकलित किया गया है। यह एकल जावास्क्रिप्ट फ़ाइल बड़ी हो सकती है लेकिन गैर-तुच्छ मॉड्यूल के लिए यह बराबर हाथ से लिखित जावास्क्रिप्ट से छोटी है।

क्या आपके पास ऐसा परिदृश्य है जहां एकल जेनरेट की गई जावास्क्रिप्ट फ़ाइल बहुत बड़ी है?

0

आप अपने आवेदन को कई जीडब्ल्यूटी मॉड्यूल में विभाजित कर सकते हैं लेकिन आपको याद रखना होगा कि यह मॉड्यूल के बीच कोड साझा करने की आपकी क्षमता को सीमित कर देगा। इसलिए यदि एक मॉड्यूल में कक्षाएं होती हैं जो एक ही कक्षा का संदर्भ देती हैं जो कि एक और मॉड्यूल संदर्भ देती है, तो सामान्य वर्ग के लिए कोड दो बार शामिल किया जाएगा।

प्रभावशाली रूप से मॉड्यूल अपने स्वयं के नामस्थान बनाते हैं, जैसा कि आप जावा में प्राप्त करते हैं, यदि आप दो अलग-अलग वर्ग लोडर के माध्यम से एक ही कक्षा को लोड करते हैं। वास्तव में क्योंकि जीडब्ल्यूटी कंपाइलर केवल आपके कोड में संदर्भित विधियों में संकलित करता है (यानी यह मृत कोड उन्मूलन करता है), यह कल्पना की जा सकती है कि एक मॉड्यूल में सामान्य वर्ग से अन्य मॉड्यूल में विधियों का एक अलग सबसेट शामिल होगा।

तो आपको वजन करना होगा कि यह सब एक मोनोलिथिक मॉड्यूल के रूप में लोड हो रहा है और पहली बार दौर में एक अग्रिम हिट लेना कई मॉड्यूल होने से बेहतर है जिसका संचयी कोड आकार एकल मॉड्यूल दृष्टिकोण से काफी अधिक हो सकता है।

यह देखते हुए कि जीडब्ल्यूटी डिजाइन किया गया है ताकि उपयोगकर्ता को कभी-कभी मॉड्यूल के एक ही संस्करण को लोड करना चाहिए (इसके बाद इसे कैश किया गया हो), ज्यादातर मामलों में एक ऑफ अपफ्रंट हिट बेहतर है।

0

आईफोन या आईपॉड टच का उपयोग करके "एक अपफ्रंट" दृष्टिकोण के साथ एक बड़ा जीडब्ल्यूटी एप्लीकेशन लोड करने का प्रयास करें ... यह कभी लोड नहीं होगा।

मॉड्यूल दृष्टिकोण प्रबंधन के लिए एक अधिक जटिल है लेकिन छोटे क्लाइंट उपकरणों के लिए बेहतर है।

अब, मैं अपने जावा कोड से एक आईफ्रेम का उपयोग किये बिना मॉड्यूल कैसे लोड करूं?

  • एरिक
7

चेक बाहर GWT.runAsync साथ ही गूगल आई/ओ नीचे बात है, जो GWT परियोजनाओं में जावास्क्रिप्ट की आलसी लोड हो रहा है में चला जाता है। * एक, * भाग में: