Blink (браузерний рушій)

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
Blink
Тип браузерний рушій
Розробник Google, Opera Software
Операційна система крос-платформовий
Мова програмування C++
Ліцензія BSD v2.0 та GNU LGPL v2.1
Репозиторій chromium.googlesource.com/chromium/src/+/master/third_party/blink/
Вебсайт www.chromium.org/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.

Відмінності від WebKit[ред. | ред. код]

Серед причин переходу на 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]

Див. також[ред. | ред. код]

Примітки[ред. | ред. код]

  1. The Changing Web Platform Landscape: More Fragmentation?. Архів оригіналу за 5 жовтня 2013. Процитовано 4 жовтня 2013.
  2. Adobe присоединился к разработке Blink, форка WebKit от компании Google. Архів оригіналу за 5 жовтня 2013. Процитовано 4 жовтня 2013.
  3. а б Qt переходить з WebKit на браузерний рушій Blink і технології Chromium [Архівовано 21 вересня 2013 у Wayback Machine.] (рос.)
  4. Introducing the Qt WebEngine. Архів оригіналу за 21 вересень 2013. Процитовано 4 жовтень 2013.
  5. Компанія Google представила Blink, форк рушія WebKit [Архівовано 4 жовтня 2013 у Wayback Machine.] (рос.) // opennet.ru 04.04.2013

Посилання[ред. | ред. код]