O que é o Blink?

Um dos poderes especiais da Web é a capacidade de composição. As páginas da Web incluem uma variedade de recursos diferentes, possivelmente de várias origens.

O Blink serve como mecanismo de renderização para navegadores baseados no Chromium, incluindo o Chrome, o Android WebView, o Microsoft Edge, o Opera e o Brave.

Um motor de renderização é o componente de um navegador da Web que transforma códigos HTML, CSS e JavaScript, além de imagens e outros recursos, em páginas da Web que podem ser visualizadas e com as quais é possível interagir.

O Blink inicia o processo de renderização reunindo todos os recursos necessários, como HTML, CSS, JavaScript, vídeos e imagens. Para recuperar esses recursos, o Blink gerencia interações com a pilha de rede no Chromium e no sistema operacional subjacente.

Assim que o CSS e o HTML são carregados, o Blink pode transformar esse código, na forma de texto, em uma representação com a qual ele pode trabalhar. Isso é chamado de parsing. O JavaScript também precisa ser analisado e executado.

Depois que tudo isso for feito, o Blink poderá começar a trabalhar na disposição e exibição de páginas da Web que você pode visualizar e interagir. Isso é renderização.

O diagrama a seguir mostra as etapas no pipeline de tarefas de renderização, incluindo os componentes, processos e recursos envolvidos em cada uma. O Blink tem muito trabalho a fazer!

Pipeline de renderização do Blink, com setas que indicam o progresso nos estágios.
O pipeline de renderização do Blink tem um carregador de recursos, APIs de scripts e análise de HTML/CSS. Isso progride por vários estágios para desenhar pixels na tela.

Renderizar gráficos

O Blink usa o mecanismo gráfico Skia de código aberto para interagir com o hardware gráfico subjacente de um computador ou dispositivo móvel.

O Skia oferece APIs comuns que funcionam em várias plataformas de hardware e software. Ele serve como mecanismo gráfico para o Google Chrome e muitos outros produtos.

Em vez de tentar oferecer suporte a diferentes sistemas operacionais e dispositivos, acompanhando as mudanças da plataforma, o Skia usa bibliotecas gráficas, incluindo OpenGL, Vulkan e DirectX. A biblioteca que o Skia usa depende da plataforma em que ele está sendo executado, como Android em dispositivos móveis ou Windows em computadores.

Analisar e executar JavaScript

Para analisar e executar códigos JavaScript e WebAssembly, o Blink usa o V8, um mecanismo de código aberto desenvolvido pelos projetos do Chromium.

O V8 permite que um desenvolvedor use código JavaScript ou WebAssembly para acessar os recursos do navegador. Por exemplo, para manipular o modelo de objetos do documento, que é a representação interna de um documento que o Blink cria a partir do código HTML.

O V8 processa o JavaScript de acordo com o padrão JavaScript, conhecido como ECMAScript.

Renderização para padrões

O V8 processa o JavaScript de acordo com o padrão JavaScript, conhecido como ECMAScript. Motores de renderização como o Blink foram projetados para implementar padrões da Web de forma interoperável. Os padrões da Web permitem que desenvolvedores e usuários finais tenham confiança de que as páginas da Web funcionam bem, não importa qual navegador eles estejam usando.

O Blink segue as especificações para recursos de navegador e linguagem definidos nos padrões da Web, incluindo HTML, CSS e DOM.

HTML e o DOM

O padrão HTML define como os engenheiros de navegadores devem implementar elementos HTML. A especificação de cada elemento HTML inclui uma seção que define a interface DOM para o elemento. Ele detalha como o JavaScript precisa ser implementado pelo navegador para permitir a interação com o elemento de uma maneira padronizada em todos os dispositivos e plataformas.

A especificação da interface é escrita em WebIDL (Linguagem de definição de interface da Web, em inglês): O WebIDL a seguir faz parte da definição do padrão HTML do HTMLImageElement.

[Exposed=Window,
 LegacyFactoryFunction=Image(optional unsigned long width, optional unsigned
long height)]
interface HTMLImageElement : HTMLElement {
 [HTMLConstructor] constructor();

 [CEReactions] attribute DOMString alt;
 [CEReactions] attribute USVString src;
 [CEReactions] attribute USVString srcset;
 [CEReactions] attribute DOMString sizes;
 [CEReactions] attribute DOMString? crossOrigin;
 [CEReactions] attribute DOMString useMap;
 [CEReactions] attribute boolean isMap;
 [CEReactions] attribute unsigned long width;
 [CEReactions] attribute unsigned long height;
 readonly attribute unsigned long naturalWidth;
 readonly attribute unsigned long naturalHeight;
 readonly attribute boolean complete;
 readonly attribute USVString currentSrc;
 [CEReactions] attribute DOMString referrerPolicy;
 [CEReactions] attribute DOMString decoding;
 [CEReactions] attribute DOMString loading;
 [CEReactions] attribute DOMString fetchPriority;

 Promise<undefined> decode();

 // also has obsolete members
};

O WebIDL é uma maneira padronizada de descrever interfaces funcionais, como aquelas que compõem a maioria dos padrões da Web.

Para implementar um recurso, os engenheiros colocam esse código do WebIDL em um arquivo, e ele é transformado automaticamente pelo Blink para fornecer uma interface aos desenvolvedores para esse recurso. Depois que a interface é definida com o WebIDL, os engenheiros podem criar as implementações que respondem às chamadas de interface.

html_image_element.idl na fonte do Chromium.

Bibliotecas de terceiros

O Blink usa várias bibliotecas de terceiros. Por exemplo, o WebGL é usado para renderizar gráficos 2D e 3D interativos.

Bibliotecas de terceiros no código-fonte do Chromium, incluindo o WebGL usado pelo Blink.

Bibliotecas como o WebGL são altamente otimizadas e testadas com cuidado. Eles dão ao Blink acesso a recursos e funcionalidades importantes, sem precisar reinventar a roda. O IDL do WebGL é definido, e os engenheiros do Blink conectam essa interface da Web com código e bibliotecas no back-end que são usados para renderizar muitos elementos diferentes .

Para conferir o WebGL em ação, confira o app de renderização de frações Fractious, que usa o WebGL.

Fractious: um visualizador baseado em WebGL para o conjunto de Mandelbrot.

Renderização multiplataforma

Você pode estar se perguntando se o Chrome usa o Blink em todos os sistemas operacionais e dispositivos.

No iOS e no iPadOS, o Chrome usa o WebKit como mecanismo de renderização. O WebKit era uma bifurcação de outro projeto, KDE, que remonta a 1998. Na verdade, o Safari e o Chromium foram inicialmente baseados no WebKit. Atualmente, o Safari e todos os navegadores no ecossistema da Apple usam o WebKit, de acordo com os requisitos da App Store da Apple.

Com o tempo, os projetos do Chromium desenvolveram uma arquitetura de software multiprocesso diferente, já que manter duas arquiteturas separadas em uma base de código estava se tornando problemático.

Além disso, o Chromium queria usar recursos que não estavam sendo criados no WebKit. Assim, a partir da versão 28, os engenheiros do Chromium decidiram começar a trabalhar no próprio mecanismo de renderização. Eles bifurcaram o código do WebKit e o chamaram de Blink. Há rumores de que o nome "Blink" foi inspirado na tag <blink>, que estava disponível no navegador Netscape Navigator para fazer o texto piscar.

Resumindo: o Chrome, o Microsoft Edge, o Opera, o Vivaldi, o Arc, o Brave e outros navegadores e frameworks baseados no Chromium usam o Blink. O Safari e alguns outros navegadores usam o WebKit, assim como todos os navegadores no iOS e iPadOS, incluindo o Chrome. O Firefox usa um mecanismo de renderização chamado Gecko.

Próximas etapas

Confira O que são intents do Blink?.