Открыть сервис

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 →