Когда в очередной раз Chrome съедает половину оперативной памяти вашего ноутбука (будто у вас открыта пара вкладок с документацией, а не весь интернет), поневоле задумываешься: а есть ли жизнь за пределами дуополии Blink и WebKit? Пока веб монополизируется гигантами, независимый движок Servo на базе Rust тихо, но настойчиво доказывает, что у браузерного мира может быть иное будущее. Июнь стал для проекта месяцем тектонических сдвигов: разработчики не просто пилили изолированные фичи, а научили движок выживать в суровых реалиях современного веба, где сайты пишутся с расчетом на единственный браузер. Давайте разберем, как Servo учится понимать «дикий» CSS, запускает фоновые задачи без боли и почему за этим стоит следить уже сегодня.
Введение: Новый виток эволюции независимого движка
Лето в мире разработчиков браузерных движков выдалось по-настоящему жарким. Проект Servo, известный своей миссией по созданию безопасного, параллельного и эффективного движка нового поколения на базе языка программирования Rust (где компилятор — это ваш самый строгий техлид, который не принимает код пока всё не станет идеально), продолжает стремительно сокращать разрыв между экспериментальными технологиями и суровой реальностью современного веба. Июнь стал месяцем масштабных интеграций, глубокого рефакторинга архитектуры и серьезного прогресса в поддержке стандартов W3C и WHATWG.
Для тех, кто следит за развитием независимых движков (вне экосистем Blink и WebKit), Servo представляет собой уникальный объект для изучения. В этом месяце команда инженеров сосредоточилась не просто на добавлении изолированных фич, а на улучшении реальной совместимости с существующими сайтами (Real World Compat), расширении возможностей CSS, а также на внедрении сложных концепций параллелизма, таких как SharedWorker. В этой статье мы подробно разберем ключевые достижения июня, посмотрим на технические детали и оценим, как эти изменения приближают Servo к повседневному использованию.
Представьте, что вы пишете SPA-приложение для редкой корпоративной CRM, которая должна работать на кастомном терминале без тяжелых Blink-подобных движков. Каждый сбой рендеринга здесь — это потерянные часы дебага. Именно для таких сценариев инженеры Servo и прокачивают стабильность движка.
Реальная совместимость (Real World Compat): победа над багами рендеринга
Историческая проблема всех альтернативных движков — это хрупкость при столкновении с «диким вебом» (ведь «работает на моей машине» здесь не прокатит, когда машина пользователя — это загадочный кастомный билд). Подавляющее большинство сайтов в интернете пишется и тестируется исключительно под Chrome (Blink) и Safari (WebKit). Из-за этого разработчики нередко используют нестандартное поведение, специфичные префиксы или полагаются на undocumented-особенности конкретных реализаций DOM. В июне команда Servo приложила серьезные усилия для того, чтобы движок стал более толерантным и устойчивым к подобным особенностям разметки.
Одним из ключевых направлений работы стала доработка подсистемы разбора селекторов и исправление краевых случаев в каскадных таблицах стилей (CSS Cascading). Были выявлены и устранены десятки критических ошибок, из-за которых популярные веб-ресурсы некорректно отображались при первичной загрузке.
Ключевые улучшения рендеринга:
- Обработка невалидного синтаксиса: В соответствии со спецификацией CSS Parsing, движок должен уметь грациозно восстанавливаться после ошибок (Error Recovery). Теперь парсер Servo корректно игнорирует поврежденные блоки объявлений, не обрушивая разбор остального файла стилей.
- Динамическое вычисление размеров (Layout Quirk Modes): Добавлена поддержка специфических режимов совместимости для старых HTML-документов с устаревшим или отсутствующим
DOCTYPE. - Псевдоклассы: Исправлены баги в работе сложных конструкций вроде
:not()и:nth-child()с комплексными аргументами, что позволило корректно отрисовывать элементы интерфейсов, сгенерированные современными UI-библиотеками (Tailwind CSS, Material-UI).
Но мало просто распарсить р