HTML منی فائنگ کیسے کام کرتی ہے؟
منی فائر آپ کے ان پٹ کو ایک چھوٹی state machine سے پراسیس کرتا ہے جو preserve-as-is علاقوں (<pre>، <textarea>، <script>، <style>) اور قابل ترمیم علاقوں کے درمیان فرق کرتی ہے جہاں سفید جگہ اور تبصرے محفوظ طریقے سے ہٹائے جا سکتے ہیں۔
- preserve بلاکس کی tokenization. اسکینر ان پٹ کو کریکٹر بہ کریکٹر پڑھتا ہے اور جب
<pre>،<textarea>،<script>یا<style>کا opening tag ملتا ہے تو preserve حالت میں چلا جاتا ہے۔ ان ٹیگز کے اندر ہر چیز matching closing tag تک بائٹ بہ بائٹ محفوظ رہتی ہے۔ - قابل ترمیم سفید جگہ چھوٹی کرنا. قابل ترمیم علاقوں میں اسکینر اسپیس، ٹیب اور نئی سطروں کی ہر قطار کو ایک اسپیس تک چھوٹا کرتا ہے، پھر ٹیگ حدود کے ارد گرد سرخی اور دمی سفید جگہ کاٹتا ہے۔ نظر آنے والا متن اسی طرح دوبارہ بہتا ہے جیسے براؤزر اسے ظاہر کرتا ہے۔
- تبصرے ہٹانا. جب ٹوگل آن ہو تو
<!-- ... -->بلاکس ہٹا دیے جاتے ہیں۔ IE مشروط تبصرے (<!--[if IE]> ... <![endif]-->) preserve-conditional ٹوگل آن ہونے پر باقی رہتے ہیں، کیونکہ پرانے ای میل clients ابھی بھی انہیں استعمال کرتے ہیں۔ - بولین attributes چھوٹے کرنا.
checked="checked"،disabled="disabled"اورrequired="required"جیسی لمبی شکلیں صرف attribute نام تک سمٹ جاتی ہیں۔ HTML5 spec سادہ شکل کو معنوی طور پر یکساں مانتا ہے، اس لیے ظاہر ہونے والا DOM بدلتا نہیں۔ - بائٹ فرق کی رپورٹ. اصل اور منی فائڈ دونوں متن
new TextEncoder().encode(...).byteLengthسے ناپے جاتے ہیں — وہی UTF-8 بائٹ کاؤنٹ جو CDN یا HTTP سرور وائر پر دیکھے گا۔ میٹرک پٹی اصل سائز، منی فائڈ سائز، بچے بائٹس اور بچت فیصد دکھاتی ہے۔
HTML کو منی فائی کیوں کریں؟
- صفحات تیزی سے لوڈ ہوتے ہیں. چھوٹا HTML براؤزر تک جلدی پہنچتا ہے اور پارسر جلدی ختم ہوتا ہے۔ موبائل نیٹ ورکس پر بائٹس کی بچت براہ راست تیز First Contentful Paint اور بہتر Lighthouse اسکور میں بدلتی ہے۔
- CDN egress کم خرچ. CloudFront، Cloudflare اور Fastly گیگابائٹ egress کے حساب سے فیس لیتے ہیں۔ ماہانہ لاکھوں ویوز پر 20 فیصد HTML کمی invoice پر حقیقی بچت کرتی ہے، کسی image یا script optimization سے پہلے۔
- pull-request diffs صاف. repo میں commit کیا گیا pre-built static HTML ہر template تبدیلی پر indentation reflow سے شوروغل بن جاتا ہے۔ dist فولڈر میں منی فائڈ HTML تنگ PR diffs دیتا ہے جو سفید جگہ کے شور کے بجائے اصل content تبدیلیوں پر توجہ دیتا ہے۔
- چھوٹے embeds اور snippets. ای میل templates، third-party widget snippets اور JSON یا YAML configs میں محفوظ HTML سبھی ایک ہی بائٹ کمی سے فائدہ اٹھاتے ہیں۔ منی فائڈ embeds transactional emails کو ESP size caps سے نیچے رکھتے ہیں اور widget bundles سمیٹتے ہیں۔
عام استعمالات
HTML منی فائنگ تقریباً ہر static-site یا JAMstack build pipeline کے آخر میں ظاہر ہوتی ہے، اور چند runtime سیاق و سباق میں بھی جہاں source قابلیت پڑھ سے زیادہ بائٹس اہمیت رکھتے ہیں۔
- Static-site build مراحل: Eleventy، Hugo، Astro اور Next.js پروڈکشن بلڈز HTML کو dist فولڈر میں لکھنے سے پہلے منی فائر سے گزارتے ہیں تاکہ deployed bundle ماخذ سے چھوٹا ہو۔
- Transactional emails: ESP (SendGrid، Postmark، Mailgun) HTML body سائز محدود کرتے ہیں اور inline-CSS expansion یہ گنتی تیزی سے بڑھاتا ہے۔ بھیجنے سے پہلے body منی فائی کرنا message کو cap سے نیچے رکھتا ہے۔
- Embedded widgets: inline HTML کے طور پر بھیجے گئے third-party widgets اور chat snippets ہر بائٹ کمی سے فائدہ اٹھاتے ہیں کیونکہ host page انہیں ہر visit پر download کرتا ہے۔
ایک عملی مثال
دو-اسپیس indentation کے ساتھ 500-بائٹ verbose form snippet، قطاروں کے درمیان تین لائن بریکس، اوپر HTML comment block اور <input type="checkbox" checked="checked" /> پیسٹ کریں۔ ہر آپشن آن ہونے پر آؤٹ پٹ تقریباً 300 بائٹس پر سمٹتا ہے — تقریباً 40 فیصد بچت — جبکہ ظاہر ہونے والا DOM tree ماخذ کے برابر رہتا ہے۔
کیا منی فائنگ میرا HTML توڑ دے گی؟
نہیں، جب ڈیفالٹ ٹوگلز کے ساتھ استعمال کریں۔ منی فائر <pre>، <textarea>، <script> اور <style> ٹیگز کے مواد کو بالکل محفوظ رکھتا ہے، IE مشروط تبصرے اس ٹوگل کے آن ہونے پر برقرار رکھتا ہے، اور صرف وہی سفید جگہ چھوٹی کرتا ہے جسے HTML5 پارسر غیر اہم مانتا ہے۔ ظاہر ہونے والا DOM tree بائٹ بہ بائٹ ماخذ کے برابر ہے۔ جارحانہ ٹوگلز (خالی attributes ہٹانا) ان snippets کا رویہ بدل سکتے ہیں جو جان بوجھ کر value="" یا alt="" استعمال کرتے ہیں، اس لیے انہیں آن کریں تو آؤٹ پٹ دیکھیں۔
کیا یہ inline CSS اور JS منی فائی کرتا ہے؟
اس ٹول میں نہیں۔ Inline <style> اور <script> bodies کو بالکل محفوظ رکھا جاتا ہے تاکہ منی فائر string literal یا regex کے اندر سفید جگہ چھوٹی کر کے کوئی CSS rule یا JS statement نہ توڑے۔ CSS-specific منی فائنگ کے لیے CSS Minifier استعمال کریں؛ JS کے لیے JS Minifier۔ HTML Minifier markup خود پر توجہ دیتا ہے۔
میں کتنا بچا سکتا ہوں؟
ہاتھ سے لکھے HTML پر عام بچت 10 سے 30 فیصد تک ہوتی ہے، اس بات پر منحصر کہ ماخذ کتنا indentation، blank lines اور verbose attribute شکلیں استعمال کرتا ہے۔ Next.js جیسے frameworks سے pre-built static HTML اکثر 15 سے 25 فیصد بچاتا ہے کیونکہ framework پہلے سے کچھ optimization کرتا ہے لیکن انسانی پڑھنے کے قابل سفید جگہ چھوڑتا ہے۔ گہرے نیسٹنگ والے comment-بھرے templates اور email-style HTML 40 فیصد یا اس سے زیادہ تک پہنچ سکتے ہیں۔
کیا pre مواد محفوظ رہتا ہے؟
جی ہاں۔ منی فائر <pre>، <textarea>، <script> اور <style> بلاکس کو واضح طور پر preserve-as-is علاقوں کے طور پر tokenize کرتا ہے اور ان کے مواد کو بائٹ بہ بائٹ آؤٹ پٹ میں کاپی کرتا ہے۔ ان ٹیگز کے اندر سفید جگہ، لائن بریکس اور indentation بالکل برقرار رہتے ہیں، اس لیے code samples اور ASCII art منی فائنگ کے بعد بالکل ایک جیسے ظاہر ہوتے ہیں۔
براؤزر میں HTML منی فائنگ آپ کی build pipeline سادہ اور markup چھوٹا رکھتی ہے۔ اوپر کوئی HTML پیسٹ کریں، آپشن ٹوگلز ایڈجسٹ کریں، اور منی فائڈ آؤٹ پٹ کاپی یا ڈاؤن لوڈ کریں — کوئی اپلوڈ نہیں، کوئی اکاؤنٹ نہیں، کوئی vendor لائبریری نہیں۔