Polyfills হল এমন স্ক্রিপ্ট বা কোড স্নিপেট যা পুরানো ব্রাউজারে বা পরিবেশে নতুন ফিচার বা ফাংশনালিটি যোগ করতে সাহায্য করে। এটি বিশেষত JavaScript এর নতুন ফিচারগুলির জন্য ব্যবহৃত হয়, যাতে পুরনো ব্রাউজারগুলোও এগুলো সমর্থন করতে পারে।
ES6 (এবং এর পরবর্তী সংস্করণ) এ অনেক নতুন ফিচার এবং API যুক্ত হয়েছে, যেগুলি পুরনো ব্রাউজারে সমর্থিত নয়। Polyfills এই ফিচারগুলোকে এমনভাবে ইমপ্লিমেন্ট করে, যাতে পুরনো ব্রাউজারগুলোও সেগুলো সঠিকভাবে ব্যবহার করতে পারে।
Polyfill এর গুরুত্ব
- Cross-browser Compatibility: ES6 বা এর পরবর্তী সংস্করণে কিছু নতুন ফিচার যুক্ত হয়েছে, কিন্তু সব ব্রাউজার এগুলো সমর্থন করে না। Polyfill পুরনো ব্রাউজারগুলোর জন্য সেই নতুন ফিচারগুলোর সমাধান দেয়, যেমন -
Promise,Array.prototype.includes,Object.assign()ইত্যাদি। - Backward Compatibility: Polyfills পুরনো JavaScript ফিচারগুলিকে সমর্থন প্রদান করে, যাতে কোডটি পুরনো এবং নতুন ব্রাউজারে সমানভাবে কাজ করতে পারে।
- Feature Detection: Polyfills সাধারণত feature detection এর মাধ্যমে কাজ করে। অর্থাৎ, যদি একটি ব্রাউজার নতুন ফিচারটি সমর্থন না করে, তবে Polyfill সেই ফিচারটি সিমুলেট করে, যাতে ব্রাউজারটি সেই ফিচার ব্যবহার করতে পারে।
Polyfill উদাহরণ
ধরা যাক, আপনি Array.prototype.includes() মেথডটি ব্যবহার করতে চান যা ES6 এর একটি নতুন ফিচার। তবে এটি পুরনো ব্রাউজারে সমর্থিত নয় (যেমন Internet Explorer)। আপনি একটি Polyfill ব্যবহার করতে পারেন, যাতে ব্রাউজারটি এই ফিচারটি সঠিকভাবে সমর্থন করে।
উদাহরণ: Array.prototype.includes() Polyfill
// Polyfill for Array.prototype.includes
if (!Array.prototype.includes) {
Array.prototype.includes = function(element) {
return this.indexOf(element) !== -1;
};
}
// এখন ব্যবহার করা যেতে পারে
let arr = [1, 2, 3];
console.log(arr.includes(2)); // true
console.log(arr.includes(4)); // false
এই Polyfill টি যাচাই করে যে Array.prototype.includes মেথডটি যদি ব্রাউজারে না থাকে, তবে এটি একটি নতুন ফাংশন তৈরি করবে যা indexOf() মেথড ব্যবহার করে একই কার্যকারিতা প্রদান করবে।
Polyfill এর সাধারণ ব্যবহার
- New JavaScript Methods: ES6 এবং পরবর্তী সংস্করণে কিছু নতুন ফাংশন যেমন
Object.assign(),Array.from(),Promise,fetch()ইত্যাদি এসেছে। যদি পুরনো ব্রাউজার এ এসব ফাংশন সমর্থন না করে, তবে Polyfill ব্যবহার করে এসব ফাংশন বা মেথড পুরনো ব্রাউজারে সাপোর্ট করা সম্ভব। - CSS এবং HTML5: Polyfills শুধুমাত্র JavaScript এর জন্য নয়, CSS এবং HTML5 বৈশিষ্ট্যগুলির জন্যও ব্যবহৃত হয়, যেমন:
<picture>,<video>,localStorageইত্যাদি। - Web APIs: কিছু নতুন Web APIs যেমন
fetch(),IntersectionObserver,WebSocketsপুরনো ব্রাউজারে কাজ না করতে পারে, তাই Polyfill দিয়ে এগুলো সমর্থন করা হয়।
Polyfill Libraries
বিভিন্ন লাইব্রেরি রয়েছে যা আপনার কোডে Polyfill প্রয়োগ করতে সহায়তা করতে পারে। কিছু জনপ্রিয় Polyfill লাইব্রেরি:
- Babel: ES6 কোডটি পুরনো ব্রাউজারে রান করার জন্য ট্রান্সপাইল করে।
- core-js: এটি ES6 এর অনেক নতুন ফিচার এবং API এর Polyfill সরবরাহ করে।
- polyfill.io: এটি একটি CDN সেবা, যা আপনার প্রয়োজন অনুযায়ী শুধুমাত্র প্রয়োজনীয় Polyfills সরবরাহ করে।
উদাহরণ: core-js ব্যবহার
npm install core-js
import "core-js";
এটি core-js লাইব্রেরির মাধ্যমে ES6 এর সব নতুন ফিচারের Polyfill যোগ করবে।
Polyfills এবং Babel
Polyfill এবং Babel দুটি ভিন্ন কাজ করে, কিন্তু তারা একত্রে ব্যবহৃত হতে পারে। Babel ES6 বা তার পরবর্তী কোডগুলো পুরনো JavaScript ভার্সনে ট্রান্সপাইল করে, তবে এটি কিছু ফিচারের জন্য Polyfill সরবরাহ করে না। তাই, Polyfill ব্যবহারের মাধ্যমে আপনি আপনার কোডে সেই ফিচারগুলো পূর্ণ সমর্থন করতে পারেন।
Babel দিয়ে ES6 ট্রান্সপাইল করার পর যদি Polyfills দরকার হয়, তবে @babel/preset-env ব্যবহার করতে পারেন যা আপনার কোডের জন্য স্বয়ংক্রিয়ভাবে প্রয়োজনীয় Polyfills যোগ করবে।
npm install --save @babel/preset-env
{
"presets": [
[
"@babel/preset-env",
{
"useBuiltIns": "usage",
"corejs": 3
}
]
]
}
এখানে, useBuiltIns: "usage" নির্দেশ করে যে, শুধু প্রয়োজনীয় Polyfills যোগ করা হবে এবং corejs: 3 ব্যবহার করা হয়েছে সর্বশেষ core-js সংস্করণ।
Polyfill এবং Web Performance
Polyfills ব্যবহার করার সময়, অতিরিক্ত কোড ও ফাংশনালিটি যুক্ত হয় যা কিছুটা performance সমস্যার সৃষ্টি করতে পারে। অতএব, Polyfill গুলি শুধুমাত্র যখন দরকার হয়, তখনই ব্যবহৃত হওয়া উচিত। Feature Detection পদ্ধতি ব্যবহার করে প্রাসঙ্গিক Polyfill প্রয়োগ করা যেতে পারে।
Polyfills মূলত backward compatibility নিশ্চিত করার জন্য একটি শক্তিশালী টুল, যাতে আপনি ES6 বা পরবর্তী ফিচারগুলো ব্যবহার করতে পারেন এবং পুরনো ব্রাউজারে সেগুলো সঠিকভাবে কাজ করতে পারে।
Read more