Blink (браузерний рушій)
Blink — вільний рушій для відображення вебсторінок, розроблений компаніями Google та Opera Software на основі початкового коду WebCore з WebKit для браузера Chromium.[1] Blink базується на багатопроцесній архітектурі і суттєво відрізняється від основної архітектури розпаралелювання операцій у WebKit.
Проєкт WebKit був створений в 2001 році як форк рушія KHTML, який розвивала спільнотою KDE.
У представленому в 2008 році браузері Chrome компанія Google використовувала підсистему WebKit WebCore для рендерингу HTML і CSS, але замість JavaScript-рушія WebKit JavaScriptCore використовувала власний рушій V8. Фактично компанія Google спочатку розвивала в Chrome форк WebKit, тому що використовує у своєму браузері окрему гілку WebKit, безпосередньо вносячи в неї власні зміни і портуючи сторонні зміни з WebKit, після чого повертаючи свої покращення в upstream. У WebKit2 з'явилося багато нових можливостей і особливостей, які не мала наміру використовувати Google, але які доводилось враховувати при портуванні. У підсумку ресурси витрачані на портування стали неприйнятно великі.
Основною причиною створення форку стала зростаюча трудомісткість паралельної підтримки розробки окремої багато-процесорної моделі, спочатку використовуваної в Google Chrome, але неприйнятної для універсального рушія WebKit і деяких інших браузерах. Суть відмінностей зводиться до того, що WebKit2 надає спеціальний фреймворк для поділу за різними процесами обробки контенту та формування інтерфейсу, а механізм поділу за процесами Chrome заснований на ідеї використання WebKit WebCore як одного з багато-процесних модулів, котрі взаємодіють з іншими модулями через окремий диспетчер ресурсів. В процесі розробки спостерігалося постійне ускладнення коду як WebKit, так і Chrome, що помітно гальмувало розробку Chrome через необхідність постійного портування коду. Крім того, із створенням форку у Google з'являться нові можливості з оптимізації рушія і збільшенню продуктивності, що потребують внесення кардинальних змін до WebKit. Створення Blink зняло з Google зобов'язання з повернення змін до WebKit.
На думку Google, створення нового браузерного рушія не відіб'ється негативно на екосистемі і лише оздоровить її, бо конкуренція спонукає до розвитку інновацій, так само як поява кількох конкурентних браузерів стимулювала розвиток Веб. При цьому розробники Blink відзначають як пріоритетний напрямок співпрацю з творцями інших браузерних рушіїв в плані забезпечення сумісності, слідування інтернетовим стандартам і створення нових вебтехнологій. Першим часом розвиток Blink був сфокусований на поліпшенні внутрішньої архітектури і спрощенні кодової бази. Наприклад, припинено підтримку 7 складальних систем і вилучено близько 7 тисяч файлів, що включають понад 4.5 млн рядків коду.
Про намір перейти до використання рушія Blink заявила компанія Opera, в процесі своєї міграції на WebKit з власного рушія Presto. Таким чином, сформована навколо WebKit спільнота розкололася на два табори, що представляють технології та інтереси проєктів Google Chrome і Apple Safari.
У квітні 2013 компанія Adobe, що раніше брала участь у розвитку WebKit, оголосила про намір підключитися до роботи над рушієм Blink.[2][3] Adobe продовжить свою співпрацю з проєктами WebKit і Mozilla, але створюваний Adobe продукт Edge Tools базуватиметься на наданому проєктом Chromium фреймворці для інтеграції браузерних функцій в сторонні продукти.
У вересні 2013 про підтримку Blink оголосив проєкт Qt.[4] Ларс Нол (Lars Knoll), творець рушія KHTML, керівник проєкту Qt Project і директор з розвитку фреймворку Qt в компанії Digia, представив Qt WebEngine[5], новий компонент для використання браузерного рушія в Qt-застосунках. Qt WebEngine йде на зміну Qt WebKit і відрізняється переходом на кодову базу проєкту Blink.
Серед причин переходу на Blink називають[4]
- У розробці Chromium велика увага приділяється крос-платформовості, підтримуються всі основні настільні платформи і Android. У WebKit підтримка сучасних платформ відстає від Chromium
- Багато можливостей, що вимагають додаткового доопрацювання при використанні WebKit, доступні з коробки в Chromium. Наприклад, Chromium спрощує використання напрацювань з адаптації продукту для різних платформ і операційних систем, без додаткових надбудов працюють мультимедійні можливості і WebRTC
- При використанні Chromium спрощується інтеграція з операційною системою, що дозволяє зосередити увагу на розвитку API
- Розробка Chromium ведеться під дуже серйозним контролем відповідно до високих вимог до якості, що спрощує тестування похідних продуктів
З планів розвитку архітектури Blink можна відзначити:[6]
- Реалізація обробки вмісту iframe в окремому ізольованому процесі. У WebKit зазначена можливість не може бути інтегрована, бо вона вимагає значної реструктуризації методів обробки iframe і зав'язана на особливостях sandbox-ізоляції і методів управління процесами в Chrome.
- Прискорення і спрощення коду для забезпечення мережевої взаємодії. Мережева підсистема WebKit обмежена необхідністю забезпечення сумісності зі старим API для платформ Mac, що не дозволяє інтегрувати в WebKit деякі поліпшення і змушує використовувати в Chrome ряд обхідних методів, реалізація яких не найкраща.
- Переклад обробки Document Object Model (DOM) на плечі JavaScript-рушія, що дозволить істотно прискорити доступ до DOM з JavaScript-скриптів. Втілення в життя подібної ідеї вимагає повної переробки реалізації DOM в WebKit і утруднено у світлі підтримки в WebKit одночасно двох рушіїв JavaScript;
- Розбиття WebKit WebCore на модулі і розширення засобів розпаралелювання обробки контенту (парсинг HTML, рушій обробки стилів, парсер JavaScript);
- Пряме використання у рушії основного Platform API для управління sandbox-ізоляцією;
- Перехід на використання високопродуктивного менеджера розподілу пам'яті tcmalloc;
- Використання JIT-компіляції при організації доступу з JavaScript коду до деяких атрибутів DOM, таких як div.id і div.firstChild;
- Підтримка збереження снапшотів у рушії V8, що дозволить позбутися від стадії розбору для вже завантажених раніше сторінок;
- Поліпшення ізоляції ниті, що відповідає за формування виводу (compositor).
- Рішення позбутися CSS-префіксів для експериментальних можливостей. Замість префікса «-webkit» вирішено не вводити префікси «-blink» або «-chrome», а наслідувати приклад Mozilla і додавати всі експериментальні можливості без префіксів, але включати їх тільки при зміні спеціальних налаштувань в браузері.
Поза цими озвученими змінами Blink залишається відносно подібним до WebCore.[7]
- ↑ Adam Barth (3 квітня 2013). Blink: A rendering engine for the Chromium project (англ.). Google. Архів оригіналу за 21 квітня 2013. Процитовано 13 квітня 2013.
- ↑ The Changing Web Platform Landscape: More Fragmentation?. Архів оригіналу за 5 жовтня 2013. Процитовано 4 жовтня 2013.
- ↑ Adobe присоединился к разработке Blink, форка WebKit от компании Google. Архів оригіналу за 5 жовтня 2013. Процитовано 4 жовтня 2013.
- ↑ а б Qt переходить з WebKit на браузерний рушій Blink і технології Chromium [Архівовано 21 вересня 2013 у Wayback Machine.] (рос.)
- ↑ Introducing the Qt WebEngine. Архів оригіналу за 21 вересень 2013. Процитовано 4 жовтень 2013.
- ↑ Компанія Google представила Blink, форк рушія WebKit [Архівовано 4 жовтня 2013 у Wayback Machine.] (рос.) // opennet.ru 04.04.2013
- ↑ Google going its own way, forking WebKit rendering engine. Ars Technica. Архів оригіналу за 6 квітня 2013. Процитовано 4 квітня 2013.
- Blink
- Blink developer FAQ [Архівовано 1 травня 2013 у Wayback Machine.]
- www.chromestatus.com [Архівовано 16 квітня 2011 у Wayback Machine.]