← На главную

Ladybird: отладка JS в фоне, встроенный просмотр PDF и оптимизация GPU

02.05.2026 20:46 · hackernews

В апреле команда Ladybird объединила 333 пул-реквеста от 35 участников, причем семь из них впервые сделали коммит в проект. Браузер полностью финансируется за счет сторонников открытого интернета, и сейчас к спонсорам присоединились новые партнеры.

Встроенный просмотрщик PDF через pdf.js теперь работает inline с поддержкой навигации по страницам, выделения текста и поиска. Профилирование загрузки Intel ISA Manual помогло оптимизировать кеширование typed-array и обработку :has(). Автодополнение адресной строки стало умным: SQLite-хранилище HistoryStore сохраняет историю посещений, фавиконы и подсказки от поисковиков. HTML-парсер перешел на инкрементальную обработку потока данных, а спекулятивный парсер заранее подгружает скрипты и стили, которые понадобятся, если основной поток встанет в ожидании.

Компиляция JavaScript теперь идет на фоне на отдельных потоках, сокращая время ответа в 200 мс даже на YouTube. Каждый Navigable рендерится на отдельном потоке, а iframes больше не блокируют родительское дерево. Переход на C++/Rust позволил сохранить инструкции вызова и возврата в интерпретаторе AsmInt, а новый регистровый аллокатор работает как простая стопка LIFO. Кеширование итерации for-in и оптимизации редких структур ускорили Speedometer 2 на 9% и Speedometer 3 до 4.22. Парсер использует zero-copy для обменных объектов, а новые типы вроде Lazy JS::Substring ускорили работу с регулярными выражениями.

Новый фронтенд на GTK4 и libadwaita получил автодополнение, управление вкладками и поддержку тем. Управление закладками теперь идет через about:bookmarks с возможностью экспорта и перетаскивания. Реализованы API Cache и CacheStorage с поддержкой всех методов работы с кешем. CSS добавил поддержку image-set(), корректную интерполяцию цветов по стандарту css-color-4 и обработку legacy-атрибутов через каскад. Исправлено отображение списков в RTL, выровнены базовые линии flex-контейнеров, а SVG-штриховки наконец-то анимируются плавно.

Сетевой стек теперь не блокирует основной цикл, а либDNS делает параллельные запросы A и AAAA. Мемориальные операции в RequestServer оптимизированы, что убрало задержки при загрузке видео. В заголовках Accept браузера теперь указаны форматы AVIF и WebP. Работа с :has() стала в десятки раз быстрее благодаря оптимизации invalidation. На Linux Vulkan-сборках изображения теперь держатся в GPU через dmabuf без вынужденного копирования в память процессора. Все приложения используют единый мемориальный аллокатор mimalloc v2.

Самые заметные улучшения видны на Reddit и YouTube: галереи изображений работают корректно, бесконечная прокрутка стала плавнее. На других сайтах вроде gocomics.com, yandex.com/maps и strava.com исправлены баги с загрузкой картинок, WebGL и авторизацией. Счет Web Platform Tests вырос на 63 726 подтестов, большая часть которых — за счет интеграции официального ECMAScript-свода test262. С 97.8% прохождения тестов JS соответствие стандартам теперь замеряется прямо в рамках общей платформы. Теперь Rust обязателен, а система сборки GN удалена в пользу CMake. Добавлена компиляция с обнулением стека для улучшения работы мусоросборщика и исправлена выделение лигатур.

Читать оригинал →