WebKit2
WebKit2 — это многопроцессный движок рендеринга веб-страниц, разработанный компанией Apple и являющийся эволюционным развитием движка WebKit. В отличие от своего предшественника, WebKit2 реализует модель, при которой взаимодействие с веб-контентом (вкладки, фреймы) и пользовательский интерфейс браузера выполняются в отдельных процессах операционной системы. Это обеспечивает повышенную стабильность, безопасность и отзывчивость браузера, так как сбой в одной вкладке не приводит к аварийному завершению всего приложения, а изолированный код веб-страницы имеет ограниченный доступ к системным ресурсам.
История
Разработка WebKit2 была начата компанией Apple в 2009 году. Основной мотивацией стало стремление решить фундаментальные проблемы архитектуры однопроцессных браузеров, где весь код — от интерфейса до обработки JavaScript — выполнялся в одном адресном пространстве. В такой системе ошибка в рендеринге сложной страницы или уязвимость в плагине (например, Adobe Flash) могли привести к зависанию или падению всего браузера, а также создать угрозу для операционной системы.
Первая публичная версия WebKit2 была представлена в апреле 2010 года. Она была реализована как часть Safari 5, выпущенного в июне 2010 года. В отличие от конкурирующих решений, таких как многопроцессная архитектура Google Chrome (основанная на собственном движке Blink, который позже отделился от WebKit), Apple выбрала более консервативный подход. WebKit2 не разбивает каждую вкладку на отдельный процесс, а использует модель с одним процессом для рендеринга и одним — для интерфейса, хотя в более поздних версиях (начиная с iOS 14 и macOS Big Sur) была внедрена поддержка изоляции отдельных сайтов (Site Isolation), что приблизило её к архитектуре Chrome.
Архитектура
Основное отличие WebKit2 от однопроцессного WebKit заключается в разделении функциональности на два основных процесса:
Процесс рендеринга (Web Content Process)
Этот процесс отвечает за загрузку, разбор HTML, CSS, выполнение JavaScript, построение DOM-дерева, компоновку и отрисовку веб-страницы. Он работает в изолированном окружении (песочнице), что ограничивает его прямой доступ к файловой системе, сети и другим ресурсам системы. Если в этом процессе происходит сбой (например, из-за ошибки в JavaScript или утечки памяти), он завершается, не затрагивая основной процесс браузера.
Процесс интерфейса (UI Process)
Этот процесс управляет окном браузера, панелями инструментов, адресной строкой, меню и другими элементами пользовательского интерфейса. Он взаимодействует с процессом рендеринга через специальный протокол IPC (Inter-Process Communication). UI-процесс не обрабатывает веб-контент напрямую, а лишь получает от процесса рендеринга готовые изображения страниц и команды для отображения.
Коммуникация между процессами
Для обмена данными между процессом рендеринга и процессом интерфейса используется асинхронный протокол, основанный на сообщениях. Этот протокол определяет, как передаются события ввода (клики мыши, нажатия клавиш), как запрашиваются ресурсы (изображения, скрипты) и как передаются обновления визуального представления страницы. Такой подход минимизирует задержки и позволяет UI-процессу оставаться отзывчивым даже при загрузке тяжёлых страниц.
Особенности и преимущества
Повышенная стабильность
Благодаря изоляции процессов, сбой в одной вкладке не приводит к аварийному завершению всего браузера. Пользователь может закрыть зависшую вкладку или дождаться её восстановления, не теряя данные в других вкладках.
Улучшенная безопасность
Изоляция процессов в сочетании с механизмом песочницы (sandbox) значительно усложняет злоумышленникам выполнение вредоносного кода. Даже если веб-страница содержит уязвимость, она не сможет получить доступ к данным других вкладок или к операционной системе.
Отзывчивость интерфейса
Поскольку обработка веб-контента происходит в отдельном процессе, тяжёлые страницы не блокируют работу интерфейса браузера. Пользователь может переключаться между вкладками, открывать новые окна и использовать меню без задержек.
Эффективное управление памятью
При закрытии вкладки операционная система полностью освобождает память, занятую её процессом рендеринга. В однопроцессных браузерах память могла фрагментироваться, и её освобождение было менее эффективным.
Применение
WebKit2 является основным движком рендеринга для следующих продуктов:
- Safari — браузер компании Apple для macOS, iOS, iPadOS и visionOS. Начиная с версии 5.0, Safari использует WebKit2.
- Встроенные браузеры (WKWebView) — на iOS и macOS все приложения, отображающие веб-контент (например, социальные сети, новостные агрегаторы, почтовые клиенты), обязаны использовать WKWebView, который базируется на WebKit2. Это требование Apple ввела для повышения безопасности и стабильности.
- Epiphany (GNOME Web) — браузер для рабочей среды GNOME, использующий WebKit2GTK+, порт WebKit2 для Linux.
- Qt WebEngine — модуль фреймворка Qt, основанный на Chromium, но некоторые проекты (например, Qt WebKit) продолжают использовать WebKit2.
Критика и ограничения
Несмотря на преимущества, архитектура WebKit2 имеет и недостатки:
- Потребление памяти — каждый процесс рендеринга требует собственного адресного пространства и копий библиотек. Это может приводить к более высокому общему потреблению оперативной памяти по сравнению с однопроцессными браузерами, особенно при большом количестве открытых вкладок.
- Сложность разработки — реализация IPC-протокола и управление жизненным циклом процессов требует от разработчиков браузера более сложного кода.
- Задержки при взаимодействии — асинхронная передача событий ввода может приводить к незначительным, но заметным задержкам (например, при быстром скроллинге или вводе текста), хотя современные версии WebKit2 минимизируют этот эффект.
- Отсутствие полной изоляции сайтов — в ранних версиях WebKit2 все вкладки одного домена могли использовать общий процесс рендеринга, что снижало уровень изоляции по сравнению с браузерами на основе Chromium. Эта проблема была частично решена в более поздних версиях.
Сравнение с другими архитектурами
| Характеристика | WebKit2 (Safari) | Chromium (Chrome, Edge) | Gecko (Firefox) |
|---|---|---|---|
| Модель процессов | Один процесс на вкладку (с возможностью Site Isolation) | Один процесс на вкладку (с возможностью Site Isolation) | Один процесс на вкладку (с возможностью Site Isolation) |
| Изоляция плагинов | Плагины (например, Flash) работают в отдельных процессах | Плагины работают в отдельных процессах | Плагины работают в отдельных процессах |
| Управление памятью | Освобождение памяти при закрытии вкладки | Освобождение памяти при закрытии вкладки | Освобождение памяти при закрытии вкладки |
| Сложность IPC | Собственный протокол | Собственный протокол (Mojo) | Собственный протокол (IPDL) |
Интересные факты
- Название «WebKit2» не означает вторую версию WebKit как таковую. Это обозначение архитектурного изменения, а не номера версии. Сам движок WebKit продолжает развиваться, и его версии нумеруются отдельно.
- Apple активно использует WebKit2 не только в браузере, но и в системе для отображения веб-контента в приложениях. Например, в iOS все приложения, использующие WKWebView, автоматически получают преимущества многопроцессной архитектуры.
- В 2013 году проект WebKit2GTK+ был адаптирован для использования в Linux, что позволило браузерам на этой платформе получить аналогичные преимущества.
Источники
- Официальная документация WebKit: «WebKit2 Architecture» (webkit.org)
- Статья «Introducing WebKit2» в блоге WebKit (2010)
- Руководство по WKWebView от Apple Developer
- Материалы конференции WWDC 2010: «Session 110 - WebKit 2»
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →