शिम और पॉलिफ़िल में क्या अंतर है?


406

दोनों का उपयोग वेब डेवलपमेंट सर्कल में किया जाता है, उदाहरण के लिए HTML5 क्रॉस ब्राउज़र पॉलीफ़िल्स देखें , जो कहता है:

तो यहाँ हम सभी शिम, फालबैक और पॉलीफिल एकत्रित कर रहे हैं ...

या, वहाँ es5- शिम परियोजना है।

मेरी वर्तमान परियोजना में हम इनमें से कई का उपयोग कर रहे हैं, और मैं उन सभी को उसी निर्देशिका में रखना चाहता हूं। तो, मुझे इस निर्देशिका को क्या कहना चाहिए --- shims, या polyfills?


6
reopen: मुझे लगता है कि "मुझे इस निर्देशिका को क्या कहना चाहिए" राय-आधारित हो सकता है, लेकिन यह वास्तव में प्रश्न का बड़ा संदर्भ नहीं दिया गया है - और न ही इस प्रश्न का सबसे महत्वपूर्ण पहलू है। यहाँ सभी उत्तर समझौते में प्रतीत होते हैं, और तथ्यों, संदर्भों और विशिष्ट विशेषज्ञता का महत्वपूर्ण उपयोग होता है।
नोबार

जवाबों:


386
  • एक शिम कोड का एक टुकड़ा है जो एक एपीआई कॉल के अवरोधन को निष्पादित करता है और अमूर्तता की एक परत प्रदान करता है। यह आवश्यक रूप से एक वेब एप्लिकेशन या HTML5 / CSS3 तक ही सीमित नहीं है।

  • एक पॉलीफ़िल एक प्रकार का शिम है जो आधुनिक एचटीएमएल 5 / सीएसएस 3 सुविधाओं के साथ विरासत ब्राउज़रों का उपयोग करता है जो आमतौर पर जावास्क्रिप्ट या फ्लैश का उपयोग करते हैं।

अपने विशिष्ट प्रश्न का उत्तर देते हुए, अपनी निर्देशिका को कॉल करें shimsयदि आप निर्देशिका को सामान्य रखना चाहते हैं।


234

परत

यदि आप एडेप्टर पैटर्न से परिचित हैं, तो आप जानते हैं कि शिम क्या है। शिम्स एपीआई कॉल को इंटरसेप्ट करता है और कॉलर और लक्ष्य के बीच एक अमूर्त परत बनाता है। आमतौर पर शिमर्स का इस्तेमाल पिछड़े कंपटीशन के लिए किया जाता है। उदाहरण के लिए es5-shim npm पैकेज आपको ECMAScript 5 (ES5) सिंटैक्स लिखने देगा और परवाह नहीं करेगा कि ब्राउज़र ES5 चल रहा है या नहीं। उदाहरण के तौर पर Date.now को लें । यह ES5 में एक नया फ़ंक्शन है जहां ES3 में सिंटैक्स नई तिथि () होगा। गेटटाइम () । यदि आप es5-shim का उपयोग करते हैं तो आप Date.now लिख सकते हैं और यदि आप जिस ब्राउज़र को ES5 के समर्थन में चला रहे हैं, वह बस चलेगा। हालाँकि, यदि ब्राउज़र ES3 इंजन es5-shim चला रहा है, तो Date.now को कॉल इंटरसेप्ट करेगाऔर इसके बदले नई तारीख () प्राप्त करें । इस अवरोधन को शाइनिंग कहा जाता है। Es5-shim से संबंधित स्रोत कोड इस तरह दिखता है:

if (!Date.now) {
    Date.now = function now() {
        return new Date().getTime();
    };
}

polyfill

पॉलिफ़िलिंग वास्तव में चमक का एक विशेष संस्करण है। पॉलीफ़िल एक एपीआई में लापता सुविधाओं को लागू करने के बारे में है, जबकि एक शिम आवश्यक रूप से लापता सुविधाओं को लागू करने के बारे में नहीं होगा क्योंकि यह सुविधाओं को ठीक करने के बारे में है। मुझे पता है कि ये अत्यधिक अस्पष्ट लगते हैं, लेकिन जहां शिम का उपयोग अधिक व्यापक शब्द के रूप में किया जाता है, पॉलीफिल का उपयोग उन शिमों का वर्णन करने के लिए किया जाता है जो पुराने ब्राउज़रों के लिए पिछड़ेपन को प्रदान करते हैं। इसलिए जबकि पुराने पापों को ढंकने के लिए शिम का उपयोग किया जाता है, भविष्य में समय में वृद्धि लाने के लिए पॉलीफिल का उपयोग किया जाता है। एक उदाहरण के रूप में वहाँ IE7 में sessionStorage लिए कोई समर्थन नहीं है, लेकिन में polyfill sessionstorage NPM पैकेज खिड़की के नाम संपत्ति में डेटा संग्रहीत की तरह तकनीकों का उपयोग करके या कुकीज़ का उपयोग करके IE7 (और पुराने) में इस सुविधा को जोड़ देगा।


107
इसलिए जबकि पुराने पापों को ढंकने के लिए शिम का उपयोग किया जाता है, भविष्य में समय में वृद्धि लाने के लिए पॉलीफिल का उपयोग किया जाता है। यह मेरे लिए सब कुछ sums। स्पष्ट स्पष्टीकरण के लिए धन्यवाद।
जॉनी क्यू

यह उत्तर सहायक है, धन्यवाद। लेकिन यह मुझे लगता है कि दो शब्दों को अक्सर वेब पर उपयोग नहीं किया जाता है, जिसमें es5-shim भी शामिल है। मुझे लगता है कि es5- शिम आपकी परिभाषा के अनुसार शिम और पॉलीफिल का मिश्रण है।
मैट ब्राउन ने

WOW -> इसलिए जब पुराने पापों को ढकने के लिए शिम का उपयोग किया जाता है, तो पॉलीफ़िल का उपयोग भविष्य में वृद्धि को वापस लाने के लिए किया जाता है। <- बहुत धन्यवाद!
जेपेलिन

3
तारीख-उदाहरण मुझे एक पॉलिफ़िल की तरह दिखता है। मुझे क्यों लगता है कि यह एक पॉलीफ़िल है? क्योंकि Date.now एक देशी कॉल है। पॉलीफ़िल ब्राउज़र के समान ही एपीआई के साथ उस सुविधा को जोड़ देगा। एक शिम नए एपीआई के साथ आता है जैसे: MyShim.Date.now(); कृपया मुझे सही करें अगर मैं गलत हूं।
टाटीज़एक्सवाई

99

मैं जो समझता हूं:

एक पॉलीफ़िल कोड है जो पता लगाता है कि क्या एक निश्चित "अपेक्षित" एपीआई गायब है और मैन्युअल रूप से इसे लागू करता है। उदाहरण के लिए

if (!Function.prototype.bind) { Function.prototype.bind = ...; }

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


66

अपनी पुस्तक स्पीकिंग जावास्क्रिप्ट से एक्सल रौशमायर का हवाला देते हुए :

  • एक शिम एक पुस्तकालय है जो उस वातावरण के केवल साधनों का उपयोग करके एक पुराने वातावरण में एक नया एपीआई लाता है।
  • एक पॉलीफ़िल एक ब्राउज़र एपीआई के लिए एक शिम है। यह आमतौर पर जाँचता है कि क्या कोई ब्राउज़र एपीआई का समर्थन करता है। यदि ऐसा नहीं होता है, तो पॉलीफ़िल अपने स्वयं के कार्यान्वयन को स्थापित करता है। यह आपको किसी भी स्थिति में एपीआई का उपयोग करने की अनुमति देता है। पॉलीफ़िल शब्द एक घर सुधार उत्पाद से आता है; रेमी तेज के अनुसार :

    Polyfilla एक UK उत्पाद है जिसे अमेरिका में Spackling Paste के रूप में जाना जाता है। इसे ध्यान में रखते हुए: ब्राउज़र को एक दीवार के रूप में सोचें जिसमें दरारें हों। ये [पॉलीफ़िल] दरार को सुचारू बनाने में मदद करते हैं और हमें काम करने के लिए ब्राउज़र की एक अच्छी चिकनी दीवार देते हैं।


9

शिम। एक शिम एक पुस्तकालय है जो उस वातावरण के केवल साधनों का उपयोग करके एक पुराने वातावरण में एक नया एपीआई लाता है।

Polyfill। अक्टूबर 2010 में, रेमी शार्प ने "पॉलफिल" [रिक वाल्ड्रॉन के माध्यम से] शब्द के बारे में ब्लॉग किया।

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


8

कुछ साल पहले इस बारे में लिखा गया एक शानदार लेख जो इस बारे में बताता है:

एक पॉलीफ़िल क्या है?

लेख में (2) बस इस तरह के विपरीत हैं:

शिम: कोड का एक टुकड़ा जिसे आप जोड़ सकते हैं (यानी JavaScript) जो कुछ कार्यक्षमता को ठीक करेगा, लेकिन यह सबसे अधिक बार इसका एपीआई होगा

पॉलीफ़िल: ऐसा कुछ जिसे आप (यानी JavaScript) में छोड़ सकते हैं और यह मौजूदा ब्राउज़र एपीआई की नकल करने के लिए चुपचाप काम करेगा जो अन्यथा असमर्थित हैं।


1
मुझे लगता है कि यह दोनों आम उपयोग का एक भ्रामक प्रतिनिधित्व है और रेमी शार्प वास्तव में आपके द्वारा लिंक किए गए ब्लॉग पोस्ट में कहता है। शिम सबसे अधिक बार के साथ पर्याय के रूप में प्रयोग किया जाता polyfill आजकल (विशेष रूप से देखने के es5-शिम और ES6-शिम ) और रेमी कह के बारे में है कि विशेष रूप है उसे करने के शब्द 'शिम' संकेत एक कस्टम एपीआई के (के साथ तुलना करके shim.gif)। वह बहुत अधिक यह तय नहीं कर रहा है कि इस तरह से शब्दों का इस्तेमाल किया जाए, और "मुझे" कहकर वह स्पष्ट रूप से स्वीकार कर रहा है कि उसका उपयोग सार्वभौमिक नहीं है।
मार्क एमी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.