पॉलीफ़िल (प्रोग्रामिंग)

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

परिभाषा
यह शब्द एक निओलिज़्म है, जिसे रेमी शार्प द्वारा गढ़ा गया था, जिसके लिए एक शब्द की आवश्यकता होती है जिसका अर्थ है कि जावास्क्रिप्ट (या फ्लैश या जो कुछ भी) का उपयोग करके एपीआई को दोहराना है, अगर ब्राउज़र में मूल रूप से 2009 में एचटीएमएल 5 का सह-लेखन करते समय यह मूल रूप से नहीं है। औपचारिक रूप से, एक शिम एक लाइब्रेरी (कंप्यूटिंग) है जो केवल उस वातावरण के साधनों का उपयोग करके पुराने परिवेश में एक नया एपीआई लाता है। पॉलीफ़िल इस परिभाषा के बिल्कुल अनुरूप हैं; शिम शब्द का इस्तेमाल शुरुआती पॉलीफिल्स के लिए भी किया जाता था। हालांकि, तीव्र शिम के लिए गैर-पारदर्शी एपीआई और वर्कअराउंड, जैसे लेआउट के लिए स्पेसर जीआईएफ, जिसे कभी-कभी जाना जाता है , और इसी तरह के शब्द जैसे प्रगतिशील वृद्धि और सुंदर गिरावट उपयुक्त नहीं थे, इसलिए उन्होंने एक नया शब्द ईजाद किया। यह शब्द पोटीन पेस्ट ब्रांड स्पैक्लिंग पेस्ट#पॉलीफिला पर आधारित है, एक पेस्ट जिसका उपयोग दीवारों में दरारों और छेदों को ढंकने के लिए किया जाता है, और इसका अर्थ कई तरीकों से (कार्यक्षमता में) छिद्रों को भरना है (विकी:पॉली-|पॉली-) तरीके। इस शब्द ने तब से लोकप्रियता हासिल की है, विशेष रूप से पॉल आयरिश और आधुनिकीकरण प्रलेखन में इसके उपयोग के कारण। शार्प जो भेद करता है वह है: "What makes a polyfill different from the techniques we have already, like a shim, is this: if you removed the polyfill script, your code would continue to work, without any changes required in spite of the polyfill being removed." यह भेद अन्य लेखकों द्वारा नहीं खींचा गया है। कभी-कभी शिम, पॉलीफिल और फॉलबैक के बीच कई अन्य भेद किए जाते हैं, लेकिन आम तौर पर स्वीकृत भेद नहीं होते हैं: अधिकांश पॉलीफिल को शिम का एक रूप मानते हैं। पॉलीफ़िलर शब्द भी कभी-कभी पाया जाता है।

कोर-जेएस
कोर-जेएस सबसे लोकप्रिय है और शक्तिशाली जावास्क्रिप्ट मानक पुस्तकालय पॉलीफ़िल। मानक के नवीनतम संस्करण तक ECMAScript के लिए पॉलीफ़िल शामिल हैं: वादे, प्रतीक, संग्रह, पुनरावृत्तियाँ, टाइप की गई सरणियाँ, कई अन्य सुविधाएँ, ECMAScript प्रस्ताव, कुछ क्रॉस-प्लेटफ़ॉर्म WHATWG / W3C सुविधाएँ और प्रस्ताव जैसे. आप केवल आवश्यक सुविधाओं को लोड कर सकते हैं या वैश्विक नामस्थान प्रदूषण के बिना इसका उपयोग कर सकते हैं। इसे बेबेल (कंपाइलर) के साथ एकीकृत किया जा सकता है, जो इसे आपके कोड में आवश्यक कोर-जेएस मॉड्यूल को स्वचालित रूप से इंजेक्ट करने की अनुमति देता है।

HTML5 शिव
IE संस्करणों में 9 से पहले, अज्ञात HTML तत्व जैसे और  को खाली तत्वों के रूप में पार्स किया जाएगा, पृष्ठ की नेस्टिंग संरचना को तोड़कर उन तत्वों को CSS का उपयोग करके शैली बनाना असंभव बना देगा। सबसे व्यापक रूप से उपयोग किए जाने वाले पॉलीफ़िल्स में से एक, html5shiv, इस बग के आसपास काम करने के लिए IE की एक और विचित्रता का फायदा उठाता है: कॉलिंग   प्रत्येक नए एचटीएमएल 5 तत्वों के लिए, जो आईई को सही ढंग से पार्स करने का कारण बनता है। इसमें उन HTML5 तत्वों के लिए मूल डिफ़ॉल्ट स्टाइलिंग भी शामिल है।

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

चयनकर्ता
कीथ क्लार्क का सेलेक्टिवज़र एक लोकप्रिय पॉलीफ़िल है जो कई CSS3 चयनकर्ताओं को IE 8 और नीचे में काम करने देता है। यह पृष्ठ की स्टाइलशीट को कई ज्ञात CSS3 चयनकर्ताओं की तलाश में पढ़ता है, फिर उन चयनकर्ताओं से मेल खाने वाले तत्वों के लिए दस्तावेज़ को क्वेरी करने के लिए जावास्क्रिप्ट चयनकर्ता लाइब्रेरी का उपयोग करता है, शैलियों को सीधे उन तत्वों पर लागू करता है। यह कई जावास्क्रिप्ट चयनकर्ता पुस्तकालयों जैसे कि jQuery का समर्थन करता है।

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

CSS3 पीआईई
पीआईई (प्रगतिशील इंटरनेट एक्सप्लोरर) आईई में कुछ सबसे लोकप्रिय लापता CSS3 बॉक्स सजावट गुणों को लागू करता है, जिसमें आईई 8 और नीचे के लिए सीमा-त्रिज्या और बॉक्स-छाया, और आईई 9 और नीचे के लिए रैखिक-ढाल पृष्ठभूमि शामिल हैं। HTC व्यवहार (एक मालिकाना IE विशेषता) के रूप में शामिल, यह विशिष्ट तत्वों पर असमर्थित CSS3 गुणों की तलाश करता है और IE 6–8 के लिए VML और IE 9 के लिए SVG का उपयोग करके उन गुणों को प्रस्तुत करता है। इसका प्रतिपादन मूल ब्राउज़र कार्यान्वयन से अधिकतर अप्रभेद्य है और यह गतिशील DOM संशोधन को अच्छी तरह से संभालता है।

JSON 2
डगलस क्रॉकफोर्ड ने मूल रूप से json2.js को अपने (फिर आने वाले) JSON डेटा प्रारूप को पढ़ने और लिखने के लिए एक एपीआई के रूप में लिखा था। यह इतना व्यापक रूप से उपयोग किया जाने लगा कि ब्राउज़र विक्रेताओं ने इसके एपीआई को मूल रूप से लागू करने और इसे वास्तविक मानक में बदलने का फैसला किया; चूंकि json2.js अब पुराने ब्राउज़रों में नए ब्राउज़रों के मूल गुणों को लागू करता है, यह लाइब्रेरी के बजाय पॉलीफ़िल बन गया है।

es5-शिम
ECMAScript 5वां संस्करण (ES5) कुछ उपयोगी नई स्क्रिप्टिंग सुविधाएँ लाता है, और चूंकि वे पुराने जावास्क्रिप्ट इंजनों के साथ वाक्यात्मक रूप से संगत हैं, इसलिए वे ज्यादातर अंतर्निहित JS ऑब्जेक्ट्स पर पैचिंग विधियों द्वारा पॉलीफ़िल्ड किए जा सकते हैं। यह es5-shim पॉलीफ़िल इसे दो भागों में करता है: es5-shim.js में वे विधियाँ शामिल हैं जिन्हें पूरी तरह से पॉलीफ़िल किया जा सकता है, और es5-sham.js में अन्य विधियों का आंशिक कार्यान्वयन शामिल है जो सटीक रूप से काम करने के लिए अंतर्निहित इंजन पर बहुत अधिक निर्भर करते हैं।

फ्लैशकैनवास
FlashCanvas, Adobe Flash प्लग-इन का उपयोग करके HTML5 कैनवास API का कार्यान्वयन है। एक दुर्लभ वाणिज्यिक पॉलीफ़िल, यह एक भुगतान किए गए संस्करण के साथ-साथ एक मुफ़्त संस्करण में आता है, जिसमें छाया जैसी कुछ उन्नत सुविधाओं का अभाव है।

MediaElement.js
जॉन डायर का MediaElement.js के लिए पॉलीफ़िल्स समर्थन करता है  और   फ़्लैश या सिल्वरलाइट प्लग-इन का उपयोग करने वाले पुराने ब्राउज़र में HTML5 MediaElement API सहित तत्व। यह उन तत्वों के लिए एक वैकल्पिक मीडिया प्लेयर UI भी प्रदान करता है, जो सभी ब्राउज़रों में सुसंगत है।

ब्राउज़र आईडी
मोज़िला द्वारा प्रस्तावित प्रमाणीकरण प्रोटोकॉल, कर्षण प्राप्त करने में विफल रहा।

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

हाइफेनोपॉली.जेएस
Hyphenopoly.js Syllabification#Algorithm को सक्षम करता है यदि यह पहले से संबंधित दस्तावेज़ भाषा के लिए ब्राउज़र द्वारा समर्थित नहीं है।

यह भी देखें

 * एडेप्टर पैटर्न
 * शिम (कंप्यूटिंग)
 * रैपर लाइब्रेरी
 * अनुकूली वेब डिजाइन
 * पिछेड़ी संगतता