اس ٹول کے بارے میں
JavaScript minification غیر ضروری حروف کو ہٹا کر اور (مناسب منیفائر کے ساتھ) مقامی متغیرات کو چھوٹے ناموں میں تبدیل کرکے سورس کوڈ کا سائز کم کرتا ہے۔ پہلی قسم - خالی جگہ اور تبصرہ ہٹانا - سیدھا اور خطرے سے پاک ہے۔ دوسرا — متغیر نام بدلنا — دائرہ کار کے قواعد کو سمجھنے کی ضرورت ہے اور یہ وہی ہے جو Terser اور esbuild جیسے پروڈکشن minifiers بہترین کام کرتے ہیں۔
یہ ٹول محفوظ تخفیف پر توجہ مرکوز کرتا ہے: تبصروں کو ہٹانا، خالی جگہ کو ختم کرنا، بے کار سیمیکولنز کو ہٹانا، اور واضح نمونوں کو چھوٹا کرنا۔ متغیر کا نام تبدیل کرنا قدامت پسند ہے — واضح دائرہ کار میں صرف مقامی متغیرات کو چھوا جاتا ہے، اور بیرونی طور پر حوالہ شدہ ناموں کو ہی چھوڑ دیا جاتا ہے۔ نتیجہ عملی طور پر ماخذ سے مماثل ہے۔
پروڈکشن گریڈ منیفیکیشن کے لیے، وقف شدہ ٹولز (Terser, esbuild, swc) مکمل ECMAScript اسکوپ ماڈل کو سمجھتے ہیں اور نمایاں طور پر چھوٹا آؤٹ پٹ تیار کرتے ہیں۔ یہ ٹول فوری براؤزر سائیڈ منیفیکیشن کے لیے ہے جب مکمل بلڈ سیٹ اپ دستیاب نہ ہو۔
جاوا اسکرپٹ کو کیوں Minify کریں۔
JavaScript بنڈل عام طور پر جدید ویب پیج پر سب سے بڑا واحد وسیلہ ہوتے ہیں۔ منفیکیشن معمول کے مطابق 30-60% سائز میں کمی پیدا کرتی ہے بمقابلہ غیر منبع شدہ ذریعہ۔ gzip یا Brotli کے ساتھ مل کر، کمی کچھ سکڑ جاتی ہے، لیکن یہ مجموعہ اب بھی قابل پیمائش بائٹس بچاتا ہے — خاص طور پر سست کنکشن والے صارفین کے لیے۔
تیز جاوا اسکرپٹ کا مطلب انٹرایکٹو کا تیز وقت بھی ہے۔ چھوٹے اسکرپٹ تیزی سے ڈاؤن لوڈ ہوتے ہیں، تیزی سے تجزیہ کرتے ہیں اور جلد عمل میں آتے ہیں۔ ان سائٹس کے لیے جہاں TTI باؤنس ریٹ اور SEO کی درجہ بندی کو متاثر کرتا ہے، منیفیکیشن دستیاب سب سے سستی جیتوں میں سے ایک ہے۔
تکنیکی تفصیلات
منیفائر ایک پارسر کا استعمال کرتے ہوئے JavaScript کو ٹوکنائز کرتا ہے جو ECMAScript نحو کا احترام کرتا ہے۔ تبصرے (سنگل لائن اور ملٹی لائن) کو ہٹا دیا جاتا ہے سوائے لائسنس کے تبصروں کے جن کا نشان /*! سابقہ وائٹ اسپیس کو منہدم کر دیا گیا ہے سوائے اس کے جہاں نحوی طور پر ضرورت ہو (شناخت کنندگان کے درمیان، مطلوبہ الفاظ کے بعد)۔
قدامت پسند متغیر کا نام تبدیل کرنا مقامی متغیرات کو سیدھے دائروں میں مختصر کرتا ہے۔ عالمی، برآمدات، اور درآمد شدہ ناموں کو تبدیل نہیں کیا گیا ہے - جو بیرونی حوالہ جات کو توڑ دے گا۔ گہرے نام کی تبدیلی کے لیے، Terser کا استعمال کریں یا مناسب ماڈیول آگاہی تجزیہ کے ساتھ esbuild کریں۔
ایج کیسز: آٹومیٹک سیمیکولن انسرشن (ASI) کا مطلب ہے کہ پروگرام کے رویے کو تبدیل کرنے سے بچنے کے لیے منیفائر کو کچھ سیاق و سباق میں نئی لائنوں کو محفوظ رکھنا چاہیے۔ ٹیمپلیٹ لٹریلز، ریجیکس لٹریلز، اور جے ایس ایکس (اگر ان پٹ میں یہ شامل ہے) بالکل محفوظ ہیں کیونکہ ان کے مواد کو سکیڑنا محفوظ نہیں ہوسکتا ہے۔
اکثر پوچھے جانے والے سوالات
- کیا minification میرے کوڈ کے کام کرنے کے طریقے کو تبدیل کرتا ہے؟
- نہیں، منیفیکیشن وائٹ اسپیس اور تبصروں کو ہٹاتا ہے، جو عملدرآمد کو متاثر نہیں کرتا ہے۔ متغیر مختصر کرنا (منگلنگ) مقامی متغیرات کا نام بدلتا ہے لیکن رویے کو محفوظ رکھتا ہے۔ عالمی متغیرات اور برآمد شدہ ناموں کو برقرار رکھا گیا ہے۔
- کیا مجھے ترقی یا پیداوار میں کم کرنا چاہئے؟
- پیداوار میں صرف minified کوڈ استعمال کریں۔ ترقی کے دوران، اصل پڑھنے کے قابل کوڈ کو رکھیں۔ زیادہ تر تعمیراتی ٹولز (ویب پیک، وائٹ، ایس بلڈ) پروڈکشن کی تعمیر کے عمل کے حصے کے طور پر خود بخود منیفیکیشن کو ہینڈل کرتے ہیں۔
- minification اور obfuscation میں کیا فرق ہے؟
- اگر فارمیٹ کیا جائے تو کوڈ کو فعال طور پر پڑھنے کے قابل رکھنے کے دوران Minification سائز کو کم کرتا ہے۔ مبہم جان بوجھ کر کوڈ کو سمجھنا مشکل بناتا ہے (سٹرنگ انکوڈنگ، کنٹرول فلو فلیٹننگ)۔ یہ ٹول سائز میں کمی پر توجہ مرکوز کرتا ہے نہ کہ ابہام پر۔
- مجھے سائز میں کتنی کمی کی توقع کرنی چاہئے؟
- عام طور پر gzip سے پہلے 30-60%۔ طویل متغیر ناموں کے ساتھ اچھی طرح سے تبصرہ کردہ کوڈ سب سے بڑی کمی دیکھتا ہے۔ gzip کمپریشن کے ساتھ مل کر، JavaScript فائلیں اکثر اصل ماخذ سے 80-90% چھوٹی ہوتی ہیں۔
- کیا میرا کوڈ سرور پر اپ لوڈ ہے؟
- نہیں، منیفائر آپ کے براؤزر میں چلتا ہے۔
- میرا JavaScript کتنا چھوٹا ہو گا؟
- عام طور پر 30-60% کمی۔ طویل شناخت کنندگان کے ساتھ متغیر بھاری کوڈ زیادہ کمپریس کرتا ہے۔ ایکسپریشن ہیوی کوڈ کم کمپریس کرتا ہے۔
- کیا مجھے ہاتھ سے کم کرنا چاہیے؟
- کبھی نہیں۔ ماخذ میں پڑھنے کے قابل جاوا اسکرپٹ کو برقرار رکھیں۔ تعمیراتی قدم کے طور پر یا تعیناتی کے حصے کے طور پر منیفیکیشن چلائیں۔
- کیا یہ TypeScript پر کام کرتا ہے؟
- Tsc یا esbuild کا استعمال کرتے ہوئے TypeScript کو پہلے JavaScript میں مرتب کرنے کی ضرورت ہے۔ ایک بار مرتب ہونے کے بعد، نتیجے میں جاوا اسکرپٹ کو کم کیا جا سکتا ہے۔