Cloudflare، Mozilla اور Facebook JavaScript لوڈنگ کو تیز کرنے کے لیے BinaryAST تیار کرتے ہیں۔

Cloudflare، Mozilla، Facebook اور Bloomberg کے انجینئرز پیش کردہ نیا فارمیٹ ثنائی براؤزر میں سائٹس کھولتے وقت جاوا اسکرپٹ کوڈ کی ترسیل اور پروسیسنگ کو تیز کرنے کے لیے۔ BinaryAST تجزیہ کے مرحلے کو سرور کی طرف لے جاتا ہے اور پہلے سے تشکیل شدہ تجریدی نحوی درخت فراہم کرتا ہے (AST)۔ BinaryAST موصول ہونے پر، براؤزر جاوا اسکرپٹ کے سورس کوڈ کی تجزیہ کو نظرانداز کرتے ہوئے فوری طور پر تالیف کے مرحلے پر جا سکتا ہے۔

جانچ کے لیے تیار ہے MIT لائسنس کے تحت فراہم کردہ حوالہ کا نفاذ۔ پارس کرنے کے لیے، Node.js اجزاء استعمال کیے جاتے ہیں، اور AST کو بہتر بنانے اور بنانے کا کوڈ Rust میں لکھا جاتا ہے۔ براؤزر سائیڈ سپورٹ
BinaryAST پہلے سے ہی دستیاب ہے۔ رات کی اسمبلی فائر فاکس۔ BinaryAST میں انکوڈر کو فائنل سائٹ کے ٹول کٹ کی سطح پر، اور پراکسی یا مواد کی ترسیل کے نیٹ ورک کے اطراف میں بیرونی سائٹس کے اسکرپٹس کی پیکیجنگ کے لیے استعمال کیا جا سکتا ہے۔ فی الحال، ورکنگ گروپ کی طرف سے BinaryAST کو معیاری بنانے کا عمل شروع ہو چکا ہے۔ ECMA TC39، جس کے بعد فارمیٹ دیئے گئے مواد کو کمپریس کرنے کے موجودہ طریقوں جیسے کہ gzip اور brotli کے ساتھ ایک ساتھ رہ سکتا ہے۔

Cloudflare، Mozilla اور Facebook JavaScript لوڈنگ کو تیز کرنے کے لیے BinaryAST تیار کرتے ہیں۔

Cloudflare، Mozilla اور Facebook JavaScript لوڈنگ کو تیز کرنے کے لیے BinaryAST تیار کرتے ہیں۔

JavaScript پروسیسنگ میں وقت کی ایک اہم مقدار کوڈ کے لوڈنگ اور پارس کرنے کے مرحلے میں لگتی ہے۔ اس بات پر غور کرتے ہوئے کہ بہت سی مشہور سائٹوں پر جاوا اسکرپٹ کی ڈاؤن لوڈ کی گئی رقم 10 MB تک پہنچ رہی ہے (مثال کے طور پر، LinkedIn کے لیے - 7.2 MB، Facebook - 7.1 MB، Gmail - 3.9 MB)، JavaScript کی ابتدائی پروسیسنگ میں نمایاں تاخیر ہوتی ہے۔ براؤزر سائیڈ پر پارس کرنے کا مرحلہ بھی سست پڑ جاتا ہے کیونکہ کوڈ کے لوڈ ہونے پر فلائی پر AST کو مکمل طور پر بنانا ناممکن ہو جاتا ہے (براؤزر کو لوڈنگ مکمل ہونے کے لیے کوڈ بلاکس کا انتظار کرنا پڑتا ہے، مثال کے طور پر، فنکشنز کا اختتام، موجودہ عناصر کو پارس کرنے کے لیے غائب معلومات حاصل کرنے کے لیے)۔

جزوی طور پر، وہ کوڈ کو کم سے کم اور کمپریسڈ شکل میں تقسیم کرنے کے ساتھ ساتھ براؤزر کے ذریعے تیار کردہ بائی کوڈ کو کیش کرکے مسئلہ حل کرنے کی کوشش کرتے ہیں۔ جدید سائٹس پر، کوڈ کو اکثر اپ ڈیٹ کیا جاتا ہے، لہذا کیشنگ سے مسئلہ صرف جزوی طور پر حل ہوتا ہے۔ WebAssembly اس کا حل ہو سکتا ہے، لیکن اس کے لیے کوڈ میں واضح ٹائپنگ کے استعمال کی ضرورت ہوتی ہے اور یہ پہلے سے موجود JavaScript کوڈ کی پروسیسنگ کو تیز کرنے کے لیے موزوں نہیں ہے۔

ایک اور آپشن یہ ہے کہ جاوا اسکرپٹ اسکرپٹس کے بجائے پہلے سے مرتب شدہ بائیک کوڈ بھیجیں، لیکن براؤزر انجن کے ڈویلپرز اس کی مخالفت کرتے ہیں کیونکہ تھرڈ پارٹی بائیک کوڈ کی تصدیق کرنا مشکل ہے، اس کی براہ راست پروسیسنگ ویب لیئرنگ کا باعث بن سکتی ہے، اضافی سیکورٹی خطرات پیدا ہوتے ہیں، اور یونیورسل کی ترقی کو روکنا ہے۔ bytecode فارمیٹ درکار ہے۔

BinaryAST آپ کو نیا بائی کوڈ بنائے بغیر اور JavaScript کی زبان کو تبدیل کیے بغیر موجودہ کوڈ کی ترقی اور ترسیل کے ماڈل میں فٹ ہونے کی اجازت دیتا ہے۔ BinaryAST فارمیٹ میں ڈیٹا کا سائز کمپریسڈ minified JavaScript کوڈ سے موازنہ کیا جا سکتا ہے، اور سورس کوڈ پارس کرنے کے مرحلے کے اخراج کی وجہ سے پروسیسنگ کی رفتار میں نمایاں اضافہ ہوا ہے۔ اس کے علاوہ، فارمیٹ تمام ڈیٹا کے موصول ہونے کا انتظار کیے بغیر، BinaryAST لوڈ ہونے کے بعد تالیف کو بائی کوڈ کرنے کی اجازت دیتا ہے۔ اس کے علاوہ، سرور سائیڈ پر پارس کرنے سے آپ غیر استعمال شدہ فنکشنز اور اضافی کوڈ کو واپس کیے گئے BinaryAST نمائندگی سے خارج کر سکتے ہیں، جسے براؤزر کی طرف سے پارس کرنے پر، پارس کرنے اور اضافی ٹریفک منتقل کرنے میں وقت لگتا ہے۔

BinaryAST کی ایک خصوصیت پڑھنے کے قابل JavaScript کو بحال کرنے کی صلاحیت بھی ہے جو اصل ورژن سے مماثل نہیں ہے، لیکن لفظی طور پر مساوی ہے اور اس میں متغیرات اور افعال کے ایک جیسے نام شامل ہیں (BinaryAST نام محفوظ کرتا ہے، لیکن کوڈ، فارمیٹنگ میں پوزیشنوں کے بارے میں معلومات محفوظ نہیں کرتا ہے۔ اور تبصرے)۔ سکے کا دوسرا رخ نئے اٹیک ویکٹرز کا ابھرنا ہے، لیکن ڈویلپرز کے مطابق، یہ بائیک کوڈ ڈسٹری بیوشن جیسے متبادل کے مقابلے میں بہت چھوٹے اور زیادہ قابل کنٹرول ہیں۔

Facebook.com کوڈ ٹیسٹ سے پتہ چلتا ہے کہ CPU وسائل کا 10-15% JavaScript پارس کرنے پر خرچ ہوتا ہے اور JIT کے لیے بائیک کوڈ جنریشن اور ابتدائی کوڈ جنریشن کے مقابلے میں پارس کرنے میں زیادہ وقت لگتا ہے۔ SpiderMonkey انجن میں، AST کو مکمل طور پر بنانے میں 500-800 ms لگتا ہے، اور BinaryAST کے استعمال نے اس اعداد و شمار کو 70-90% تک کم کر دیا۔
عام طور پر، زیادہ تر ویب فائر ورکس کے لیے، BinaryAST کا استعمال کرتے وقت، JavaScript پارس کرنے کا وقت بغیر اصلاح کے موڈ میں 3-10% اور غیر استعمال شدہ فنکشنز کو نظر انداز کرنے کے موڈ کو فعال کرنے پر 90-97% تک کم ہوجاتا ہے۔
1.2 MB JavaScript ٹیسٹ سوٹ کو انجام دیتے وقت، BinaryAST کا استعمال کرتے ہوئے ایک ڈیسک ٹاپ سسٹم (Intel i338) پر سٹارٹ اپ کے آغاز کا وقت 314 سے 7 ms تک اور موبائل ڈیوائس (HTC One M2019) پر 1455 سے 8 ms تک تیز ہو گیا۔

ماخذ: opennet.ru

نیا تبصرہ شامل کریں