WebCore
WebCore — это программный фреймворк с открытым исходным кодом, предназначенный для отрисовки веб-страниц и выполнения веб-стандартов. Он является одним из основных компонентов браузерного движка WebKit, который, в свою очередь, используется в ряде популярных веб-браузеров, включая Safari (Apple) и ряд других приложений на платформах iOS и macOS. WebCore отвечает за разбор HTML, CSS, работу с DOM (Document Object Model) и рендеринг контента на экране.
История
Происхождение от KHTML
История WebCore начинается с проекта KHTML — движка для отрисовки веб-страниц, разработанного в рамках рабочей среды KDE (K Desktop Environment) для операционных систем на базе Unix. KHTML был создан в конце 1990-х годов как альтернатива другим движкам, таким как Gecko (Mozilla) и Trident (Internet Explorer). В 2002 году компания Apple Inc. искала движок для своего нового браузера Safari, который должен был заменить устаревший Internet Explorer для Mac. Разработчики Apple выбрали KHTML из-за его модульной архитектуры, скорости и лицензии LGPL (GNU Lesser General Public License), которая позволяла использовать код в проприетарных продуктах.
Форк и создание WebKit
В 2003 году Apple создала ответвление (форк) от кода KHTML, назвав его WebKit. Внутри WebKit был выделен компонент WebCore, который стал отвечать за разбор и рендеринг, а также JavaScriptCore — для выполнения скриптов. Первоначально WebCore был тесно связан с KHTML, но вскоре Apple начала вносить значительные изменения: была добавлена поддержка новых стандартов (например, CSS 2.1, DOM Level 2), улучшена производительность и реализована интеграция с графической подсистемой macOS (CoreGraphics и CoreAnimation). Несмотря на то, что проект был форком, Apple поддерживала обратную совместимость с KHTML до 2007 года, когда различия стали слишком велики.
Развитие и стандартизация
В 2005 году Apple открыла исходный код WebKit, что позволило сторонним разработчикам использовать его в своих проектах. В 2008 году компания Google, используя WebKit, создала собственный браузер Chrome, взяв за основу WebCore и заменив JavaScriptCore на собственный движок V8. Это привело к значительному росту популярности WebCore, так как Chrome быстро завоевал долю рынка. В 2013 году Google объявила о создании форка WebKit — Blink, который был основан на WebCore, но с рядом изменений, направленных на многопроцессную архитектуру и оптимизацию для Chrome. Таким образом, WebCore стал основой для двух крупнейших браузерных движков: WebKit (Safari) и Blink (Chrome, Edge, Opera).
Архитектура и компоненты
Основные функции
WebCore выполняет ключевые задачи, необходимые для отображения веб-страницы:
- Разбор HTML (HTML Parser): Преобразует HTML-код в DOM-дерево — иерархическую структуру, представляющую элементы страницы.
- Разбор CSS (CSS Parser): Обрабатывает каскадные таблицы стилей, применяя правила к DOM-узлам и вычисляя итоговые стили (каскад, наследование, специфичность).
- Работа с DOM: Предоставляет API для JavaScript-кода, позволяя манипулировать структурой и содержимым страницы (например, добавление, удаление, изменение элементов).
- Рендеринг (Layout и Painting): Вычисляет геометрию элементов (размеры, позиции) и отрисовывает их на экране, используя графические библиотеки операционной системы.
- Поддержка SVG и Canvas: Обеспечивает рендеринг векторной графики (SVG) и растровых изображений через элемент
<canvas>. - Обработка событий: Управляет пользовательскими событиями (клики, нажатия клавиш, касания) и их передачей в DOM.
Взаимодействие с другими компонентами
WebCore работает в тесной связке с другими частями браузерного движка:
- JavaScriptCore (или V8): WebCore не выполняет JavaScript напрямую, но предоставляет интерфейсы для вызова функций скриптового движка. Например, при изменении DOM через JavaScript, WebCore обновляет рендеринг.
- WebKit Ports: WebCore является платформонезависимым ядром. Для интеграции с конкретной операционной системой используются «порты» (ports), которые реализуют графический вывод, обработку шрифтов, работу с сетью и т.д. Например, для macOS используется порт WebKit2, а для iOS — UIWebView.
- Сетевой стек: WebCore использует сетевые компоненты (например, CFNetwork на macOS или libcurl на Linux) для загрузки ресурсов (HTML, CSS, изображения, шрифты).
Классификация и версии
Версии WebCore
WebCore не имеет собственной нумерации версий, отдельной от WebKit. Версии WebCore соответствуют версиям WebKit, которые, в свою очередь, часто маркируются по номеру сборки (например, WebKit 613.1). Внутри Apple WebCore обновляется с каждым выпуском Safari, и изменения фиксируются в репозитории WebKit. Основные вехи:
- WebKit 1 (2003–2005): Первая версия, основанная на KHTML. Поддержка HTML 4.01, CSS 2.1, частичная поддержка JavaScript.
- WebKit 2 (2010): Внедрение многопроцессной архитектуры, где WebCore работает в отдельном процессе рендеринга, что повышает стабильность и безопасность.
- WebKit 3 (2013–2014): Улучшенная поддержка HTML5, CSS3, WebGL, а также интеграция с графическими ускорителями (GPU).
- Современные версии (2015–настоящее время): Регулярные обновления с поддержкой новых стандартов (CSS Grid, Flexbox, WebAssembly, WebRTC, Service Workers).
Отличия от Blink
После форка 2013 года Blink (используемый в Chrome, Edge, Opera) и WebCore (в Safari) начали расходиться. Основные различия:
- Архитектура: Blink использует многопроцессную модель с отдельными процессами для каждой вкладки, в то время как WebKit2 (на котором основан Safari) использует один процесс рендеринга на все вкладки, но с изоляцией через IPC.
- Поддержка стандартов: Blink часто внедряет новые веб-стандарты быстрее (например, экспериментальные CSS-свойства), в то время как WebCore более консервативен и ориентирован на стабильность.
- Производительность: Blink оптимизирован для работы на множестве платформ (Windows, Android, Linux), а WebCore — для Apple-экосистемы (macOS, iOS), что даёт преимущества в интеграции с аппаратным обеспечением.
Применение
Веб-браузеры
Основное применение WebCore — это браузер Safari от Apple, который поставляется на всех устройствах с macOS и iOS. Кроме того, WebCore используется в:
- Браузеры на основе WebKit: Например, Epiphany (GNOME Web), Konqueror (KDE), а также ряд мобильных браузеров (например, Dolphin Browser на Android, хотя он перешёл на Blink).
- Встраиваемые браузеры: WebCore лежит в основе UIWebView и WKWebView на iOS, которые используются в приложениях для отображения веб-контента (например, в социальных сетях, новостных агрегаторах).
Другие приложения
Помимо браузеров, WebCore применяется в:
- Электронные книги: Некоторые программы для чтения (например, iBooks на macOS) используют WebCore для рендеринга EPUB-файлов, так как они основаны на HTML и CSS.
- Разработка приложений: Фреймворки, такие как Electron (используется в Visual Studio Code, Slack, Discord), ранее использовали WebKit, но затем перешли на Blink. Однако на iOS все приложения, отображающие веб-контент, обязаны использовать WKWebView (основанный на WebCore).
- Тестирование и автоматизация: Инструменты, такие как Selenium WebDriver, могут взаимодействовать с WebCore через WebKit API для автоматического тестирования веб-страниц.
Интересные факты
- Открытый исходный код: WebCore распространяется под лицензией LGPL, что позволяет использовать его в коммерческих проектах при условии соблюдения условий лицензии. Однако Apple вносит в код свои проприетарные оптимизации, которые не публикуются в открытом репозитории.
- Влияние на стандарты: Разработчики WebCore активно участвуют в работе консорциума W3C (World Wide Web Consortium), предлагая и реализуя новые стандарты, такие как CSS Grid Layout и Web Animations.
- Производительность: WebCore известен своей высокой производительностью на устройствах Apple, особенно в задачах, связанных с рендерингом сложных страниц и анимаций, благодаря интеграции с графическими ускорителями (Metal на macOS, Core Animation на iOS).
- Критика: Некоторые разработчики критикуют WebCore за медленное внедрение новых стандартов по сравнению с Blink и Gecko, что иногда приводит к несовместимости веб-сайтов с Safari. Однако Apple оправдывает это необходимостью обеспечения стабильности и безопасности.
Источники
- WebKit Open Source Project — официальная документация и репозиторий.
- «The WebKit Project» — статья на сайте Apple Developer.
- «KHTML and WebKit: A History» — анализ на сайте Mozilla Developer Network (MDN).
- «Blink vs WebKit: Differences and Similarities» — технический обзор на сайте Chromium Blog.
- «WebCore Architecture» — описание в документации WebKit.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →