Cloudflare، Mozilla و Facebook BinaryAST را برای سرعت بخشیدن به بارگذاری جاوا اسکریپت توسعه می دهند

مهندسانی از Cloudflare، Mozilla، Facebook و Bloomberg پیشنهاد کرد قالب جدید binaryAST برای سرعت بخشیدن به تحویل و پردازش کد جاوا اسکریپت هنگام باز کردن سایت ها در مرورگر. BinaryAST فاز تجزیه را به سمت سرور منتقل می کند و یک درخت نحو انتزاعی از قبل تولید شده را فراهم می کند (AST). پس از دریافت BinaryAST، مرورگر می‌تواند فوراً به مرحله کامپایل، عبور از تجزیه کد منبع جاوا اسکریپت، ادامه دهد.

برای آزمایش تهیه شده پیاده سازی مرجع ارائه شده تحت مجوز MIT. از اجزای Node.js برای تجزیه استفاده می شود و کد بهینه سازی و تولید AST با Rust نوشته شده است. پشتیبانی از سمت مرورگر
BinaryAST در حال حاضر در دسترس است مجلس شبانه فایرفاکس. رمزگذار در BinaryAST می‌تواند هم در سطح ابزار نهایی سایت و هم برای بسته‌بندی اسکریپت‌های سایت‌های خارجی در کنار یک پروکسی یا شبکه تحویل محتوا استفاده شود. در حال حاضر فرآیند استانداردسازی BinaryAST توسط کارگروه آغاز شده است ECMA TC39، پس از آن فرمت می تواند با روش های فشرده سازی محتوای موجود مانند gzip و brotli همزیستی کند.

Cloudflare، Mozilla و Facebook BinaryAST را برای سرعت بخشیدن به بارگذاری جاوا اسکریپت توسعه می دهند

Cloudflare، Mozilla و Facebook BinaryAST را برای سرعت بخشیدن به بارگذاری جاوا اسکریپت توسعه می دهند

هنگام پردازش جاوا اسکریپت، زمان قابل توجهی در مرحله بارگذاری و تجزیه کد صرف می شود. با توجه به اینکه حجم جاوا اسکریپت دانلود شده در بسیاری از سایت های محبوب نزدیک به 10 مگابایت است (به عنوان مثال برای لینکدین - 7.2 مگابایت، فیس بوک - 7.1 مگابایت، جیمیل - 3.9 مگابایت)، پردازش اولیه جاوا اسکریپت تاخیر قابل توجهی را ایجاد می کند. مرحله تجزیه در سمت مرورگر نیز به دلیل ناتوانی در ساخت کامل AST در حین بارگیری کد، کند می شود (مرورگر باید منتظر بماند تا بلوک های کد بارگذاری کامل شوند، مانند پایان توابع، تا به دست آید. اطلاعات از دست رفته برای تجزیه عناصر فعلی).

آنها سعی می کنند با توزیع کد به صورت کمینه و فشرده و همچنین با کش کردن بایت کد تولید شده توسط مرورگر، مشکل را تا حدی حل کنند. در سایت‌های مدرن، کد اغلب به‌روزرسانی می‌شود، بنابراین کش کردن تنها تا حدی مشکل را حل می‌کند. WebAssembly می تواند یک راه حل باشد، اما نیاز به تایپ صریح در کد دارد و برای سرعت بخشیدن به پردازش کدهای جاوا اسکریپت موجود مناسب نیست.

گزینه دیگر ارائه بایت کد کامپایل شده آماده به جای اسکریپت های جاوا اسکریپت است، اما توسعه دهندگان موتور مرورگر مخالف آن هستند زیرا بایت کد شخص ثالث به سختی تأیید می شود، پردازش مستقیم آن می تواند منجر به طبقه بندی وب شود، خطرات امنیتی اضافی ایجاد می شود و توسعه یک قالب بایت کد جهانی مورد نیاز است.

BinaryAST به شما امکان می دهد بدون ایجاد بایت کد جدید یا تغییر زبان جاوا اسکریپت، در مدل توسعه و تحویل کد فعلی خود قرار بگیرید. اندازه داده ها در فرمت BinaryAST با کد فشرده شده فشرده جاوا اسکریپت قابل مقایسه است و سرعت پردازش با حذف فاز تجزیه متن مبدا به میزان قابل توجهی افزایش می یابد. علاوه بر این، فرمت اجازه می دهد تا با بارگذاری BinaryAST، کامپایل در بایت کد شود، بدون اینکه منتظر تکمیل همه داده ها باشیم. علاوه بر این، تجزیه در سمت سرور به شما امکان می دهد توابع استفاده نشده و کدهای غیرضروری را از نمایش BinaryAST برگشتی حذف کنید، که هنگام تجزیه در سمت مرورگر، زمان را هم برای تجزیه و هم برای انتقال ترافیک غیر ضروری تلف می کند.

یکی از ویژگی های BinaryAST همچنین توانایی بازیابی جاوا اسکریپت قابل خواندن است که دقیقاً مشابه نسخه اصلی نیست، اما از نظر معنایی معادل است و شامل نام های یکسانی از متغیرها و توابع است (BinaryAST نام ها را ذخیره می کند، اما اطلاعات مربوط به موقعیت ها را ذخیره نمی کند. کد، قالب بندی و نظرات). روی دیگر سکه ظهور بردارهای حمله جدید است، اما به گفته توسعه دهندگان، آنها بسیار کوچکتر و قابل کنترل تر از استفاده از جایگزین هایی مانند توزیع بایت کد هستند.

آزمایش‌های کد facebook.com نشان داد که تجزیه جاوا اسکریپت 10 تا 15 درصد از منابع CPU را مصرف می‌کند و تجزیه به زمان بیشتری نسبت به تولید بایت کد و تولید کد اولیه برای JIT نیاز دارد. در موتور SpiderMonkey، زمان ساخت کامل یک AST 500-800 میلی ثانیه طول می کشد و استفاده از BinaryAST این رقم را 70-90٪ کاهش داده است.
به طور کلی، برای اکثر آتش بازی های وب، هنگام استفاده از BinaryAST، زمان تجزیه جاوا اسکریپت در حالت بدون بهینه سازی 3-10٪ و زمانی که حالت نادیده گرفتن توابع استفاده نشده فعال است، 90-97٪ کاهش می یابد.
هنگام اجرای یک مجموعه آزمایشی جاوا اسکریپت 1.2 مگابایتی، استفاده از BinaryAST باعث شد تا زمان راه‌اندازی از 338 به 314 میلی‌ثانیه در سیستم دسکتاپ (Intel i7) و از سال 2019 به 1455 میلی‌ثانیه در دستگاه تلفن همراه (HTC One M8) افزایش یابد.

منبع: opennet.ru

اضافه کردن نظر