مهندسانی از Cloudflare، Mozilla، Facebook و Bloomberg
برای آزمایش
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