Ember 2.10 e Glimmer 2

Aurélio Saraiva
Tableless
Published in
4 min readDec 13, 2016

Alguns dias atrás foi liberado Ember.js 2.10 , uma versão estável do Ember que inclui uma grande reformulação do motor de renderização do Ember. O novo motor de renderização “Glimmer 2”, esse motor vem sendo usado desde Ember 1.13 com o motor Glimmer 1. A comunidade está muito animada com esse lançamento. Para aqueles que não acompanham frequentemente os assuntos da comunidade na “Ember-land”, aqui algumas das mudanças.

Ember 2.10 e Glimmer 2 são Drop-in Upgrades

O projeto Ember está comprometido com “semantic versioning” com o objetivo de desenhar atualizações para seu aplicativo garantindo a retro-compatibilidade. Devido a isso, temos hoje diversos aplicativos maduros no ecossistema. Por exemplo, o Travis que recentemente compartilhou este post sobre como sua aplicação foi iniciada em 2011, e ainda está recebendo atualizações e evoluindo em 2016 sem quebrar: Tomster and Travis, sitting in a tree: Ember at Travis CI.

Glimmer 2 resultou em modificações profundas no core do Ember. Mesmo com todas as mudanças, a atualização para a maioria dos aplicativos deve ser somente isso:

// bower.json
"dependencies": {
- "ember": "2.9.1",
+ "ember": "2.10.0",
"ember-cli-shims": "0.1.3",

Isso é surpreendente! Isso não é apenas uma teoria de simplicidade, é realmente assim, muito simples. Aplicativos maiores provavelmente precisarão atualizar outros addons, tais como ember-wormhole. Não deve ocorrer problema, pois esses addons tem uma bateria de testes, incluindo versões betas do Ember.

Nosso objetivo é que os aplicativos existentes consigam sempre se manter atualizado, não havendo razões para ficar para trás. Quando isso acontece, a comunidade Ember cresce juntos, trazendo diversos benefícios de melhoria colaborativa entre as plataformas.

Ember 2.10 é muito rápido

O foco principal do Ember 2.10 foi na integração com o Glimmer 2, garantindo a retro-compatibilidade de versões trazendo consigo muita otimização de desempenho. A versão atual é considerada estável, porém possuí diversas oportunidade de desempenho ainda não explorada, essas oportunidades devem ser estudas em versões futuras.

“Desempenho” em bibliotecas JavaScript são como batalhas intermináveis, infelizmente, sempre buscando ser a referencia ou capturar o status de “mais rápido!”, com base em parâmetros de referência interessantes para outros desenvolvedores de biblioteca, mas lamentavelmente inaplicáveis ​​para o mundo real. Aplicativos reais devem executar bem em um grande número de cenários, e equilibrar muitas preocupações sobrepostas. Algumas das preocupações dos contribuintes Glimmer foram:

  • Byte-size do framework Ember
  • Byte-size de uma aplicação Ember pós-compilada no mundo real
  • Analise e tempo interpretação do JavaScript no navegador
  • Desempenho dos templates Ember
  • Desempenho dos templates Ember em re-processamento

Essas questões do que deveria ser um aplicativo com bom desempenho foram estudadas em cenários de benchmarking artificial e aplicações reais. Por exemplo, os desenvolvedores trabalhando na Skylight, Intercom, novo app mobile do LinkedIn.

É importante você identificar o desempenho dos seus próprios aplicativos, e partir a analise entender as mudanças relevantes e entregar algo relevante e melhor para seus usuários. No entanto, estou feliz de informar que Ember 2.10 deve trazer muitas melhoria notáveis de desempenho para seu aplicativo em apenas um dia:

  • A compilação para produção no Ember 2.10 é muito diferente do que em Ember 2.9. O novo formato é otimizado para ser analisado de forma muito rápida pelos motores JavaScript, possuí menos atribuições para avaliar, e é mais concisa. LinkedIn viu uma queda de 71% no tamanho do seu app mobile descompactado. A Intercom experimentou as versões betas e viu uma redução de 30% na sua aplicação.
  • Ember 2.10 aumentou o tamanho minified e gzipped do framework de 107k para 127K. Para a maioria dos aplicativos, os benefícios superam o este aumento reduzindo muito o tamanho do templates. No entanto, estão sendo tomadas outras medidas para a utilização de uma solução de agregação para os módulos de package-internal para construção de framework. Essas melhorias devem (com base em experimentação) eliminar o inchaço do framework e melhorar o tempo de parse/eval do JavaScript. Este trabalho não foi feito na versão 2.10 pois está um pouco acoplado a JavaScript Modules API RFC.
  • O projeto Discourse vem a há algum tempo mapeando o tempo de renderização do Ember através do ember-performance. Quando Ember 1.13 foi lançado ocorrer uma queda de 2x no desempenho, hoje com Ember 2.10 finalmente cruzamos o inverso: Ember 2.10 é 2x mais rápido no cenário “Render Complex List” de Ember 2.9, e um pouco mais rápido do que Ember 1.11. Com esta notícia na mão, Discourse tem começado a atualização para o Ember 2.10!
  • O “dbmonster” ou demonstração “DBMON” é um proxy razoável para o modelo de desempenho re-render. Essa implementação DBMON de Chris Freeman Ember 2.10 renderiza novamente 1.5x mais rápido do que Ember 2.9.1 , melhorando de 18fps para 28fps. Outras implementações DBMON (detalhes, demonstração) atinge 60fps em 2.10 (Todos os números de fps no Chrome 55, i7 rodando OSX).

Esperamos que Ember 2.10 melhore o desempenho das aplicações do mundo real. É emocionante ver todas essas melhorias significativas chegar sem a necessidade de reformular ou reescrever seu aplicativo.

--

--

Aurélio Saraiva
Tableless

Working on @emberjs / I love the Web / Software Engineer at @CreditasBR / Co-Founder of @FrontInFloripa