2012-01-04 10 views
34

ईसीएमएस्क्रिप्ट पांचवें संस्करण (दिसंबर 200 9 को जारी) नए तरीकों का एक समूह प्रस्तुत करता है (विवरण के लिए this table देखें)। हालांकि, वहां अभी भी पुराने ब्राउज़र हैं जो उन नई विधियों को लागू नहीं करते हैं।ईसीएमएस्क्रिप्ट 5 (ईएस 5) -शिम कैसे प्रदान करें?

सौभाग्य से, एक सुविधाजनक स्क्रिप्ट (जावास्क्रिप्ट में लिखी गई) - ES5-shim - जो उन तरीकों को मैन्युअल रूप से उन वातावरणों में लागू करती है जहां वे मौजूद नहीं हैं।

हालांकि, मुझे यकीन है कि कैसे ES5-शिम प्रदान करने के लिए ... चाहिए मैं सिर्फ यह सभी ब्राउज़रों के लिए, "देने" इतनी तरह नहीं कर रहा हूँ:

<script src="es5-shim.js"></scipt> 

या मैं केवल करने के क्रम में एक जांच में शामिल होना चाहिए "परेशान" उन ब्राउज़रों जो वास्तव में, यह की जरूरत है ताकि जैसे:।

<script> 
    if (!Function.prototype.hasOwnProperty('bind')) { 
     (function() { 
      var shim = document.createElement('script'); 
      shim.src = 'es5-shim.js'; 
      var script = document.getElementsByTagName('script')[0]; 
      script.parentNode.insertBefore(shim, script); 
     }()); 
    } 
</script> 

(मैं अगर एक ब्राउज़र सभी नए ECMAScript 5 तरीकों को लागू करता है की जाँच करने के Function.prototype.bind उपयोग कर रहा हूँ संगतता तालिका जो मैं ऊपर लिंक के अनुसार, bind है जब ईसीएम लागू करने की बात आती है तो "अंतिम गढ़" AScript 5 तरीकों।)

बेशक

, इस शिम के लिए प्रभावी होने के लिए, यह से पहले निष्पादित किया जाना है अन्य सभी लिपियों, जिसका अर्थ है कि हम ऊपर उल्लेख किया स्क्रिप्ट तत्वों पेज के शुरू में शामिल करना चाहते हैं (में सिर, अन्य सभी एससीआरआईपीटी तत्वों से पहले)।

तो, क्या यह दूसरा उदाहरण ब्राउज़र पर ईसीएमएस्क्रिप्ट 5-शिम प्रदान करने का एक अच्छा तरीका होगा? इसे करने का कोई बेहतर तरीका है?

उत्तर

22

ईएस 5-शिम केवल उन हिस्सों को झुकाएगा जो ब्राउज़र लागू नहीं करते हैं, इसलिए बस इसे सभी ब्राउज़रों को दें। यह किस चीज को छीनने की जरूरत है और क्या नहीं है इसका पता लगाएगा।

लेकिन कुछ मामलों में किन शिम सही तरीके से काम नहीं करते हैं, इस पर सूचीबद्ध चेतावनी पर ध्यान दें। मुझे अतीत में इसके साथ समस्याएं थीं और जब तक आपको एहसास नहीं हुआ कि इसका जवाब बहुत आसान था ...

+8

लेकिन उस ES5-संगत ब्राउज़र (नवीनतम आईई, क्रोम, फायरफॉक्स, जल्द ही ओपेरा) डाउनलोड करने और शिम जो वेब पेज को अनावश्यक रूप से धीमा निष्पादित करने के लिए मजबूर होना पड़ा । अगर मैं इसे थोड़ा जावास्क्रिप्ट चेक से टाल सकता हूं, तो मैं खुशी से ऐसा करूँगा। –

+3

@ ŠimeVidas: यह 8kB है। उचित कैशिंग के साथ, चिंता करने की कोई बात नहीं है। – You

+0

प्रदर्शन हिट नगण्य है, ES5 शिम पहले से ही अनावश्यक कोड निष्पादन से बचने के लिए क्या कर सकता है। – JaredMcAteer

8

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

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

+0

हाँ, मैंने देखा है [सीडीएनजेएस] (http://www.cdnjs.com/) इसे होस्ट कर रहा है ... –

12

यह मेरे लिए काम करने के लिए लगता है:

<!--[if lt IE 9]><script src="java/es5-shim.min.js"></script><![endif]--> 
+1

गैर-आईई ब्राउज़र के बारे में क्या जो ईएस 5 का समर्थन नहीं कर रहे हैं? – Bergi

+3

@ बर्गि: मुझे नहीं लगता कि वास्तव में वे मौजूद हैं। –

+1

@ रॉकेटहाज़मत: मुझे लगता है कि आपका मतलब है "उनको मुश्किल से उपयोग किया जाता है", लेकिन वे निश्चित रूप से मौजूद हैं। लोकप्रिय ब्राउज़रों के प्री-ईएस 5 संस्करण, या कुछ एम्बेडेड या मोबाइल ब्राउज़र ले लो। – Bergi