WebKit — это браузерный движок , разработанный Apple и в основном используемый в веб-браузере Safari , а также во всех веб-браузерах на iOS и iPadOS . WebKit также используется консолями PlayStation , начиная с PS3, мобильными операционными системами Tizen , устройством для чтения электронных книг Amazon Kindle , консолями Nintendo , начиная с 3DS Internet Browser , и снятым с производства браузером BlackBerry . Интерфейс прикладного программирования (API) C++ WebKit предоставляет набор классов для отображения веб- контента в Windows и реализует такие функции браузера, как переход по ссылкам при щелчке пользователем, управление обратным списком и управление историей недавно посещенных страниц.
WebKit начинался как ответвление библиотек KHTML и KJS от KDE , [1] [9] и с тех пор получил дальнейшее развитие со стороны участников KDE , Apple , Google , Nokia , [9] Bitstream , BlackBerry , Sony , Igalia и других. [10] WebKit поддерживает macOS , Windows , Linux и различные другие Unix-подобные операционные системы . [11] 3 апреля 2013 года Google объявила, что создала ответвление WebCore, компонента WebKit, для использования в будущих версиях Google Chrome и веб-браузера Opera под названием Blink . [12] [13]
WebKit имеет открытый исходный код и доступен по лицензии BSD 2-Clause [14] [8], за исключением компонентов WebCore и JavaScriptCore, которые доступны по лицензии GNU Lesser General Public License . По состоянию на 7 марта 2013 г. WebKit является товарным знаком Apple, зарегистрированным в Ведомстве по патентам и товарным знакам США. [15]
Код, который впоследствии стал WebKit, появился в 1998 году как механизм компоновки KDE HTML ( KHTML ) и механизм KDE JavaScript ( KJS ). Проект WebKit был запущен в Apple Лизой Мелтон 25 июня 2001 года [ 16] [17] как форк KHTML и KJS . В электронном письме разработчикам KDE [1] Мелтон объяснил , что KHTML и KJS упрощают разработку, чем другие доступные технологии, благодаря небольшому размеру (менее 140 000 строк кода ), четкому дизайну и совместимости со стандартами. KHTML и KJS были портированы на macOS с помощью библиотеки адаптеров и переименованы в WebCore и JavaScriptCore. [1] О JavaScriptCore было объявлено в электронном письме в список рассылки KDE в июне 2002 года, одновременно с первым выпуском изменений Apple. [18]
По словам Apple, некоторые изменения, потребовавшие другой тактики разработки, включали специфичные для macOS функции, отсутствующие в KHTML KDE, такие как Objective-C , KWQ (произносится как «шарлатан»), реализация подмножества Qt, необходимого для работы KHTML. macOS, написанная на Objective C++, и вызовы macOS. [19]
Обмен кодом между WebCore и KHTML становился все труднее, поскольку база кода расходилась, поскольку в обоих проектах использовались разные подходы к кодированию и совместному использованию кода. [20] В какой-то момент разработчики KHTML заявили, что они вряд ли примут изменения Apple, и заявили, что отношения между двумя группами были «горьким провалом». [21] Они утверждали, что Apple представила свои изменения в виде больших патчей, содержащих множество изменений с недостаточной документацией, часто в связи с будущими дополнениями к базе кода. Таким образом, разработчикам KDE было сложно интегрировать эти исправления обратно в KHTML. [22] Кроме того, Apple потребовала, чтобы разработчики подписали соглашение о неразглашении перед просмотром исходного кода Apple, но даже тогда они не смогли получить доступ к базе данных ошибок Apple. [23]
Во время разрекламированного периода «развода» разработчик KDE Курт Пфайфл ( pipitas ) опубликовал статью, в которой утверждалось, что разработчикам KHTML удалось перенести многие (но не все) улучшения Safari из WebCore в KHTML, и они всегда ценили улучшения, исходящие от Apple, и до сих пор ценят их. так. В статье также отмечается, что Apple начала связываться с разработчиками KHTML для обсуждения того, как улучшить взаимоотношения и пути будущего сотрудничества. [24] Фактически, проект KDE смог включить некоторые из этих изменений, чтобы улучшить скорость рендеринга KHTML и добавить функции, включая соответствие тесту рендеринга Acid2 . [25]
После появления в новостях истории о форке Apple опубликовала исходный код форка WebKit в общедоступном репозитории контроля версий . [26]
Команда WebKit также отменила многие специфичные для Apple изменения в исходной базе кода WebKit и реализовала уровни абстракции, специфичные для конкретной платформы, чтобы значительно упростить передачу основного кода рендеринга на другие платформы. [27]
В июле 2007 года Ars Technica сообщила, что команда KDE перейдет с KHTML на WebKit. [28] Вместо этого, после нескольких лет интеграции, в августе 2010 года была выпущена платформа разработки KDE версии 4.5.0 с поддержкой как WebKit, так и KHTML, и разработка KHTML продолжается. [29]
7 июня 2005 года разработчик Safari Дэйв Хаятт объявил в своем блоге , что Apple открыла исходный код WebKit (ранее только WebCore и JavaScriptCore были открытым исходным кодом) и открыла доступ к дереву контроля версий WebKit и системе отслеживания проблем. [26]
В середине декабря 2005 года поддержка масштабируемой векторной графики (SVG) была включена в стандартную сборку. [30]
Компоненты WebKit JavaScriptCore и WebCore доступны по лицензии GNU Lesser General Public License, а остальная часть WebKit доступна по лицензии BSD с 2 пунктами. [8]
Начиная с начала 2007 года, команда разработчиков приступила к реализации расширений каскадных таблиц стилей (CSS), включая анимацию , переходы, а также 2D- и 3D-преобразования; [31] такие расширения были выпущены в качестве рабочих проектов Консорциуму World Wide Web (W3C) в 2009 году для стандартизации. [32]
В ноябре 2007 года проект объявил, что добавил поддержку медиа-функций черновой спецификации HTML5 , что позволяет визуализировать встроенное видео и управлять им с помощью сценариев в WebKit. [33]
2 июня 2008 года проект WebKit объявил, что переписал JavaScriptCore как «SquirrelFish», интерпретатор байт-кода . [34] [35] Проект превратился в SquirrelFish Extreme (сокращенно SFX), анонсированный 18 сентября 2008 года, который компилирует JavaScript в собственный машинный код , устраняя необходимость в интерпретаторе байт-кода и тем самым ускоряя выполнение JavaScript. [36] Первоначально единственной поддерживаемой архитектурой процессора для SFX была x86 , но в конце января 2009 года SFX был включен для macOS на x86-64 , поскольку он проходит все тесты на этой платформе. [37]
8 апреля 2010 года было объявлено о проекте под названием WebKit2, призванном изменить дизайн WebKit. Его цель заключалась в том, чтобы абстрагировать компоненты, обеспечивающие веб-рендеринг, от окружающего их интерфейса или оболочки приложения, создавая ситуацию, когда «веб-контент (JavaScript, HTML, макет и т. д.) находится в отдельном от пользовательского интерфейса приложения процессе». Эта абстракция была призвана сделать повторное использование более простым процессом для WebKit2, чем для WebKit. В WebKit2 было «несовместимое изменение API с исходным WebKit», что послужило причиной изменения его названия. [38]
Целями WebKit2 были установлены Linux, macOS, Windows, GTK и MeeGo -Harmattan. [39] [40] Safari для macOS перешёл на новый API с версии 5.1. [41] Safari для iOS перешёл на WebKit2 с iOS 8. [42]
Исходный API WebKit был переименован в WebKitLegacy API. [43] WebKit2 API был переименован в обычный WebKit API. [44]
WebKit используется в качестве механизма рендеринга в Safari , а ранее использовался веб-браузером Chrome от Google в Windows, macOS и Android (до версии 4.4 KitKat). Chrome использовал только WebCore и включал собственный движок JavaScript под названием V8 и многопроцессную систему. [45] Chrome для iOS продолжает использовать WebKit, поскольку Apple требует, чтобы веб-браузеры на этой платформе делали это. [46] Другие приложения на macOS и iOS используют WebKit, такие как клиент электронной почты Apple Mail , App Store и версия Microsoft Entourage Personal Information Manager 2008 года , оба из которых используют WebKit для отображения HTML-контента.
На основе WebKit были созданы новые веб-браузеры, такие как браузер S60 [47] на мобильных телефонах Symbian , браузер BlackBerry (версия 6.0+), Midori , браузер Chrome , [48] [49] веб -браузер Android до версии 4.4 KitKat и браузер, используемый в системном программном обеспечении PlayStation 3 начиная с версии 4.10. [50] Веб-браузер Rekonq от KDE и Plasma Workspaces также используют его в качестве собственного механизма веб-рендеринга. WebKit был принят в качестве механизма рендеринга в OmniWeb , iCab и Web (ранее называвшийся Epiphany) и Sleipnir , заменив их исходные механизмы рендеринга. GNOME Web какое-то время поддерживал как Gecko , так и WebKit, но команда решила, что цикл выпуска Gecko и планы на будущее сделают его слишком обременительным для продолжения его поддержки. [51] WebOS использует WebKit в качестве основы среды выполнения приложений. [52] WebKit используется для рендеринга HTML и запуска JavaScript на платформе приложений Adobe Integrated Runtime . В Adobe Creative Suite CS5 WebKit используется для рендеринга некоторых частей пользовательского интерфейса. По оценкам аналитиков, по состоянию на первую половину 2010 года совокупное количество мобильных телефонов, поставляемых с браузером на основе WebKit, составило 350 миллионов. [53] К середине апреля 2015 года доля рынка браузеров WebKit составляла 50,3%. [54]
Через неделю после того, как Hyatt объявила об открытом исходном коде WebKit, Nokia объявила, что портировала WebKit на операционную систему Symbian и разрабатывает браузер на основе WebKit для мобильных телефонов под управлением S60. Названный веб-браузером для S60 , он использовался на Nokia, Samsung, LG и других мобильных телефонах Symbian S60. Apple также портировала WebKit на iOS для работы на iPhone , iPod Touch и iPad , где он используется для отображения контента в веб-браузере устройства и программном обеспечении электронной почты. [55] Платформа мобильных телефонов Android использовала WebKit (и более поздние версии его ответвления Blink ) в качестве основы своего веб-браузера [56] [57] [58] , а Palm Pre , анонсированный в январе 2009 года, имеет интерфейс, основанный на WebKit. [59] Amazon Kindle 3 включает в себя экспериментальный браузер на базе WebKit. [60]
В июне 2007 года Apple объявила, что WebKit был портирован на Microsoft Windows как часть Safari. Хотя Safari для Windows был молчаливо прекращен [61] компанией, порты WebKit для операционной системы Microsoft все еще активно поддерживаются. [62] [63] Порт для Windows использует для работы собственные библиотеки Apple и используется для iCloud [64] и iTunes [65] для Windows, тогда как порт «WinCairo» представляет собой полностью открытый и распространяемый порт. [66] [67]
WebKit также был портирован на несколько наборов инструментов, поддерживающих несколько платформ, таких как набор инструментов GTK для Linux под названием WebKitGTK , который используется Eolie, [68] GNOME Web , [69] [70] Adobe Integrated Runtime , библиотеки Enlightenment Foundation Libraries. (EFL) и набор инструментов Clutter . [71] Qt Software включила порт WebKit в выпуск Qt 4.4 в виде модуля под названием QtWebKit [72] (поскольку его заменил Qt WebEngine , который вместо этого использует Blink). Браузер Iris на Qt также использовал WebKit. Порт библиотек Enlightenment Foundation Libraries (EFL) — EWebKit — был разработан (компаниями Samsung и ProFusion [73] ) для встраиваемых и мобильных систем для использования в качестве автономного браузера, виджетов-гаджетов, средства просмотра форматированного текста и композитора. [ нужна ссылка ] Порт Clutter разработан Collabora и спонсируется Robert Bosch GmbH .
Существовал также проект, синхронизированный с WebKit (спонсируемый Pleyo) [74] под названием Origyn Web Browser , который обеспечивал мета-порт на абстрактную платформу с целью сделать портирование на встроенные или облегченные системы более быстрым и простым. [75] Этот порт используется для встроенных устройств, таких как телевизионные приставки , PMP, и он был перенесен в AmigaOS , [76] [77] AROS [78] и MorphOS . MorphOS версии 1.7 — это первая версия веб-браузера Origyn (OWB), поддерживающая медиа-теги HTML5 . [79] [80]
Веб-платформа для встраиваемых систем (WPE) — это порт WebKit, предназначенный для встраиваемых приложений; он дополнительно улучшает архитектуру за счет разделения основных функциональных блоков рендеринга на библиотеку подпрограмм общего назначения (libwpe), серверные части платформы и сам движок (называемый WPE WebKit). Порт GTK, хотя и автономный, может быть построен для использования этих базовых библиотек вместо реализации внутренней поддержки платформы. Порт WPE в настоящее время поддерживается Igalia.
3 апреля 2013 года Google объявила, что выпустит ответвление компонента WebKit WebCore под названием Blink . Разработчики Chrome решили использовать форк, чтобы обеспечить большую свободу в реализации функций WebCore в браузере, не вызывая конфликтов в исходном коде, а также позволить упростить его кодовую базу, удалив код для компонентов WebCore, не используемых Chrome. В связи с объявлением Opera Software ранее в этом году о переходе на WebKit посредством кодовой базы Chromium , было подтверждено, что веб-браузер Opera также перейдет на Blink. [45] После этого объявления разработчики WebKit начали обсуждение возможности удаления кода, специфичного для Chrome, из движка, чтобы оптимизировать его кодовую базу. [81] В WebKit больше нет кода, специфичного для Chrome (например, системы сборки, обработчиков JavaScript-движка V8, кода платформы и т. д.). [ нужна цитата ]
WebCore — это библиотека макета, рендеринга и объектной модели документа (DOM) для HTML и масштабируемой векторной графики (SVG), разработанная проектом WebKit. Его полный исходный код распространяется по лицензии GNU Lesser General Public License (LGPL). Платформа WebKit объединяет WebCore и JavaScriptCore, предоставляя интерфейс прикладного программирования Objective-C для механизма рендеринга WebCore на основе C++ и механизма сценариев JavaScriptCore, что позволяет легко ссылаться на него приложениями на основе Cocoa API ; более поздние версии также включают в себя абстракцию кросс-платформенной платформы C++, а различные порты предоставляют больше API. [ нужна цитата ]
WebKit проходит тесты Acid2 и Acid3 , обеспечивая идеальную отрисовку пикселей и отсутствие проблем с синхронизацией или плавностью на эталонном оборудовании. [82]
JavaScriptCore — это платформа, которая предоставляет движок JavaScript для реализаций WebKit и обеспечивает этот тип сценариев в других контекстах в macOS. [18] [83] JavaScriptCore изначально создан на основе библиотеки движка JavaScript KDE ( KJS ) (которая является частью проекта KDE) и библиотеки регулярных выражений PCRE . После разветвления KJS и PCRE JavaScriptCore был улучшен благодаря множеству новых функций и значительному повышению производительности. [84]
2 июня 2008 года проект WebKit объявил, что переписал JavaScriptCore как «SquirrelFish», интерпретатор байт-кода . [34] [35] Проект превратился в SquirrelFish Extreme (сокращенно SFX, продаваемый как Nitro), о котором было объявлено 18 сентября 2008 года, что еще больше ускоряет выполнение JavaScript. [36]
13 мая 2014 года был анонсирован оптимизирующий JIT-компилятор под названием FTL. [85] Он использует LLVM для генерации оптимизированного машинного кода. «FTL» означает «Четвертый уровень-LLVM», а неофициально — «быстрее света» , намекая на его скорость. [86] С 15 февраля 2016 г. серверная часть FTL JIT заменена на «Bare Bones Backend» (или сокращенно B3). [87]
{{cite web}}
: CS1 maint: неподходящий URL ( ссылка ){{cite web}}
: CS1 maint: неподходящий URL ( ссылка ){{cite web}}
: CS1 maint: неподходящий URL ( ссылка )