ارسال JPEG XL در Chrome

منتشرشده: ۶ اکتبر ۲۰۲۶

با خوشحالی اعلام می‌کنیم که Chrome از نسخه ۱۵۵ پشتیبانی از کدبندی قالب تصویر JPEG XL (.jxl) را ارائه می‌دهد. ‫JPEG XL قالب تصویری نسل بعدی است که برای برآورده کردن نیازهای توسعه‌دهندگان وب و عکاسان مدرن طراحی شده است. این قالب فشرده‌سازی ۳۰ تا ۵۰ درصد بهتر از JPEG، فشرده‌سازی بدون اتلاف، پشتیبانی داخلی از HDR، تغییر کد بدون اتلاف JPEG، و موارد دیگر را ارائه می‌دهد.

به‌طورکلی، توصیه می‌کنیم هم AVIF و هم JPEG XL را امتحان کنید تا بهترین نتایج را به‌دست آورید. انتظار داریم JPEG XL برای فشرده‌سازی با وفاداری بالا یا بدون افت کیفیت بیشترین کمک را بکند، به‌ویژه برای تصاویر عکاسی یا در مواردی که رمزگشایی پیش‌رونده با جزئیات دقیق ترجیح داده می‌شود.

در این پست، دلیل آوردن JPEG XL به Chrome، نحوه استفاده از Rust برای اطمینان از ایمنی حافظه در وهله اول، کارایی گسترده‌ای که باعث سرعت آن می‌شود، و آنچه این سفر درباره بازخورد توسعه‌دهندگان و اکوسیستم استانداردهای وب به ما می‌گوید را به اشتراک می‌گذاریم.

ایمنی در اولویت: پیاده‌سازی مجدد کدبند در Rust (jxl-rs)

رمزگشاهای تصویر یکی از مهم‌ترین و هدفمندترین سطوح حمله در هر مرورگر وب مدرن است. آن‌ها ساختارهای باینری پیچیده و نامطمئن را مستقیماً از شبکه پردازش می‌کنند و در فرایند رندر اجرا می‌شوند. ازنظر تاریخی، کدبندهای نوشته‌شده به زبان‌های ناامن حافظه مانند C++ مستعد آسیب‌پذیری‌هایی مثل خواندن خارج از محدوده، سرریز پشته، و اشکالات استفاده پس‌از آزاد کردن بوده‌اند.

مدل امنیتی ما بر پایه جعبه ایمنی و دفاع چندلایه است که با قانون دو هدایت می‌شود. بااین‌حال، محیط امن یک لایه دفاعی ثانویه است. برای ازبین بردن این خطرات امنیتی در منبع، jxl-rs را که پیاده‌سازی خالص Rust از رمزگشای JPEG XL است ادغام کرده‌ایم.

طراحی برای سرعت، بدون به‌خطر انداختن ایمنی

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

بخش اساسی عملکرد کدک‌های مدرن استفاده کامل از سخت‌افزار SIMD موجود در دستگاه‌های مدرن است. برای انجام این کار به‌صورت ایمن، target_feature_11 ویژگی Rust باید تثبیت می‌شد که امکان استفاده از دستورالعمل‌های SIMD را بدون نیاز به کد unsafe فراهم می‌کرد.

مرحله بعدی ساختن لایه انتزاعی SIMD (jxl_simd) بود که از کتابخانه C++ Highway (که خود در ابتدا برای libjxl، پیاده‌سازی مرجع C++ از JPEG XL، توسعه یافته بود) الهام گرفته شده بود. با هم، این توسعه‌ها امکان نوشتن کتابخانه چندسکویی را فراهم کردند که بهینه‌سازی‌های عملکرد SIMD را فدای چیز دیگری نمی‌کند، درحالی‌که عملیات ناامن را به تعداد کمی از مکان‌های بسیار بررسی‌شده محدود می‌کند.

بهینه‌سازی‌های عملکرد در ساخت jxl-rs بر بهینه‌سازی‌های ساخت libjxl استوار است. این شامل خط لوله پردازش عمومی برای مراحل عبور از مرزهای منطقه می‌شود، درحالی‌که کپی‌های داده را برای بیشینه‌سازی عملکرد سخت‌افزار به حداقل می‌رساند. عملکرد پیاده‌سازی مجدد Rust را در پلاتفرم‌های سخت‌افزاری مختلف در داشبورد عملکرد jxl-rs پیگیری کرده‌ایم.

پیاده‌سازی jxl-rs را با تکنیک‌های مختلف پیشرفته، ازجمله fuzzing و بررسی هوش مصنوعی کد، درستی‌سنجی کردیم و در کل سابقه پیاده‌سازی هیچ اشکال ایمنی حافظه پیدا نکردیم. این امر تأیید دیگری بر بهبودهای عظیمی است که Rust در ایمنی حافظه ارائه می‌دهد.

بازخورد توسعه‌دهندگان و «پروژه تعامل‌پذیری»

تیم Chrome بازخوردهای توسعه‌دهندگان وب را از طیف گسترده‌ای از کانال‌ها، مانند اشکالات، نظرسنجی‌ها، پروژه نشان‌های توسعه‌دهنده، و پروژه Interop درنظر می‌گیرد. تصمیم ما برای عرضه JPEG XL براساس بازخوردها و درخواست‌های مداوم توسعه‌دهندگان وب بود که بیشتر در «فرایند تعامل‌پذیری» مشهود بود، جایی که در سال ۲۰۲۶ و چندین سال قبل‌از آن، پیشنهاد محبوبی بود.

برای اطمینان از اینکه قالب در مرورگرهای مختلف قابل‌تعامل است، در تحقیق Interop 2026 JPEG XL شرکت کرده‌ایم تا مطمئن شویم همه ویژگی‌های JPEG XL در مرورگرها پوشش آزمایشی دارند و این آزمایش‌ها در Chrome موفقیت‌آمیز هستند.

امتحان کنید

با ورود رسمی JPEG XL به Chrome، وب سریع‌تر، غنی‌تر، و ایمن‌تر می‌شود. توسعه‌دهندگان، محتواسازان، و مالکان پلاتفرم را تشویق می‌کنیم که از تصاویر و پویانمایی‌های .jxl در خطوط لوله خود استفاده کنند.

آن را امتحان کنید، گزارش اشکال ثبت کنید، و به ما کمک کنید به ساختن وب سریع‌تر و ایمن‌تر برای همه ادامه دهیم.

سپاس‌گزاری‌ها

از همه افرادی که در jxl-rs یا ادغام آن در Chrome مشارکت داشتند، به‌ویژه از Helmut Januschka به‌خاطر مشارکت‌های قابل‌توجه هم در ادغام Chrome و هم در jxl-rs، و از Martin Bruse،‏ Zoltan Szabadka،‏ Sami Boukortt، و Wonwoo Choi به‌خاطر مشارکت‌های قابل‌توجه در خود jxl-rs تشکر می‌کنیم.