de template engines como o _.template e o Mustache; Padronização de gerência de estado e API através dos models; Utilizar template engines implica em duplicar as views com o servidor; Utilizar models implica em duplicar lógicas e validações dos models do servidor;
pro cliente; Trabalha com APIs; Muito bons para webapps mobile; Ainda implica em algumas duplicações dos models; Problemas de performance e SEO; Angular 1, Ember, ...
Primeiro framework com idéias isomórficas; Sistema de módulos do YUI não funciona bem com NodeJS; Sincronizar servidor e cliente era uma tarefa difícil.
simula o DOM no servidor, tornando a renderização mais rápida; Exporta um middleware para ser usado com o Express; Estende o Backbone com as próprias classes; Problema de atualização da view permanece; Configuração complexa.
do DOM; A visualização das possibilidades alavancou a ideia de isomorfismo; Surgimento de bibliotecas que comportam-se igualmente no servidor e no cliente, mas tem implementação diferentes entre eles; Ferramentas que permitem ao navegador entender CommonJS; React, Fetchr, Browserify, Webpack, ...
e cliente; É uma aplicação normal na primeira requisição e depois se torna um SPA; Separação implícita entre servidor e cliente; Minimização da modificação explícita do DOM; Problema do gerenciamento de estado precisou ser repensado; Difícil gerenciamento de autenticação e permissão de usuários;
o estado é enviado pro cliente; O cliente recupera o estado e começa a processar a partir dele usando o "mesmo" código isomórfico usado no servidor; Caso o cliente atualize a página, o processo reinicia; Se o cliente usa os links para navegar, o código é processado no cliente.
preocupar o menos possível com o que está sendo rodado no servidor ou no cliente (estou de olho em você, Meteor); Comportamento das bibliotecas deve ser controlado internamente; Bom exemplo: Fetchr; Acesso ao banco no servidor lê o banco diretamente, no cliente faz requisição AJAX.
simulação do DOM no servidor; Bootstraping e atualização da tela mais leves; Popularização das bibliotecas de DOM virtual: React, virtual-dom, Mithril; Utilização de eventos sintéticos para padronização cross-browser.
gerência de estado dificultava a serialização do estado para enviar para o cliente; Surgimento do Meteor, Flux, Relay, entre outros; Popularização de bibliotecas de single state tree: Redux, Baobab, …; Crescimento do uso de estruturas imutáveis.
Um dos maiores problemas, juntamente com o gerenciamento de estado; Utilização de HTTPS em toda requisição para aumentar a segurança; Utilização de approaches com cookies/sessões, OAuth 2.0 e JSON Web Token (JWT); Uma das áreas que ainda precisa ser estudada e evoluída.
navegação, renderiza e envia conteúdo das stores Cliente acessa URL Cliente preenche suas stores Executa action de navegação e requisita dados Envia somente os dados requisitados Clicks em links
ou linguagens que compilam para JavaScript; Executar JavaScript no server: servidor de renderização separado; react-rails; react-laravel. Utilização de linguagens que compilam para JavaScript: