ابزارها و محیطهای برنامهنویسی به صورت دائم در حال تغییر و توسعه هستند. برای مثال مرورگرهای وب در هر نسخهی جدید قابلیتها و عملکردهای جدیدی برای استفاده توسعهدهندگان در اختیار آنها قرار میدهند.
به دلیل اینکه برای استفاده از این قابلیتها لازم است تا تمامی کاربران سیستم آخرین نسخه از مرورگر را نصب کنند، در بسیاری از موارد برنامهنویسان برای اطمینان از عملکرد صحیح برنامه نمیتوانند این قابلیتها را در برنامهی خود به کارگیری کنند.
یک راه حل برای این مشکل استفاده از Polyfill است.
Polyfillها کتابخانههایی هستند که بررسی میکنند آیا مرورگر یا زبان برنامهنویسی یا محیط اجرای برنامه یک افزونه یا قابلیت خاص را پشتیبانی میکند یا نه و اگر قابلیت خاص را نداشته باشد، آن را مشابه حالت اصلی شبیهسازی میکنند.
مثالهای Polyfill
از جمله مشهورترین Polyfillها در محیط مرورگر میتوان به موارد زیر اشاره کرد:
- core-js
- HTML5 Shiv
- -prefix-free
- Selectivizr
- Flexie
- CSS3 PIE
- JSON 2
- es5-shim
- FlashCanvas
- MediaElement.js
- BrowserID
- Webshims Lib
کارایی Polyfillها
استفاده از Polyfillها همیشه امکانپذیر نیست و همیشه کارایی قابل قبولی ندارند. اگر وابستگی برنامه به قابلیتهایی که Polyfill ارائه میکند زیاد باشد و برنامه به بار پزدازشی زیادی نیاز داشته باشد، معمولا Polyfillها کارایی کمی دارند و نمیتوانند عملکردهای با کیفیت و با اطمینانی را ارائه کند.
مثلا اگر یک افزونه php موجود نباشد، ممکن است بتوان با استفاده از یک Polyfill آن را شبیهسازی کرد ولی این عملکرد قطعا سرعت و کارایی نسخهی افزونه را نخواهد داشت و برای استفاده در سایتهایی که بار پردازشی و تعداد بازدیدکننده زیادی دارند ممکن است ناکارآمد باشد.