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

From Vigyanwiki

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

परिभाषा

यह शब्द निओलिज़्म है, जिसे रेमी शार्प द्वारा गढ़ा गया था, जिसके लिए एक शब्द की आवश्यकता होती है जिसका अर्थ है कि जावास्क्रिप्ट (या फ्लैश या जो कुछ भी) का उपयोग करके एपीआई को दोहराना है, यदि ब्राउज़र में मूल रूप से 2009 में एचटीएमएल 5 का सह-लेखन करते समय यह मूल रूप से नहीं है।[3][4] औपचारिक रूप से, शिम लाइब्रेरी (कंप्यूटिंग) है जो केवल उस वातावरण के साधनों का उपयोग करके पुराने परिवेश में नया एपीआई लाता है।[1]पॉलीफ़िल इस परिभाषा के बिल्कुल अनुरूप हैं; शिम शब्द का उपयोग प्रारंभिक पॉलीफिल्स के लिए भी किया जाता था।[5] चूँकि, शार्प शिम के लिए अपारदर्शी एपीआई और वर्कअराउंड, जैसे लेआउट के लिए स्पेसर जीआईएफ, जिसे कभी-कभी जाना जाता है shim.gif, और इसी प्रकार के शब्द जैसे प्रगतिशील वृद्धि और स्वीकृत निम्नीकरण उपयुक्त नहीं थे, इसलिए उन्होंने नया शब्द का निर्माण किया है।[4]यह शब्द पोटीन पेस्ट ब्रांड स्पैक्लिंग पेस्ट पॉलीफिला पर आधारित है, पेस्ट जिसका उपयोग दीवारों में दरारों और छेदों को ढंकने के लिए किया जाता है, और इसका अर्थ कई तरीकों से (कार्यक्षमता में) छिद्रों को भरना है (पॉली-)। इस शब्द ने तब से लोकप्रियता हासिल की है, विशेष रूप से पॉल आयरिश और आधुनिकीकरण प्रलेखन में इसके उपयोग के कारण किया था।[4][6]

शार्प जो भेद करता है वह है:[3]

जो चीज पॉलीफिल को उस तकनीक से भिन्न बनाती है जो हमारे पास शिम की तरह पहले से उपस्थित है, वह यह है: यदि अपने पॉलीफिल स्क्रिप्ट को हटा दिया है, तो आपका कोड काम करना प्रारम्भ रखेगा, "पॉलीफिल हटाए जाने के बिना" बिना किसी बदलाव के होता है।

यह भेद अन्य लेखकों द्वारा नहीं खींचा गया है।[1]कभी-कभी शिम, पॉलीफिल और फॉलबैक के बीच कई अन्य भेद किए जाते हैं, परन्तु सामान्यतौर पर स्वीकृत भेद नहीं होते हैं: अधिकांश पॉलीफिल को शिम का रूप मानते हैं।[7] पॉलीफ़िलर शब्द भी कभी-कभी पाया जाता है।[8]

उदाहरण

कोर-जेएस

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

एचटीएमएल5 शिव

आईइ संस्करणों में 9 से पहले, अज्ञात एचटीएमएल तत्व जैसे ‎<section> और ‎<nav> को खाली तत्वों के रूप में पार्स किया जाएगा, पृष्ठ की नेस्टिंग संरचना को तोड़कर उन तत्वों को सीएसएस का उपयोग करके शैली बनाना असंभव बना देगा। सबसे व्यापक रूप से उपयोग किए जाने वाले पॉलीफ़िल्स में से, एचटीएमएल5 शिव,[lower-alpha 1] इस बग के आसपास काम करने के लिए आईइ की एक और विचित्रता का लाभ उठाता है: कॉलिंग document.createElement("tagname") प्रत्येक नए एचटीएमएल 5 तत्वों के लिए, जो आईई को सही ढंग से पार्स करने का कारण बनता है। इसमें उन एचटीएमएल5 तत्वों के लिए मूल डिफ़ॉल्ट स्टाइलिंग भी सम्मिलित है।

-प्रीफ़िक्स-मुक्त

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

चयनकर्ता

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

फ्लेक्सी

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

सीएसएस3 पीआईई

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

जेसोन 2

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

इएस5-शिम

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

फ्लैशकैनवास

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

मीडियाएलिमेंट.जेएस

जॉन डायर का मीडियाएलिमेंट.जेएस के लिए पॉलीफ़िल्स समर्थन करता है <video> और <audio> फ़्लैश या सिल्वरलाइट प्लग-इन का उपयोग करने वाले पुराने ब्राउज़र में एचटीएमएल5 मीडिया एलिमेंट एपिआई सहित तत्व हैं। यह उन तत्वों के लिए एक वैकल्पिक मीडिया प्लेयर युआई भी प्रदान करता है, जो सभी ब्राउज़रों में सुसंगत है।

ब्राउज़रआईडी

मोज़िला द्वारा प्रस्तावित प्रमाणीकरण प्रोटोकॉल, कर्षण प्राप्त करने में विफल रहा है।[12]

वेबशिम्स लिब

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

हाइफेनोपॉली.जेएस

हीफेनपोली.जेएस को सक्षम करता है यदि यह पहले से संबंधित डॉक्यूमेंट भाषा के लिए ब्राउज़र द्वारा समर्थित नहीं है।[13]

यह भी देखें

टिप्पणियाँ

  1. The use of the term shiv here is a pun or mistake on shim.[3]

संदर्भ

  1. 1.0 1.1 1.2 1.3 Luis Ángel Pérez Castillo (2019). जावास्क्रिप्ट बोल रहा हूँ.
  2. "It typically checks if a browser supports an API. If it doesn’t, the polyfill installs its own implementation. That allows you to use the API in either case."
  3. 3.0 3.1 3.2 Bruce Lawson; Remy Sharp. "Introducing Polyfills". Introducing HTML5. pp. 276–277.
  4. 4.0 4.1 4.2 Sharp, Remy (8 October 2010). "What is a polyfill?". Retrieved 13 January 2012.
  5. Ian Hickson (2008-01-23). "गलतियाँ, उदासी, पछतावा". This piece of information makes building an HTML5 compatibility shim for IE7 far easier than had previously been assumed.
  6. "HTML5 Cross browser Polyfills". GitHub. Archived from the original on 2010-09-28.
  7. "What is the difference between a shim and a polyfill?".
  8. Chuck Hudson; Tom Leadbetter (2011). HTML5 Developer's Cookbook. p. 121.
  9. "कोर-जेएस". GitHub. 26 October 2021.
  10. "Airbnb-js-shims vs core-js vs core-js-pure vs es5-shim vs es6-shim vs js-polyfills vs polyfill-library vs polyfill-service | NPM trends".
  11. "ECMAScript 6 compatibility table".
  12. "नेविगेटर.ईद". Mozilla Developer Network. 30 June 2012.
  13. "हाइफेनोपॉली.जेएस". GitHub. 25 September 2022.

बाहरी संबंध