Transpiler در مقابل Ployfills – انجمن DEV
در توسعه وب مدرن، حفظ سازگاری در مرورگرها و محیط های مختلف یک چالش حیاتی است. دو ابزار مهمی که به توسعه دهندگان برای غلبه بر این مشکل کمک می کنند، ترانسپایلرها و پلی فیل ها هستند. هر دو هدف کارکرد کد در پلتفرم های مختلف را دنبال می کنند، آنها به روش های متفاوتی عمل می کنند.
ترانسپیلر چیست؟
ترانسپایلر ابزاری است که کدهای نوشته شده به یک زبان یا نحو را به زبان یا نحو دیگری تبدیل می کند. به خصوص، در زمینه جاوا اسکریپت، ترانسپایلرها جاوا اسکریپت مدرن (ES6+) را به نسخه های قدیمی جاوا اسکریپت (مانند ES5) تبدیل می کنند که توسط مرورگرهای قدیمی در محیط ها قابل درک است.
نکات کلیدی:
– تبدیل سطح نحو: یک transpiler کد را با تبدیل نحو و ویژگیهای جدیدتر (مثلاً توابع let، const، arrow) به ساختارهای معادل در نسخه قدیمیتر تبدیل میکند. این تضمین می کند که کد یکسان در محیط های مختلف اجرا می شود.
به عنوان مثال بابل – کد ES6+ مدرن را به ES5 تبدیل می کند.
کامپایلر TypeScript – تایپ اسکریپت را به جاوا اسکریپت ساده تبدیل می کند.
کد ES6
let greet = () => console.log("Hello World!");
یک ترانسپایلر آن را به ES5 تبدیل می کند، به نظر می رسد:
var greet = function () {
console.log("Hello World!");
Polyfills چیست؟
Polyfill قطعهای از کد است که قابلیتهای گمشده را در مرورگرها یا محیطهای قدیمیتر ارائه میکند. شکافهای موجود را «پر» میکند. یک ویژگی خاص به صورت بومی پشتیبانی نمی شود.
نکات کلیدی:
– شبیه سازی سطح ویژگی: برخلاف ترانسپایلر که نحو کد را تغییر میدهد، پلیفیل ویژگیهای گمشده را پیادهسازی میکند.
- Polyfill ها در زمان اجرا اضافه می شوند و کد منبع را تغییر نمی دهند.
به عنوان مثال – شامل polyfills
برای مرورگرهایی که از روش Array.prototype.includes پشتیبانی نمیکنند، میتوان یک polyfill به این صورت پیادهسازی کرد:
if(!Array.prototype.includes) {
Array.prototype.includes =
function(searchElement) {
return this.indexOf(searchElement) !== -1
}
}
تفاوت کلیدی
با استفاده از ترانسپایلر، میتوانیم اطمینان حاصل کنیم که کد با محیطهای قدیمیتر سازگار است، در حالی که پلیفیلها اجازه میدهند تا عملکردهای از دست رفته را اضافه کنیم. آنها با هم به توسعه دهندگان این امکان را می دهند که کدهای مدرن و کارآمد را بدون نگرانی در مورد شکستن پشتیبانی از پلتفرم های قدیمی بنویسند.