Foi publicado o framework web Pusa, que implementa um conceito que transfere a lógica do front-end, executada no navegador com JavaScript, para o lado do back-end — o gerenciamento do navegador e dos elementos DOM, bem como a lógica de negócios, são executados no back-end. O código JavaScript que é executado no lado do navegador é substituído por uma camada universal que chama manipuladores localizados no lado do back-end. A necessidade de desenvolvimento com JavaScript para o front-end é eliminada. A implementação de referência do Pusa é escrita em PHP e distribuída sob a licença GPLv3. Além do PHP, a tecnologia pode ser implementada em qualquer outra linguagem, incluindo JavaScript/Node.js, Java, Python, Go e Ruby.
Pusa define um protocolo de troca baseado em um conjunto minimalista de comandos. Ao carregar a página, o navegador carrega o conteúdo básico da DOM e o núcleo JavaScript do Pusa-Front. O Pusa-Front, através de chamadas Ajax, envia eventos do navegador (como click, blur, focus e keypress) e os parâmetros da requisição (o elemento que acionou o evento, seus atributos, URL, etc.) para o manipulador do servidor Pusa-Back. Com base nos dados recebidos, o Pusa-Back determina o controlador, executa a carga útil e forma um conjunto de comandos de resposta. Ao receber a resposta da requisição, o Pusa-Front executa os comandos, alterando o conteúdo da DOM e o ambiente do navegador.
O estado do front-end é formado, mas não controlado pelo back-end, o que torna o desenvolvimento para o Pusa semelhante ao código para uma placa de vídeo ou Canvas, onde o resultado da execução não é controlado pelo desenvolvedor. Para criar aplicações interativas baseadas em Canvas e onmousemove, há a possibilidade de carregar e usar scripts JavaScript adicionais no lado do cliente. Entre as desvantagens do método, também está a transferência de parte da carga do front-end para o back-end e o aumento da frequência de troca de dados com. servidor.
Entre as vantagens estão: a eliminação da necessidade de desenvolvedores JavaScript no front-end, um código cliente estável e compacto (11kb), a inacessibilidade do código principal do lado do front-end, a ausência de necessidade de serialização REST e de meios como gRPC, e a eliminação de problemas de coordenação de roteamento de requisições entre o front-end e o back-end.
Fonte: opennet.ru
