Apple Silicon и Android. Браузерный движок Servo получил поддержку нативных сборок и новых жестов

Apple Silicon и Android. Браузерный движок Servo получил поддержку нативных сборок и новых жестов

Новый цикл обновлений улучшает веб-совместимость и работу на мобильных платформах.

image

Проект Servo представил крупное обновление, охватившее ядро рендеринга, API для встраивания и инструменты для разработчиков. Команда внедрила поддержку новых возможностей веб-платформы, расширила функции servoshell для macOS и Android, ускорила CI и улучшила стабильность. Обновление стало одним из самых насыщенных за год, а многие изменения напрямую повышают совместимость с современными сайтами.

Среди ключевых новинок появились теги <source> в <video> и <audio>, потоковые интерфейсы CompressionStream и DecompressionStream, метод fetchLater() и Document.parseHTMLUnsafe(). В событиях UI появились свойства which и relatedTarget, а в dedicated workers теперь работают self.name и onmessageerror. Для HTMLMapElement добавлены поля name и areas.

На macOS сборки servoshell теперь поставляются как нативные Apple Silicon бинарники. Поддержка x86-64 остаётся возможной, но выводится из CI. На Android появилась активация экспериментального режима в два касания, поддержка софт-клавиатуры, обработка касаний, скрытие строки адреса и полноценный pinch-zoom с учётом позиций жестов и возможностью скролла с клавиатуры.

Одним из важных обновлений стало включение по умолчанию AbortController и AbortSignal. Их распространённость подтверждается статистикой webstatus.dev, где более 40% загрузок в Chrome проверяют наличие этих API. Параллельно включена поддержка XPath, включая расширенные запросы, переписанный парсер и функцию Copy → XPath в инспекторе.

Производительность улучшилась благодаря поддержке keyCode и charCode, что разблокировало работу Speedometer 3.0 и 3.1 на macOS. Через postMessage() и structuredClone() теперь можно передавать ImageData. В движке разметки появилось синтетическое полужирное начертание и более корректный выбор fallback-шрифтов для японского текста. Улучшена работа initial-scale, корректность border-radius и правила схлопывания отступов.

Для экосистемы важным шагом стало вынесение XPath в отдельный crate, а также появление функции WebView::take_screenshot. Добавлена поддержка vsync через RefreshDriver, что позволяет встраивающим приложениям управлять моментом отрисовки кадров. Несколько частей API получили обратимые изменения: переименованы методы zoom, удалены устаревшие функции, переработана система передачи input-событий. Теперь WebViewDelegate может точно знать, когда Servo завершает обработку каждого события.

Производительность также выросла благодаря исключению лишних перерасчётов при обновлении canvas и анимированных изображений. Исправлены падения на Android при кликах по контенту и ошибки на платформах, где запрещён JIT.

Команда перевела сборки macOS на arm64 и ускорила CI: проверки pull-request теперь выполняются примерно на 70% быстрее. Бенчмарки запускаются на выделенных серверах, что повышает точность данных Speedometer и Dromaeo. Параллельно ведётся работа над собственными быстрыми arm64-раннерами.