BT

Melhorando a performance de aplicações Web com o Google Native Client

por Abel Avram , traduzido por Pedro Mariano em 14 Abr 2010 |

Com o intuito de melhorar a performance de aplicações web que consumem bastante CPU, o Google está desenvolvendo o Native Client(Cliente Nativo) , um tecnologia para browsers utilizada para rodar código nativo. Diferentemente do Netscape's NPAPI ou do Microsoft ActiveX, o Native Client é executado uma sandbox dupla, proibindo o acesso ao total ao sistema operacional.

Uma das formas de melhorar a performance de aplicações web é fazer com que os browsers rodem aplicações nativos. Ao invés de rodar código Javascript, rodamos código nativo que é  normalmente mais rápido do que seu JS correspondente. O problema é que com código nativo surgem sérios problemas de segurança , como acesso aos dados ou criação de conexões na rede. Esses eram os principais problemas do NPAPI e do ActiveX. O Native Cliente pretende resolver esse problema, rodando a aplicação nativa em uma sandbox especial, não dando permissão para o acesso a base do sistema operacional. Aplicações nativas apenas terão permissão para usar a CPU e se comunidade com o ambiente do Native Client.

Aplicações nativas irão rodas uma sandbox dupla: por fora será uma sanbox padrão, como as já utilizas hojepelos browsers, por dentro será uma sanbox baseada na teoria da Base de Isolação de Falhas(Based Fault Isolarion) e utilizando uma segmentação de memória x86 o que  força o código nativo a respeitar  o limite da memória que está alocada.

O Native Client, de acordo com o paper Portable Native Client Executables (PDF), possiu os seguintes objetivos:

  1. Disponibilizar um formato ISA neutro para compilar os módulos NaCl, suportando uma grande variedade de plataformas sem a necessidade de recompilação do código.
  2. Fazer com que desenvolvedores NaCl construam, testem e façam deploy de módulos portáveis e executáveis.
  3. Suportar x86-32, x86-64 e ARM inicialmente, porém fazer com que seja simples suportar outros tipos de CPU no futuro.
  4. Preservar a segurança e a propriedades de desempenho

Para facilitar a vida dos desenvolvedores, os módulos do Native Client serão escritos em qualquer linguagem então compiladas para bytecodes LLVM(Low Level Virtual Machine - Máquina virtual de baixo nível). O LLVM é uma infra estrutura de compilador que provê ISA com neutralidade, ou seja, não é necessário portar o código original para diferentes plataformas. O bytecode é mais otimizado e então é salvo em um arquivo. Se a página web contém a tag <object> cujo tipo é o Native Client, o browser criará o ambiente correspondendo e então irá fazer o download do arquivo LLVM. O bytecode é então traduzido para código nativo e analisado para ter certeza de que ele não está tentando executar nenhuma operação ilegal. Depois disso, basta executar as supostas operações intensas no CPU. O desenvolvedor apenas precisa escrever uma vez e fazer deploy em diversas arquiteturas, e a camada intermediária da LLVM faz com que seja possível executar o módulo mesmo em arquiteturas novas que não existem na época em que o código foi escrito, estendendo assim, o código da aplicação.

O Google criou pacotes do Native Client para Windows, Mac OS X, e Linux para x86-32, x86-64 e ARM, e está aberto para enviar qualquer arquitetura de seu interesse. Os benchmarks(PDF) mostram que aplicações com o  Native Cliente executam em 97% da velocidade de uma aplicação não modificada, ambas em x86 e ARM. O Native Client funciona no Firefox, Safari, Opera, e Google Chrome. Exemplos de aplicações rodando no Native Cliente são: Quake, um game clássico, XaoS, um visualizador de imagens fractais interativo, e Lua - uma engine de scripts.

Avalie esse artigo

Relevância
Estilo/Redação

Olá visitante

Você precisa cadastrar-se no InfoQ Brasil ou para enviar comentários. Há muitas vantagens em se cadastrar.

Obtenha o máximo da experiência do InfoQ Brasil.

Dê sua opinião

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão
Comentários da comunidade

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

Dê sua opinião
Feedback geral
Bugs
Publicidade
Editorial
Marketing
InfoQ Brasil e todo o seu conteúdo: todos os direitos reservados. © 2006-2016 C4Media Inc.
Política de privacidade
BT

We notice you’re using an ad blocker

We understand why you use ad blockers. However to keep InfoQ free we need your support. InfoQ will not provide your data to third parties without individual opt-in consent. We only work with advertisers relevant to our readers. Please consider whitelisting us.