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

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук
Blink
Розробник(и) Google, Opera Software
Написано на C++
Операційна система крос-платформовий
Тип браузерний рушій
Ліцензія BSD v2.0 та GNU LGPL v2.1
Сайт 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, але які доводиться враховувати при портуванні. У підсумку витрачаються на портування ресурси стали неприйнятно великі.

Основною причиною створення форку стала зростаюча трудомісткість паралельної підтримки розробки окремої багато-процесорної моделі, спочатку використовуваної в 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]

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

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

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