programmatūra · 6 min · 24.08.2026

Firefox 157 ieslēdz JPEG XL: 100 000 C++ rindu vietā Rust dekodētājs

Mozilla 24. augustā publicēja nodomu ieslēgt JPEG XL attēlu dekodēšanu pēc noklusējuma visās Firefox platformās. Tas notiks Firefox 157 laidienā septembra beigās. Kods, kas to darīs, nav tas pats, ko Mozilla vērtēja pirms trim gadiem. Oriģinālā libjxl implementācija C++ valodā aizņēma apmēram 100 000 rindu. To nomainīja jxl-rs, Rust valodā rakstīts dekodētājs, kuru libjxl projekts izstrādā kopā ar Google Research.

Tajā pašā dienā Google iesniedza savu paziņojumu Blink dzinim. Chrome plāno JPEG XL dekodēšanu ieslēgt visiem lietotājiem, izmantojot to pašu Rust bibliotēku. Safari formātu atbalsta jau no 2023. gada, taču WebKit joprojām lieto C++ dekodētāju.

Kāpēc vecais dekodētājs netika tālāk par karodziņu

Attēlu dekodētājs apstrādā datus, kurus lietotājs nav izvēlējies un nekontrolē. Katra atvērtā lapa var atsūtīt sabojātu failu. Tāpēc simts tūkstoši C++ rindu pārlūka iekšienē bija galvenais iebildums pret JPEG XL. jxl-rs uzdevums, kā to formulē libjxl komanda, ir dot drošu un ātru dekodētāju, kas saglabā saderību ar standartu ISO/IEC 18181.

Repozitorijs libjxl/jxl-rs ir atvērts ar BSD-3-Clause licenci, pirmais komits tajā ir no 2021. gada maija. Versija 0.6.0 pievienoja daudzpavedienu dekodēšanu. Repozitorijā šobrīd ir 594 zvaigznes un 40 atvērti ziņojumi. Mozilla fuzzing komanda dekodētāju pārbaudīja pirms ieslēgšanas Nightly kanālā un to atkārtos vēlreiz pirms iestatījuma image.jxl.enabled pārslēgšanas stabilajā versijā.

Kur JPEG XL uzvar un kur zaudē

Mozilla blogā publicēja salīdzinājumu ar AVIF, kvalitāti mērot ar SSIMULACRA 2. Fotogrāfijai pie vienādas kvalitātes AVIF fails bija 116 kB, JPEG XL 134 kB. Pie augstākas kvalitātes attiecība saglabājās: 227 kB pret 264 kB. Ekrānuzņēmumam atšķirība bija lielāka, proti, AVIF 11,6 kB pret JPEG XL 23,8 kB.

Bezzudumu režīmā rezultāts apgriežas otrādi. Tai pašai fotogrāfijai AVIF prasīja 1,76 MB, WebP 1,55 MB, JPEG XL 1,45 MB. Ekrānuzņēmumam starpība ir krasa: AVIF 164 kB, WebP 96 kB, JPEG XL 92 kB.

Mozilla nostāja ir sadalīta pa lietojumiem. JPEG XL tiek ieteikts bezzudumu attēliem, progresīvai ielādei un esošu JPEG failu papildu saspiešanai bez kvalitātes zuduma. AVIF dod mazākus failus tipiskai tīmekļa kvalitātei.

Progresīvā ielāde

Firefox implementācijā ir ieslēgta progresīvā attēlošana. Mozilla piemērā 135 kB attēls kļūst atpazīstams, kad ielādēti 4 % no faila, bet pie 50 % tas ir pilnīgi skaidrs. AVIF progresīvā ielāde ir pamata līmenī, tāpēc Mozilla ļoti lieliem attēliem iesaka samierināties ar JPEG XL izmēru.

Safari 2023. gada implementācijai progresīvās ielādes nebija. Firefox pusē formāts, pēc Mozilla vārdiem, ir sasniedzis funkciju paritāti ar pārējiem attēlu formātiem pārlūkā, tostarp animāciju.

Vecos JPEG var iepakot no jauna

Viena JPEG XL īpašība tīmekļa vietnēm ir svarīgāka par jaunu attēlu saspiešanu. Formāts prot pārņemt esošu JPEG failu un iepakot to mazākā apjomā tā, ka sākotnējos baitus var atgūt atpakaļ precīzi. Attēls netiek pārkodēts, tāpēc kvalitāte nemainās vispār. Vietnei ar desmit gadu attēlu arhīvu tas nozīmē, ka arhīvu var saspiest bez pārskatīšanas un bez riska, ka kāds attēls izskatīsies sliktāk.

AVIF šo darbību nepiedāvā. Tur vecs JPEG jāpārkodē. Katra pārkodēšana pieliek savus artefaktus virs tiem, kas failā jau ir.

Ceļš no Chrome 91 līdz Chrome 145

Google JPEG XL aiz karodziņa pievienoja Chrome 91. 2022. gada oktobrī Chromium komanda paziņoja, ka atbalstu izņems. Chrome 110 2023. gada sākumā kodu no Chromium izmeta. Pamatojums bija trīs apgalvojumi: eksperimentālie karodziņi nedrīkst palikt mūžīgi, ekosistēmas interese ir par mazu, formāts nedod pietiekamu ieguvumu pret jau esošajiem. Chromium kļūdu izsekotājā lēmums savāca vairāk nekā tūkstoš balsu par atgriešanu, pret to iebilda arī Free Software Foundation.

2026. gada februārī Chrome 145 JPEG XL atgriezās aiz karodziņa enable-jxl-image-format. Tagad Google to grib ieslēgt visiem, izmantojot Finch funkciju JXLImageFormat. Blink paziņojumā kā ieinteresētie uzņēmumi nosaukti Cloudinary un Shopify, riska sadaļā ierakstīts, ka īpašu risku nav.

Kas paliek ārpus laidiena

Firefox testi sedz dekodēšanas pareizību web-platform-tests komplektā, apmēram 30 gtest pārbaudes robežgadījumiem un mochitest pārbaudes progresīvajai ielādei. Ātrumu mēra Perfherder. Firefox Labs sadaļā izvēles rūtiņa JPEG XL ieslēgšanai ir kopš versijas 152, Nightly kanālā formāts strādā bez papildu darbībām.

Kodētājs abos paziņojumos nav minēts. Pārlūki JPEG XL failus lasīs, bet to ražošana paliek ārpus pārlūka, tātad tīmekļa vietņu pusē. Tas nozīmē, ka formāta izplatība atkarīga no CDN un attēlu apstrādes servisiem. Tieši tāpēc Cloudinary klātbūtne Google sarakstā ir svarīgāka par pašu karodziņu.

Līdz brīdim, kad JPEG XL strādā visos trīs dzinējos bez karodziņiem, vietnēm formātu jāpiegādā ar rezerves variantu. Praksē tas ir <picture> elements ar <source type="image/jxl"> pirmajā vietā un JPEG vai WebP zemāk, vai arī servera puses izvēle pēc Accept galvas. Firefox 157 iznāk septembra beigās. Chrome paziņojumā konkrēts versijas numurs nav norādīts, tāpēc precīzs datums, kad rezerves variantu varēs izmest, vēl nav zināms.

Pēdējais komits jxl-rs repozitorijā ir no 24. augusta, tās pašas dienas, kad publicēti abi paziņojumi.

Avoti

komentārisaruna

Komentāri

Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.

Pievieno komentāru

Tavs e-pasts netiks publicēts. Obligātie lauki atzīmēti.

vēl no programmatūrasaistītie