শিম এবং পলিফিলের মধ্যে পার্থক্য কী?


406

উভয়ই ওয়েব ডেভেলপমেন্ট চেনাশোনাগুলিতে ব্যবহৃত হবে বলে মনে হয়, উদাহরণস্বরূপ HTML5 ক্রস ব্রাউজার পলিফিলগুলি দেখুন যা বলে:

সুতরাং এখানে আমরা সমস্ত শিম, ফলব্যাক এবং পলিফিল সংগ্রহ করছি ...

বা, এখানে এস 5-শিম প্রকল্প রয়েছে।

আমার বর্তমান প্রকল্পে আমরা এগুলির একটি সংখ্যা ব্যবহার করছি এবং আমি সেগুলি একই ডিরেক্টরিতে আটকে রাখতে চাই। সুতরাং, আমি এই ডিরেক্টরিটি কল করব --- shims, বা polyfills?


6
পুনরায় খুলুন: আমি মনে করি "এই ডিরেক্টরিটি কী বলা উচিত" এটি মতামত ভিত্তিক হতে পারে তবে এটি আসলে প্রশ্নের বৃহত্তর প্রসঙ্গটি দেয় না - বা এই প্রশ্নের সবচেয়ে গুরুত্বপূর্ণ দিকটিও নয়। এখানে সমস্ত উত্তর একমত হয়ে গেছে বলে মনে হচ্ছে এবং সেখানে তথ্য, তথ্যসূত্র এবং নির্দিষ্ট দক্ষতার উল্লেখযোগ্য ব্যবহার রয়েছে।
নোবার

উত্তর:


386
  • শিম একটি কোডের এমন কোনও অংশ যা কোনও এপিআই কলের বাধা দেয় এবং বিমূর্ততার স্তর সরবরাহ করে। এটি অগত্যা কোনও ওয়েব অ্যাপ্লিকেশন বা এইচটিএমএল 5 / সিএসএস 3 এর মধ্যে সীমাবদ্ধ নয়।

  • একজন polyfill একটি হল shim ধরণ যে আধুনিক HTML5 দিয়ে retrofits লিগ্যাসি ব্রাউজারের / সিএসএস 3 সাধারণত জাভাস্ক্রিপ্ট বা ফ্ল্যাশ ব্যবহার বৈশিষ্ট্যগুলিও উপস্থিত রয়েছে।

আপনার সুনির্দিষ্ট প্রশ্নের উত্তর দিয়ে shimsআপনি যদি ডিরেক্টরিটিকে জেনেরিক রাখতে চান তবে আপনার ডিরেক্টরিতে কল করুন ।


234

shim

আপনি যদি অ্যাডাপ্টারের প্যাটার্নটির সাথে পরিচিত হন, তবে আপনি শিথর কী তা জানেন। শিমস এপিআই কলগুলিকে বাধা দেয় এবং কলার এবং লক্ষ্যটির মধ্যে একটি বিমূর্ত স্তর তৈরি করে। পিছনে সামর্থ্যের জন্য সাধারণত শিমগুলি ব্যবহৃত হয়। উদাহরণস্বরূপ es5-shim এনপিএম প্যাকেজ আপনাকে ECMAScript 5 (ES5) সিনট্যাক্স লিখতে দেবে এবং ব্রাউজারটি ES5 চলছে কিনা তা যত্ন নেবে না। একটি উদাহরণ হিসাবে তারিখ নিন । এটি ES5 এর একটি নতুন ফাংশন যেখানে ES3 এর বাক্য গঠনটি হবে নতুন তারিখ () .গেটটাইম () । আপনি যদি এস 5-শিম ব্যবহার করেন তবে আপনি ডেট.নউ লিখতে পারেন এবং আপনি যে ব্রাউজারটি চালাচ্ছেন তা ইএস 5 সমর্থন করে তবে এটি কেবল চলবে। যাইহোক, ব্রাউজারটি ES3 ইঞ্জিনটি চলমান থাকলে es5-shim কলটি ডেট.নউ থেকে বিরত করবেএবং পরিবর্তে নতুন তারিখ ()। getTime () ফিরিয়ে দিন । এই বাধাটিকে শিমিং বলে। এস 5-শিমের প্রাসঙ্গিক উত্স কোডটি দেখতে এমন দেখাচ্ছে:

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

Polyfill

পলিফিলিং শিমিংয়ের কেবলমাত্র একটি বিশেষ সংস্করণ। পলিফিল একটি এপিআই-তে হারিয়ে যাওয়া বৈশিষ্ট্যগুলি বাস্তবায়নের বিষয়ে, যেখানে কোনও শিম অদৃশ্য বৈশিষ্ট্যগুলি সংশোধন করার বিষয়ে অনুপস্থিত বৈশিষ্ট্যগুলি বাস্তবায়নের বিষয়ে ততটা হবে না। আমি জানি এটি অত্যধিক অস্পষ্ট বলে মনে হয় তবে শিমগুলি যেখানে আরও বিস্তৃত শব্দ হিসাবে ব্যবহৃত হয়, সেখানে পলিফিল শিমগুলি বর্ণনা করতে ব্যবহৃত হয় যা পুরানো ব্রাউজারগুলির জন্য পশ্চাদপদ সামর্থ্য সরবরাহ করে। তাই শিমগুলি পুরানো পাপগুলি coveringাকতে ব্যবহার করা হয়, তবে পলিফিলগুলি ভবিষ্যতে উন্নতিকে সময়মতো ফিরিয়ে আনতে ব্যবহৃত হয়। উদাহরণস্বরূপ আই 7-তে সেশনস্টোরেশনের জন্য কোনও সমর্থন নেই, তবে উইন্ডোটির নাম সম্পত্তিতে ডেটা সংরক্ষণ করার মতো কৌশলগুলি ব্যবহার করে বা কুকিজ ব্যবহার করে সেশন স্টোরেজ এনপিএম প্যাকেজটিতে পলিফিল আইই 7 (এবং আরও পুরানো) এ এই বৈশিষ্ট্যটি যুক্ত করবে।


107
তাই শিমগুলি পুরানো পাপগুলি coveringাকতে ব্যবহার করা হয়, তবে পলিফিলগুলি ভবিষ্যতে উন্নতিকে সময়মতো ফিরিয়ে আনতে ব্যবহৃত হয়। এটি আমার কাছে সমস্ত কিছু যোগ করে। একটি পরিষ্কার ব্যাখ্যা জন্য আপনাকে ধন্যবাদ।
জননিকিউ

এই উত্তরটি সহায়ক, ধন্যবাদ। তবে আমার কাছে মনে হয় যে দুটি শব্দ প্রায়শই এস 5-শিম সহ ওয়েবে সঠিকভাবে ব্যবহৃত হয় না। আমি মনে করি আপনার সংজ্ঞা অনুসারে এস 5-শিম শিম এবং পলিফিলের মিশ্রণ।
ম্যাট ব্রাউনি 19

WOW -> সুতরাং শিমগুলি পুরানো পাপগুলি coveringাকতে ব্যবহার করা হয়, তবে পলিফিলগুলি ভবিষ্যতে উন্নতিকে সময়মতো ফিরিয়ে আনতে ব্যবহৃত হয়। <- অনেক ধন্যবাদ!
জেপেলিন

3
তারিখ-উদাহরণটি আমার কাছে পলিফিলের মতো দেখাচ্ছে। আমি কেন এটি একটি পলিফিল মনে করি? কারণ ডেট.নো একটি দেশীয় কল। একটি পলিফিল ব্রাউজারে একই এপিআই বিরামবিহীন বৈশিষ্ট্যটি যুক্ত করবে। একটি শিম একটি নতুন এপিআই এর সাথে আসে: MyShim.Date.now(); আমি ভুল হলে দয়া করে আমাকে সংশোধন করুন।
TatzyXY

99

আমি যা বুঝতে পারি তা থেকে:

পলিফিল একটি কোড যা নির্দিষ্ট "প্রত্যাশিত" এপিআই অনুপস্থিত এবং ম্যানুয়ালি এটি প্রয়োগ করে কিনা তা সনাক্ত করে। যেমন

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

শিম একটি কোড যা বিদ্যমান এপিআই কলগুলিকে বাধা দেয় এবং বিভিন্ন আচরণ প্রয়োগ করে। এখানে ধারণাটি হ'ল বিভিন্ন পরিবেশ জুড়ে নির্দিষ্ট এপিআইগুলিকে স্বাভাবিক করা। সুতরাং, যদি দুটি ব্রাউজার একই এপিআইটিকে আলাদাভাবে প্রয়োগ করে, আপনি সেই ব্রাউজারগুলির মধ্যে একটিতে এপিআই কলগুলিকে বাধা দিতে পারেন এবং এর আচরণটি অন্য ব্রাউজারের সাথে একত্রিত করতে পারেন। বা, যদি কোনও ব্রাউজারের তার কোনও API এ একটি বাগ থাকে, আপনি আবার সেই API এ কলগুলি আটকে রাখতে পারেন এবং তারপরে বাগটি অবরুদ্ধ করতে পারেন।


66

এক্সেল রাউশমায়ারকে তাঁর স্পিকিং জাভাস্ক্রিপ্ট বই থেকে উদ্ধৃত করে :

  • শিম একটি লাইব্রেরি যা কেবলমাত্র সেই পরিবেশের উপায়গুলি ব্যবহার করে একটি পুরানো পরিবেশে একটি নতুন এপিআই এনে দেয়।
  • একটি পলিফিল একটি ব্রাউজার এপিআইয়ের জন্য শিম। এটি ব্রাউজার কোনও এপিআই সমর্থন করে কিনা তা সাধারণত পরীক্ষা করে। যদি এটি না হয়, পলিফিল নিজস্ব বাস্তবায়ন ইনস্টল করে। এটি আপনাকে উভয় ক্ষেত্রেই API ব্যবহার করতে দেয়। পলিফিল শব্দটি একটি বাড়ির উন্নতি পণ্য থেকে এসেছে; রেমি শার্প অনুসারে :

    পলিফিলা মার্কিন যুক্তরাষ্ট্রে স্প্যাকলিং পেস্ট নামে পরিচিত একটি যুক্তরাজ্যের পণ্য। এটি মাথায় রেখে: ব্রাউজারগুলিকে ফাটলযুক্ত একটি প্রাচীর হিসাবে ভাবেন। এই [পলিফিলস] ফাটলগুলি সহজ করতে এবং আমাদের সাথে কাজ করার জন্য ব্রাউজারগুলির একটি দুর্দান্ত মসৃণ প্রাচীর দেয়।


9

Shim। শিম একটি লাইব্রেরি যা কেবলমাত্র সেই পরিবেশের উপায়গুলি ব্যবহার করে একটি পুরানো পরিবেশে একটি নতুন এপিআই এনে দেয়।

Polyfill। ২০১০ সালের অক্টোবরে, রেমি শার্প "পলিফিল" শব্দটি [রিক ওয়াল্ড্রনের মাধ্যমে] সম্পর্কে ব্লগ করেছিলেন:

পলিফিল হ'ল কোডের একটি অংশ (বা প্লাগইন) যা এমন প্রযুক্তি সরবরাহ করে যা আপনি, বিকাশকারী ব্রাউজারটি স্থানীয়ভাবে সরবরাহের প্রত্যাশা করেন। আপনি চাইলে এপিআই ল্যান্ডস্কেপ সমতলকরণ।


8

কয়েক বছর আগে থেকে এ সম্পর্কে একটি দুর্দান্ত নিবন্ধ লেখা হয়েছে যা এটি ভালভাবে ব্যাখ্যা করে:

পলিফিল কী?

নিবন্ধে (2) কেবল এইভাবে বিপরীতে রয়েছে:

শিম: একটি কোডের টুকরা যা আপনি যুক্ত করতে পারেন (অর্থাত্ JavaScript) যা কিছু কার্যকারিতা স্থির করে তবে বেশিরভাগ ক্ষেত্রে এটির নিজস্ব API থাকে

পলিফিল: এমন কিছু যা আপনি ফেলে দিতে পারেন (অর্থাত্ JavaScript) এবং এটি নিঃশব্দে বিদ্যমান ব্রাউজারের API গুলি নকল করার জন্য কাজ করবে যা অন্যথায় অসমর্থিত।


1
আমি মনে করি এটি সাধারণ ব্যবহার এবং আপনার সাথে লিঙ্কযুক্ত ব্লগ পোস্টে রেমি শার্প আসলে যা বলেছে তা উভয়েরই বিভ্রান্তিমূলক উপস্থাপনা। আজকাল পলিফিলের সাথে শিম বেশিরভাগ ক্ষেত্রে সমার্থকভাবে ব্যবহৃত হয় (বিশেষত এস 5-শিম এবং এস 6-শিম দেখুন ) এবং রেমি বিশেষত তাকে বলে যে শিম শব্দটি একটি কাস্টম এপিআইতে সংযুক্ত করা হয়েছে (এর সাথে তুলনা করে )। তিনি খুব একটা নির্দেশ দিচ্ছেন না যে শব্দগুলি এইভাবে ব্যবহার করা উচিত এবং "আমাকে" বলে তিনি স্পষ্টভাবে স্বীকার করেছেন যে তাঁর ব্যবহার সর্বজনীন নয়। shim.gif
মার্ক আমেরিকা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.