Baixe o app para aproveitar ainda mais
Prévia do material em texto
COMPARAÇÃO DOS PRINCIPAIS FRAMEWORKS JAVASCRIPT PARA DESENVOLVIMENTO WEB COMPARISON OF THE MAIN JAVASCRIPT FRAMEWORKS FOR WEB DEVELOPMENT Ademir José Ferreira Júnior Resumo: A quantidade de opções de frameworks web disponíveis é enorme, a todo momento um novo framework é criado com o objetivo de resolver problemas encontrados no desenvolvimento web, cada um com escopos e abordagens diferentes. Em meio a tantas opções a tarefa de escolher o framework certo para o seu tipo de aplicação ou para começar o aprendizado pode se tornar difícil, vários aspectos devem ser considerados: popularidade, comunidade, desempenho etc. Para auxiliar na escolha, os principais frameworks web disponíveis no mercado submetidos a uma análise comparativa, onde foram avaliados sob diversas métricas, tiveram seus resultados discutidos e recomendações foram formuladas para alguns objetivos e contexto. Palavras-chave: Desenvolvimento web. JavaScript framework. Análise comparativa. Abstract: The amount of web frameworks options available is huge, every moment a new framework is created to resolve problems encountered in web development, each with its own scopes and approach. Among so many options the task of choosing a fitting framework for your application or to start learning can be difficult, various aspects must be considered: popularity, community, performance etc. To help making the choice, the leading web frameworks available in the market are subjected to a comparative analysis, where they were evaluated through several metrics, had their results discussed and recommendations were made to some objectives and context. Artigo apresentado como requisito parcial para a conclusão do curso de Graduação em Ciência da Computação da Universidade do Sul de Santa Catarina – UNISUL. Orientador: Prof. Clávison M. Zapelini Acadêmico do curso Ciência da Computação da Universidade do Sul de Santa Catarina – Unisul. E-mail: ademirj.ferreirajunior@gmail.com 2 Keywords: Web development. JavaScript framework. Comparative analysis. 1 INTRODUÇÃO Segundo o site de estatísticas Estatisca (2021), mais da metade da população mundial, 59.5%, tem acesso à Internet por conexão móvel ou banda larga em 2021, e com a quantidade de usuários aumentando a cada ano, a Internet fica cada vez mais presente no cotidiano da nossa sociedade. Os navegadores são a principal via de interação entre o usuário e a Internet, eles permitem navegar e acessar documentos e recursos disponíveis no sistema de informações World Wide Web (WWW). Essas informações são acessadas na forma de sites/aplicações web, construídas com tecnologias que podem ser interpretadas pelos navegadores: HTML, CSS e JS. HyperText Markup Language (HTML) é usada para definir a estrutura de uma aplicação web, utilizando elementos de marcação para anotar textos, imagens, links etc., para exibição no navegador, além de ser responsável pela gerência de dependências da aplicação. Cascading Style Sheets (CSS) é usada para descrever a apresentação dos elementos anotados em HTML, definindo aparências e posições. JavaScript (JS) é uma linguagem de programação usada para criar e manipular o conteúdo da aplicação dinamicamente. HTML e CSS são tecnologias relativamente simples, elas servem majoritariamente para construir o conteúdo estático da aplicação. Já o JS é uma tecnologia mais complexa, sua função na aplicação possui um escopo maior, o que reflete na quantidade de ferramentas, bibliotecas e frameworks criadas para gerenciá-la. Tradicionalmente, as aplicações web eram servidas como aplicações de múltiplas páginas (MPA), onde o documento HTML, que contém todo o código do aplicativo, é carregado toda vez que o usuário troca de página. Este modelo de aplicação, apesar de ainda ser usado em aplicações com bastante conteúdo estático, vem perdendo popularidade para uma alternativa mais rápida, o modelo de aplicações de página única (SPA). Diferente do modelo tradicional, o modelo SPA carrega o documento HTML uma única vez, e conforme o usuário interage com a aplicação apenas partes necessárias são carregadas e modificadas dinamicamente, reduzindo bastante o tempo de carregamento e tornando a experiência do usuário mais fluida. Com a popularidade do modelo SPA cada vez maior, ferramentas para auxiliar no desenvolvimento de aplicações dentro desse modelo começaram a ser criadas. Uma das ferramentas mais importantes no desenvolvimento web são os frameworks JavaScript, que auxiliam o desenvolvedor oferecendo várias soluções para problemas comumente encontrados no ambiente web. A comparação destas ferramentas será o foco deste trabalho. 3 1.1 OBJETIVOS Este trabalho propõe uma análise comparativa entre os três principais frameworks JavaScript disponíveis, avaliando-os sob várias métricas, discutindo seus resultados e concluindo com recomendações para alguns objetivos e contextos. Os frameworks foram escolhidos por critério de popularidade, e de acordo com Blackwood e Rambeau (2020) na quinta edição do JavaScript Rising Stars, os três frameworks JavaScript que mais cresceram em 2020 são: Vue, React e Angular. Os resultados deste trabalho são de interesse especialmente para desenvolvedores web que precisam escolher um framework JavaScript para o desenvolvimento de um projeto web ou para a iniciação de aprendizado. Também pode servir como referência para profissionais ou empresas na área preocupados com o desempenho e eficiência de aplicações construídas nesses frameworks. 1.1.1 Objetivo geral Comparar os frameworks JavaScript: React, Vue e Angular, avaliando suas vantagens e desvantagens para o desenvolvimento web. 1.1.2 Objetivos específicos • Definir métricas de avaliação e comparação; • Definir ferramentas de desenvolvimento, testes e avaliação; • Definir e desenvolver um ou mais projetos para medição das métricas em cada framework; • Medir e avaliar as métricas; • Avaliar as vantagens e desvantagens de cada framework. 2 FRAMEWORKS Os Frameworks são ferramentas que oferecem soluções para problemas encontrados em um ambiente de desenvolvimento, provendo funções de ajuda e tomando decisões que facilitem 4 o trabalho do desenvolvedor. No ambiente web eles oferecem soluções para problemas como estratégias de roteamento, compilação, gerenciamento de estados etc., além de estruturar e gerar arquivos e configurações do projeto. Frameworks e bibliotecas são termos muitas vezes usados de maneira intercambiável, o React, por exemplo, se define como uma biblioteca, mas é muitas vezes referenciado e utilizado como um framework. Uma biblioteca é simplesmente uma coleção de códigos que pode ser facilmente integrada em um projeto já existente para agilizar o seu desenvolvimento, oferecendo classes, funções, scripts etc. Um framework pode utilizar bibliotecas, tanto para uso interno em seu ambiente como também pode deixá-las disponíveis para serem utilizadas pelo desenvolvedor. Como React será analisado como um framework neste trabalho e não como uma biblioteca, ele será chamado de framework. Os três frameworks que serão analisados neste trabalho utilizam a arquitetura Modelo- Visão-Controle (MVC), onde cada componente descreve a sua própria interface de usuário (UI), atualizando a UI conforme os seus dados internos mudam. 2.1 ANGULAR Entre 2008 e 2009, três desenvolvedores da Google estavam a 6 meses construindo uma aplicação de feedback utilizando o Google Web Toolkit, um framework interno da Google escrito em Java. Ao longo do desenvolvimento da aplicação ficou evidente que o framework não escalava muito bem, como é dado em um exemplo, para um label HTML ser testado ele precisava ser escrito em Java depois compilado e transformado em HTML e JS para que o navegador pudesse executar o código resultante, o que acabava dificultando o desenvolvimento e a execução de testes. Diantedeste problema, Misko Hevery, um dos desenvolvedores, desafiou seu superior a deixá-lo escrever a aplicação sozinho em duas semanas, utilizando uma ferramenta que ele e seu amigo Adam Brons haviam construído. O superior de Misko, Brad Green, aceitou o desafio, mas só recebeu a aplicação três semanas depois, mesmo assim ficou impressionado com o resultado de Misko. Apesar de Brad Green já ter publicado uma API estável do Angular em agosto de 2010, somente em maio de 2011 a ferramenta foi oficialmente publicada no GitHub como software de código aberto sobe o nome de AngularJS, segundo Adam, “Angular” vem do fato do HTML utilizar bastante colchetes angulares (<>) em sua sintaxe (GUDELLI, 2019). Em 2014, o framework foi reescrito do zero para se adequar aos novos padrões que estavam surgindo no ambiente de desenvolvimento web, com a mudança radical de várias APIs 5 e conceitos, ele ficou incompatível com versões anteriores, para amenizar a confusão essa nova versão foi lançada como Angular. Em sua documentação, o Angular (2021a) se descreve como um framework e plataforma de desenvolvimento para criação de aplicações de única página de maneira eficiente e sofisticada. Segundo o site Stackshare (2021a, 2021b). Angular é utilizado por mais de 7 mil empresas, incluindo Google, Nike e HBO. 2.2 REACT Em 2011 o aplicativo Facebook Ads estava sendo desenvolvido por uma equipe interna do Facebook, com a escala do aplicativo aumentando a sua manutenção foi ficando cada vez mais difícil. Para minimizar este problema, Jordan Walke, um engenheiro de software que trabalhava no Facebook, desenvolveu uma biblioteca protótipo chamada FaxJS. A biblioteca tornou o desenvolvimento do aplicativo mais eficiente, cumprindo seu objetivo a biblioteca começou a ser aprimorada (OCCHINO, 2015). Em 2012 ela foi utilizada para implementar o Instagram e em maio de 2013 ela foi publicada no GitHub como software de código aberto sob o nome de React. Atualmente, em sua documentação React se define como: “O React é uma biblioteca JavaScript declarativa, eficiente e flexível para criar interfaces com o usuário. Ele permite compor UIs complexas a partir de pequenos e isolados códigos chamados ‘componentes’.” (REACTJS, 2021a). Mais de 9 mil empresas, incluindo Facebook, Uber, e Netflix, utilizam o framework segundo o site Stackshare (2021c). 2.3 VUE Ethan You trabalhava na Google com prototipagem de interfaces para web, em vários projetos era utilizado o framework Angular. Apesar de reconhecer várias vantagens, Ethan considerava o Angular um framework muito pesado e restritivo. Então, extraindo partes que gostava da ferramenta, Ethan desenvolveu um framework mais leve e flexível. Em fevereiro de 2014 o framework foi publicado no GitHub como software de código aberto sob o nome de Vue (CROMWELL, 2017). Em sua documentação, Vue se descreve como: Vue [...] é um framework progressivo para a construção de interfaces de usuário. [...] Vue foi projetado desde sua concepção para ser adotável incrementalmente. A 6 biblioteca principal é focada exclusivamente na camada visual (view layer), sendo fácil adotar e integrar com outras bibliotecas ou projetos existentes. Por outro lado, Vue também é perfeitamente capaz de dar poder a sofisticadas Single-Page Applications quando usado em conjunto com ferramentas modernas e bibliotecas de apoio. (VUEJSBR-DOCS-NEXT, 2021) De acordo com o site Stackshare (2021d) mais de 3 mil empresas, incluindo Xiaomi, Alibaba e 9GAG utilizam Vue em suas aplicações. 3 METODOLOGIA Para realizar a análise comparativa os frameworks serão medidos sob várias métricas, tendo seus resultados avaliados e discutidos. Na análise serão empregados tanto o método quantitativo, para métricas mais técnicas como popularidade e desempenho, como o método qualitativo, para métricas subjetivas como curva de aprendizagem e documentação. O trabalho concluirá com recomendações feitas com base nas discussões e resultados que podem auxiliar na escolha de um framework ideal para algumas situações. 3.1 MÉTRICAS 3.1.1 Popularidade Popularidade é um indicativo direto da utilização do framework em aplicações do mundo real, uma popularidade alta pode demonstrar que as necessidades de organizações e/ou indivíduos estão sendo atendidas por ele. Aplicações populares lançadas por grandes organizações, especialmente organizações que compartilham a mesma linha de mercado que você ou sua empresa, devem ser consideradas cuidadosamente. Para avaliar essa métricas serão coletados e analisados vários dados das principais plataformas na indústria de desenvolvimento, como NPM, GitHub e Stack Overflow. Além de serem mencionadas algumas empresas e aplicações do mundo real que utilizam os frameworks. 3.1.1.1 NPM O Node Package Manager (NPM) é o maior gerenciador de softwares do mundo, permitindo que desenvolvedores do mundo todo compartilhem e utilizem vários pacotes de código aberto, além de também ser usado por várias organizações como gerenciador de projetos 7 privados (NPM, 2021). A plataforma serve como a principal maneira de se obter várias bibliotecas e frameworks de desenvolvimento web. Analisando a quantidade de downloads mensais dos últimos dois semestres de cada framework na plataforma NPM é possível obter algumas informações sobre suas tendências. 3.1.1.2 GitHub O Github (2021a) se apresenta como a plataforma de desenvolvimento mais avançada do mundo, tendo mais de 65 milhões de usuários, mais de 3 milhões de organizações, e hospedando mais de 200 milhões de repositórios. A grande comunidade diversificada de desenvolvedores faz do GitHub uma fonte confiável e única para se analisar a popularidade de várias tendências na área de desenvolvimento. Usuários da plataforma podem marcar repositórios que lhe interessam com estrelas para tornar mais fácil achá-lo no futuro, além de mostrar interesse e apreciação no trabalho dos colaboradores. Ao marcar o repositório, o usuário também começa a receber recomendações de projetos similares na plataforma (GITHUB, 2021b). O GitHub também oferece um rastreador de bugs integrado, chamado Issues, ele facilita na manutenção de tarefas e compartilhamento com toda a equipe (GITHUB, 2021c). A quantidade de problemas abertos no Issues pode indicar a complexibilidade e escala do projeto, assim como o suporte da comunidade. 3.1.1.3 Stack Overflow Stack Overflow é uma plataforma de perguntas e respostas que conecta a comunidade global de desenvolvedores, permitindo que desenvolvedores compartilhem código e ajudem uns aos outros. A plataforma obtém mais de 100 milhões de visitas mensalmente, com mais de 21 milhões de perguntas respondidas (STACKOVERFLOW, 2021). Analisando a quantidade de perguntas feitas para cada framework pode indicar qual é mais usado e discutido, mas é importante levar em consideração que frameworks mais complexos podem ter mais questões. 8 3.1.2 Comunidade Um framework pode ser bem popular, mas sua comunidade pode ser pequena ou estar em declínio, o que pode indicar que ele está evoluindo em uma direção não desejada ou não está evoluindo. Ao adotar um framework o indivíduo ou organização corre vários riscos, um deles é o abandono pelos seus criadores e/ou comunidade, deixando-os com poucas opções. Portanto, deve servir como um bom indicador quando uma empresa oferece apoio financeiro a um framework, pois isso ajuda a manter seus colaboradores envolvidos e diminui os riscos que ele apresenta. Nesta métrica será analisado alguns fatores que colaboram para o tamanho da comunidade do framework, um deles é a quantidade de pacotes dependentes disponíveis no NPM, que podem ser bibliotecas ou plugins, outro é o tamanho da equipe principal. Também será documentado quais os incentivos e suporte financeiro que cada framework obtém. 3.1.3 Recursos, Flexibilidade e Suporte Os três frameworksa serem analisados aqui foram criados para resolver problemas, com objetivos específicos que influenciaram em suas evoluções ao longo dos anos. Cada um tem um escopo, com algumas funcionalidades incluídas nativamente, e outras deixadas para serem incluídas como extensão. A automatização de tarefas de desenvolvimento também é importante ao utilizar um framework, ela permite ao desenvolvedor abstrair partes do processo de desenvolvimento, aumentando sua produtividade. Nesta métrica será documentado o escopo do framework, suas funcionalidades disponíveis, sendo elas nativas ou extensões, assim como sua flexibilidade e ferramentas de suporte. 3.1.4 Curva de aprendizagem e Documentação A curva de aprendizagem de um framework pode ser um fator importante a ser considerado. Essa curva inclui o nível de conhecimentos previamente necessários para iniciar o aprendizado e a complexibilidade dos conceitos utilizados pelo framework. O nível de conhecimentos requeridos varia entre conceitos mais simples de desenvolvimento web, como HTML, JS e CSS, até conceitos mais avançados, como TypeScript (TS). 9 Essa métrica abordará quais conhecimentos e conceitos são necessários para utilizar o framework, analisando as suas documentações disponíveis oficialmente. 3.1.4.1 Versionamento do JavaScript e TypeScript O JavaScript possui várias versões, que se diferenciam entre si pela disponibilidade de recursos, funcionalidades e sintaxe. As várias implementações de JavaScript são padronizadas pelo ECMA-262, um documento publicado pela organização Ecma International que contêm a especificação para linguagens de script, conhecido como ECMAScript (ES) (ECMA INTERNATIONAL, 2021). O ES está em desenvolvimento contínuo desde a sua primeira edição, em 1997, inicialmente tendo um intervalo entre edições longo, o que contribuiu para que a quinta edição (ES5) ficasse bastante popular e consolidada no desenvolvimento web. Em 2015 a sexta edição (ES6) foi publicada, e dela em diante novas edições passaram a ser publicadas anualmente, sendo sua versão mais recente a ES12. Quando é preciso manter compatibilidade com navegadores mais antigos, códigos feitos em versões mais recentes precisam ser convertidos para código de versões anteriores, esse processo é chamado de transpiling. Como o ES5 foi a versão usada por muito tempo, ela acaba sendo um alvo frequente de transpilings. Figura 1 - Relação entre ECMAScript e TypeScript Fonte: Elaboração do autor, 2021. Enquanto React e Vue são construídos em volta da linguagem JavaScript, Angular utiliza conceitos e é escrito na linguagem TypeScript. A linguagem TypeScript foi criada pela Microsoft como um superset de JavaScript, com o objetivo de ser uma linguagem mais robusta para aplicações escaláveis. A mudança mais evidente na linguagem é a introdução de um sistema de verificação estática de tipos, conhecida como static typing, que adiciona uma camada a mais de segurança ao código. Como é representado na Figura 1, o TypeScript é uma extensão do ES, portanto também pode ser convertido para várias versões de JavaScript. 10 3.1.5 Desempenho O desempenho de uma aplicação pode ser importante para o seu sucesso, pois muitas vezes ela precisa ser eficiente o suficiente para ter uma execução fluida em sistemas e/ou redes de baixa performance. Enquanto o desempenho de modo geral depende do próprio desenvolvimento da aplicação, o framework em que ela é construída pode influenciar. Nesta métrica será analisado o desempenho do framework através de vários testes de operações no DOM por aplicações desenvolvidas e implementadas igualmente em cada competidor. 3.1.5.1 DOM Figura 2 - Relações entre o JS, DOM e HTML Fonte: Elaboração do autor, 2021. DOM é uma interface de programação que dá acesso dinâmico a estrutura, estilo e conteúdo de um documento web, oferecendo um modelo interativo do documento HTML e permitindo que qualquer linguagem compatível possa manipulá-lo. A Figura 2 mostra como acontecem as relações entre o JS, DOM e HTML. A maioria dos navegadores implementam nativamente o DOM padronizado pela World Wide Web Consortium (W3C), onde o DOM é criado a partir do momento que o documento HTML é analisado, deixando-o disponível para manipulação (WHATWG, 2021). Através das ferramentas de desenvolvedor disponíveis em vários navegadores é possível visualizar o DOM atual. No Google Chrome, por exemplo, é possível visualizar uma representação do DOM na aba “Elementos” das ferramentas de desenvolvedor, que pode ser aberta clicando com o botão 11 direito do mouse em qualquer elemento da aplicação e selecionando a opção “Inspecionar”, dando foco ao elemento inspecionado. Figura 3 - Representação de como um documento HTML é tratado no DOM Fonte: Elaboração do autor, 2021. Como é representado na Figura 3, o DOM trata o HTML como uma coleção de objetos organizados em uma estrutura de árvore, onde cada nodo é um objeto que representa um elemento HTML, como <html>, <head>, <body>, etc. O documento HTML da aplicação é carregado pelo navegador e sua representação no DOM fica disponível através do objeto document, que é o principal ponto de acesso do documento para várias linguagens. No objeto document ficam disponíveis várias funções interativas que manipulam o documento HTML 12 conforme são utilizadas, permitindo adicionar, remover e alterar os elementos, atributos e eventos HTML, além de manipular estilos CSS (ROBIE, RESEARCH, 2021). O DOM é bem importante nesta métrica, pois cada framework tem sua própria abordagem na implementação de interações com o objeto, portanto ao executar diferentes operações no DOM podemos avaliar o desempenho de cada implementação. 3.1.5.2 Virtual DOM Uma implementação de interação com o DOM utilizada e popularizada por vários frameworks, incluindo React e Vue, é o Virtual DOM. Nesta implementação é criado um objeto representando uma versão leve do DOM que oferece maneiras mais eficientes e simplificadas de interação, evitando que o desenvolvedor interaja manualmente com DOM real. O principal motivo da utilização de um DOM virtual é mitigar o custo de atualizações, evitando atualizações frequentes diretamente no DOM real. Quando o conteúdo do DOM virtual é modificado ele é comparado com o conteúdo do DOM real e então o DOM real atualiza apenas os nodos modificados de maneira eficiente (GORE, 2017). 3.1.5.3 Projeto Para medir o desempenho dos frameworks será projetado uma aplicação, que permitirá a execução intencional de várias operações no DOM. Essa aplicação será desenvolvida em todos os frameworks com a mesma lógica e visual. Figura 4 - Protótipo da aplicação para testes Fonte: Elaboração do autor, 2021. 13 Como é apresentado na Figura 4, a aplicação possuirá uma série de ações, que irão auxiliar na execução dos testes, e uma tabela, que terá suas linhas modificadas ao longo dos testes. Cada linha da tabela representa um elemento das listas de dados fictícios que vão ser geradas e modificadas durante os testes, exibindo o identificador e texto do elemento, além de uma ação para removê-lo da lista. Também será possível selecionar uma linha da tabela, com um efeito visual indicando seu estado de seleção. As ações planejadas para a execução dos testes são as seguintes: a) criar 1000 linhas na tabela; b) criar 10000 linhas na tabela; c) inserir 1000 linhas a tabela; d) atualizar texto a cada 10 linhas da tabela; e) trocar a primeira linha com a última da tabela; f) limpar todas as linhas da tabela. 14 3.1.5.4 Testes Figura 5 - Especificações do dispositivo e sistema usado para a execução dos testes Fonte: Elaboração do autor, 2021. Para a realização dos testes as aplicações serão servidas localmente, e os testes executados no navegador Google Chrome. Como mostrado na Figura 5, o dispositivo que será usado paraexecutar os testes possui o processador i5 3330 com uma frequência de 3GHz, 8GB de memória RAM, e o sistema operacional Windows 10 Pro. Os resultados dos testes serão obtidos a partir da ferramenta “Desempenho” das ferramentas de desenvolvedor disponíveis no navegador Google Chrome, e serão apresentados com unidades de medida em milissegundos (ms). O objetivo é avaliar o desempenho de cada framework em operações no DOM, essas operações variam entre criação, atualização, inserção, e remoção de elementos. Os testes serão executados quatro vezes após a aplicação carregar totalmente, evitando anomalias nos resultados. 3.1.5.4.1 Teste 1: Criação de 1000 linhas 15 Cria 1000 linhas na tabela vazia. Neste teste é possível avaliar o desempenho do framework ao criar e configurar os 8000 elementos no DOM. 3.1.5.4.2 Teste 2: Criação de 10000 linhas Cria 10000 linhas na tabela vazia. Uma versão mais pesada do teste anterior, onde o framework tem que criar e configurar 80000 elementos no DOM. Apesar de ser um número exagerado de elementos, esse teste pode ser útil para mostrar a eficiência do framework conforme o número de elementos criados no DOM aumenta. 3.1.5.4.3 Teste 3: Inserção de 1000 linhas Insere 1000 linhas na tabela com 10000 linhas. Este teste avalia o desempenho do framework ao processar a inserção e configuração de 8000 elementos no DOM quando já se tem vários elementos montados. 3.1.5.4.4 Teste 4: Atualização parcial Modifica o texto de uma linha a cada 10 linhas de uma tabela com 1000 linhas. Neste teste é possível avaliar o desempenho do framework ao alterar os 100 elementos no DOM. 3.1.5.4.5 Teste 5: Troca de linhas Troca a primeira linha pela última linha na tabela com 1000 linhas. Avalia o desempenho do framework ao verificar a diferença entre duas listas de elementos e atualizar no DOM apenas os elementos modificados. 3.1.5.4.6 Teste 6: Remoção de linhas Remove todas as linhas da tabela com 1000 linhas. Testa o desempenho do framework em identificar os elementos que precisam ser removidos e removê-los. 3.1.5.4.7 Teste 7: Remoção de linha 16 Remove a linha 500 da tabela com 1000 linhas. Testa o desempenho do framework em identificar o elemento que precisa ser removidos e removê-lo. 3.1.5.4.8 Teste 8: Seleção de linha Seleciona a linha 500 no meio da tabela com 1000 linhas. Este teste avalia o desempenho do framework na checagem e atualização de estados em diferentes elementos. 4 COMPARAÇÃO 4.1 POPULARIDADE Algumas das primeiras dúvidas antes de começar a aprender ou usar um framework são: o quão usado é o framework? quais aplicações do mundo-real estão o utilizando? quais empresas investiram no seu uso? Para esclarecer estas dúvidas serão analisados alguns dados referentes a popularidade de cada framework, além de serem mencionadas aplicações e empresas que os utilizem. 17 Gráfico 1 - Quantidade de downloads no NPM por mês, dos últimos dois semestres até junho de 2021 Fonte: Elaboração do autor, 2021. Podemos ver no Gráfico 1, os três frameworks são bem populares, acumulando milhões em downloads mensais no NPM, fica evidente que o React é o líder em adoção pública, estando a frente de seus adversários por mais de 30 milhões de downloads mensais. Angular e Vue estão competindo lado a lado acumulando em volta de 10 milhões de downloads mensais cada. A imensa vantagem do React pode ter relação com a grande quantidade de bibliotecas disponíveis para o framework, que adicionam funcionalidades extras ao seu fluxo de desenvolvimento, enquanto o Angular oferece várias destas funcionalidades embutidas, mas, sem dúvidas, o React mostra uma vantagem significativa a frente de seus adversários. Tabela 1 - Estatísticas do repositório de cada framework no GitHub, de 2021. Angular React Vue Estrelas ~76k ~175k ~188k Problemas abertos ~1930 ~830 ~530 Fonte: Elaboração do autor, 2021. 0 10 20 30 40 50 M IL H Õ ES Angular React Vue 18 Observando a Tabela 1, podemos ver uma diferença de liderança do último resultado, Vue lidera no número de estrelas, com 188 mil estrelas, um pouco à frente do React, com 175 mil, enquanto Angular fica bem atrás, com 76 mil estrelas, mais da metade a menos de estrelas que seus adversários. Já na questão de problemas abertos, o Angular acumula 1930 problemas abertos, mais que o dobro do React, com 830, e o Vue ficando apenas com 530. Deve ser considerado que os dados do GitHub podem ter um pequeno viés, pois frameworks mais complexos podem ter mais problemas abertos enquanto os mais antigos tiveram mais tempo de acumular seguidores. Angular sendo o mais antigo pode explicar a grande quantidade de problemas abertos em seu repositório, mas observando os dados podemos concluir que o Angular é o menos popular no GitHub e o mais problemático, enquanto Vue é o mais popular e o menos problemático, seguido do React. Tabela 2 - Quantidade de questões feitas no Stack Overflow para cada framework, de 2021. Angular React Vue Questões ~260k ~330k ~83k Fonte: Elaboração do autor, 2021. Com 330 mil questões feitas no Stack Overflow, React lidera em popularidade na plataforma dentre seus competidores, seguido de Angular com 260 mil e Vue com apenas 83 mil questões feitas, conforme demonstra a Tabela 2. 4.1.1 Uso corporativo Os frameworks também são usados por pequenas, médias e grandes empresas, o que pode indicar uma preferência na área em que essas empresas atuam. Por fim, será citado algumas empresas que utilizam cada framework, e consequentemente seus aplicativos. Segundo o Stackshare (2021a, 2021b) as seguintes empresas utilizam o Angular: a) Google; b) Forbes; c) Backbase; d) NetApp; e) Beam. 19 De acordo com o Stackshare (2021c), React é usado por: a) Facebook; b) Uber; c) Pinterest; d) Instagram; e) Twitter; f) LinkedIn; g) Netflix. Segundo o Stackshare (2021d), Vue é usado por: a) Alibaba; b) Trivago; c) 9GAG; d) GitLab; e) Stack. 4.2 COMUNIDADE Tabela 3 - Quantidade de pacotes dependentes disponíveis no NPM para cada framework, de 2021. Angular React Vue Quantidade de pacotes ~12k ~78k ~47k Fonte: Elaboração do autor, 2021. Analisando a Tabela 3 percebemos que existe uma diferença discrepante entre os competidores, embora nem todos sejam pacotes que agregam ao ambiente de desenvolvimento do framework, como agregam as bibliotecas e plugins, é possível saber o tamanho de cada ecossistema. Com 78 mil pacotes disponíveis no NPM, mais que seus dois adversários juntos, React obtém o maior ecossistema, seguido do Vue com 47 mil pacotes e Angular com apenas 12 mil pacotes. Uma equipe principal grande que mantém o framework pode indicar que seus membros estão envolvidos em ajudar e dar suporte a comunidade. Angular possui uma equipe principal de 30 pessoas, a do React é composta por 9 pessoas, enquanto o Vue dispõe uma equipe principal de 19 pessoas (ANGULAR, 2021b; REACTJS, 2021b; VUEJS, 2021a). Considerando 20 que o tamanho da equipe depende também do tamanho e escopo do framework, é natural que o Angular tenha a maior equipe. 4.2.1 Suporte financeiro Os três frameworks possuem várias formas de apoio financeiro, porém apenas o Angular e o React possuem apoio de grandes empresas na área de tecnologia. Angular é administrado e mantido por desenvolvedores do Google e React por desenvolvedores do Facebook (ANGULAR, 2021c; REACTJS, 2021c). O apoio dessas empresas pode oferecer um maior conforto e suporte a longo prazo, mas é importante lembrar que elas tomam a maioria de suas decisões priorizando o lucro, fazendo com que suas preocupações nem sempre estejam alinhadas com as necessidades dos usuários. O Vue obtém seu suporte da comunidade open source, onde desenvolvedores e pequenas/médias organizações oferecem apoio financeiro através do Patreon, uma plataforma de financiamentocoletivo, além de contribuírem na manutenção do framework através do GitHub (VUEJS, 2021b). Como o apoio financeiro vem da comunidade, as preocupações do Vue têm mais chances de estarem alinhadas com as de seus usuários. Também é importante lembrar que o Google e Facebook já abandonaram vários produtos bem populares no passado, e poderia o fazer novamente caso seus objetivos de negócios mudem. 4.3 RECURSOS, FLEXIBILIDADE E SUPORTE É importante documentar o escopo da criação de cada framework para entender melhor seus objetivos. O Angular foi criado para ajudar equipes e organizações em seus obstáculos na construção de SPAs, seu objetivo é abordar o máximo desses obstáculos possíveis de maneira eficiente e escalável. Já o React foi criado para ajudar desenvolvedores a criar interfaces de usuário escaláveis, simples e eficientes para aplicações web complexas. E o Vue foi criado para ser uma alternativa leve, incremental e progressiva ao Angular, a intenção do autor era um framework simples de começar a desenvolver e que escale junto a complexibilidade do aplicativo. Angular é o framework mais completo, oferecendo várias funcionalidades como roteamento e gerenciamento de estados de forma nativa e integrada com o seu ambiente de desenvolvimento. Esse aspecto também o torna o mais rígido, impondo suas próprias estratégias 21 de desenvolvimento sobre o projeto, deixando pouco poder de decisão para o desenvolvedor. Em contraponto, o React e Vue são mais flexíveis, impondo apenas a estratégia de como renderizar a aplicação e deixando funcionalidades como roteamento para bibliotecas externas. Todos os frameworks possuem uma ferramenta oficial para o gerenciamento do projeto, com a quantidade de funcionalidades variando entre eles. React e Vue oferecem as ferramentas create-react-app e @vue/cli, respectivamente, elas permitem a criação e configuração inicial de projetos. No Angular a ferramenta @angular/cli é disponibilizada, além de permitir a criação e configuração de um projeto, ela oferece vários comandos que tornam o desenvolvimento no framework mais eficiente como o ng generate que permite a criação e configuração de serviços, componentes, módulos etc. para a aplicação. 4.4 CURVA DE APRENDIZAGEM E DOCUMENTAÇÃO Por serem frameworks de desenvolvimento web, algumas noções de tecnologias web se fazem necessárias para compreender seu funcionamento. Alguns frameworks também requerem conceitos mais avançados de sua utilização como veremos a seguir. Quadro 1 - Conhecimentos necessários para utilizar cada framework. Framework Conhecimentos Angular HTML, CSS, TypeScript React JS (ES6+), JSX, CSS-in-JS Vue HTML, CSS, JS (ES5+) Fonte: Elaboração do autor, 2021. Como mostra no Quadro 1 os frameworks variam bastante nos conhecimentos necessários para utilizá-los. Começando pelo menos disruptivo em relação a conceitos web, o Vue utiliza HTML para sua composição de interface de usuário e CSS para customização de aparência. O framework recomenda o uso e utiliza conceitos de versões mais recentes de JavaScript como ES6, mas versões mais antigas como ES5 são suportadas. Conceitualmente, Vue é o framework com mais familiaridade em relação às tecnologias tradicionais de web, por exemplo, todos os seus templates são HTML válidos podendo ser executados nativamente por navegadores. Apesar disso, ele oferece sintaxes customizadas através de atributos e componentes web, permitindo criar estruturas de controle, inserir componentes, realizar data- 22 binding e outras funcionalidades. Outra sintaxe disponível e bastante usada em seus templates é a “Mustache”, que permite a execução de qualquer JavaScript válido no contexto de seu componente, além de permitir também o acesso a variáveis disponíveis em seu contexto. Figura 6 – Código fonte de uma aplicação web construída com React que renderiza o texto “Hello World!”, escrita em JSX Fonte: Elaboração do autor, 2021. O React utiliza vários conceitos de versões recentes de ES, como módulos, interpolação de string, arrow functions etc., além de requerer que o desenvolvedor utilize ES6 ou superior. O aspecto mais notável do React é o JSX, uma extensão de sintaxe da linguagem JavaScript que incorpora a fácil criação de elementos e a funcionalidade estrutural presente no HTML com a dinamicidade do JS, sua sintaxe pode ser vista na Figura 6. Embora React não requeira o uso de JSX, suas documentações, tutoriais e códigos exemplo são majoritariamente escritos utilizando-a. Outro aspecto bastante popular no ecossistema do React é o conceito de CSS-in-JS, que incorpora a estilização CSS na linguagem JS, visando eliminar problemas presentes no CSS vanilla, como a falta de módulos, escopo de estilos e otimização. O uso de bibliotecas que implementam este conceito ficou bastante popular, e por consequência várias bibliotecas e plugins do ambiente de desenvolvimento do React o utilizam, tornando quase indispensável que seja estudado por quem deseja desenvolver e aprender o framework. Apesar de ser considerado um framework JavaScript, Angular é escrito inteiramente em TypeScript e aproveita vários conceitos da linguagem em seu ambiente de desenvolvimento, 23 como decorações e static typing. Angular também usa uma sintaxe de template customizada, mas diferente do Vue, seus templates não são HTML válido para a executados em navegadores e várias limitações são impostas na execução de expressões JavaScript. Enquanto desenvolvedores confortáveis com uma linguagem static-typed como Java e C# terão mais familiaridade, outros podem considerar esses conceitos uma sobrecarga. Vue apresenta a menor curva de aprendizagem, oferecendo uma ótima documentação mantida com a ajuda da comunidade e focando em práticas já consolidadas no ambiente web, sendo recomendado para usuários que preferem uma abordagem mais tradicional no desenvolvimento web. JSX é a principal linguagem usada pelo React, sendo recomendado que seus usuários possuam experiência ou maior conhecimento dos conceitos de JS. Angular apresenta uma curva de aprendizagem mais abrupta, pois apesar de seus conceitos fundamentais serem fáceis de aprender, a sua lógica fica rapidamente complexa. Enquanto alguns desenvolvedores confortáveis com linguagens static-typed como Java e C# terão mais familiaridade com Angular pelo seu uso da linguagem TS e seus conceitos, outros usuários podem considerá-los uma sobrecarga. Várias empresas também podem achar conveniente as convenções e padrões presentes no ambiente do framework, como injeção de dependências, serviços e interceptadores. 4.5 DESEMPENHO 4.5.1 Projeto A aplicação de testes foi implementada com o mesmo visual e lógica entre os três frameworks, compartilhando os mesmos estilos CSS e estrutura HTML apresentados na Figura 7. O projeto das aplicações está hospedado no GitHub no endereço https://github.com/Azganoth/angular-react-vue-benchmark. 24 Figura 7 - Tela da aplicação de testes após a execução da ação “Criar 1,000 linhas” com a primeira linha selecionada Fonte: Elaboração do autor, 2021. As três aplicações compartilham o mesmo código que gera os dados fictícios, sendo importado por elas como uma biblioteca. Os dados são gerados a partir de dois pequenos dicionários, como mostra na Figura 8. A função generateData gera n objetos, cada um com duas chaves: id, que guarda o identificador como um número inteiro, e text, que guarda o texto como uma string. O texto de cada objeto é gerado a partir de duas palavras selecionadas aleatoriamente, através da função pickRandomWord, dos arrays dictionary_1 e dictionary_2. 25 Figura 8 - Código usado para geração de dados fictícios Fonte: Elaboração do autor, 2021. 4.5.2 Resultados 4.5.2.1 Angular Para o Angular a aplicação foi construída usando a ferramenta de suporte oficial @angular/cli, com o Angularna versão 12.2.9. Os resultados dos testes realizados na aplicação são apresentados na Tabela 4. 26 Tabela 4 - Resultados dos testes feitos na aplicação desenvolvida no Angular. Tentativa 1 (ms) Tentativa 2 (ms) Tentativa 3 (ms) Tentativa 4 (ms) Criação de 1000 linhas 144 165 150 156 Criação de 10000 linhas 1010 884 995 900 Inserção de 1000 linhas 103 115 107 104 Atualização parcial 16 17 19 16 Troca de linhas 118 126 120 117 Remoção de linhas 105 119 114 105 Remoção de linha 12 15 14 13 Seleção de linha 7 8 7 8 Fonte: Elaboração do autor, 2021. 4.5.2.2 React Para o desenvolvimento da aplicação no React foi usada a ferramenta de suporte oficial create-react-app, e o React na versão 17.0.2. A execução dos testes na aplicação produziu os resultados apresentados na Tabela 5. Tabela 5 - Resultados dos testes feitos na aplicação desenvolvida no React. Tentativa 1 (ms) Tentativa 2 (ms) Tentativa 3 (ms) Tentativa 4 (ms) Criação de 1000 linhas 117 110 108 110 Criação de 10000 linhas 1480 1059 1111 1080 Inserção de 1000 linhas 236 238 263 224 Atualização parcial 55 63 61 63 Troca de linhas 148 151 153 148 Remoção de linhas 83 84 83 74 Remoção de linha 75 79 67 68 Seleção de linha 68 66 64 65 Fonte: Elaboração do autor, 2021. 27 4.5.2.3 Vue No Vue foi usado a ferramenta @vue/cli para o desenvolvimento da aplicação, que é a ferramenta de suporte oficial do framework, com o Vue na versão 3.2.19. Os resultados obtidos na execução dos testes na aplicação são apresentados na Tabela 6. Tabela 6 - Resultados dos testes feitos na aplicação desenvolvida no Vue. Tentativa 1 (ms) Tentativa 2 (ms) Tentativa 3 (ms) Tentativa 4 (ms) Criação de 1000 linhas 117 124 120 116 Criação de 10000 linhas 678 679 594 704 Inserção de 1000 linhas 296 316 228 321 Atualização parcial 60 62 65 60 Troca de linhas 54 47 55 52 Remoção de linhas 101 102 98 106 Remoção de linha 67 79 75 71 Seleção de linha 38 40 40 35 Fonte: Elaboração do autor, 2021. 4.5.3 Análise Os resultados dos vários testes realizados serão comparados e discutidos a seguir. Para a comparação será calculada e utilizada a média das quatro tentativas executadas em cada teste. 28 Gráfico 2 - Comparação de desempenho nos testes 1, 2 e 3 entre os frameworks, apresentando a média dos resultados de cada teste Fonte: Elaboração do autor, 2021. Analisando o Gráfico 2, podemos observar resultados intrigantes, pois cada framework lidera em diferentes situações na inserção de elementos no DOM. No primeiro teste, que insere 1000 linhas em uma tabela vazia, o React fica à frente do Vue por 8ms, concluindo a tarefa em 111ms, enquanto o Vue leva 119ms. O Angular fica um pouco atrás de seus adversários, levando 153ms para finalizar a tarefa, 34ms a mais que Vue. Apesar das diferenças de tempo, todos os frameworks performaram muito bem no primeiro teste. No segundo teste, que exagera o teste anterior, inserindo 10000 linhas em uma tabela vazia. Desta vez o Vue toma a liderança, sendo necessário apenas 663ms para concluir as operações, ficando com 284ms a frente do Angular, que agora levou 947ms. React demorou quase o dobro de tempo que Vue, levando 1182ms para completar as operações. O terceiro teste insere 1000 linhas em uma tabela com 10000 linhas. Neste teste o Angular mostra uma grande vantagem entre seus adversários, com 107ms requeridos, 133ms a menos que React, que levou 240ms. Vue demorou 290ms para terminar as operações, levando 50ms a mais que React. 153,75 947,25 107,25 111,25 1182,5 240,25 119,25 663,75 290,25 0 200 400 600 800 1000 1200 1400 Teste 1 Teste 2 Teste 3 MILISSEGUNDOS (MS) Angular React Vue 29 Gráfico 3 - Comparação de desempenho nos testes 4 e 5 entre os frameworks, apresentando a média dos resultados de cada teste Fonte: Elaboração do autor, 2021. O Gráfico 3 mostra os resultados dos testes de operações de edição no DOM. Começando pelo quarto teste, onde é feita uma atualização no texto da primeira linha a cada 10 linhas em uma tabela com 1000 linhas, o Angular lidera requerendo apenas 17ms completar a tarefa, 43ms a menos que React seu adversário mais próximo, sendo até três vezes mais performático que seus competidores. React e Vue se mantém equiparados na tarefa, levando 60ms e 61ms para completá-la, respectivamente. Já no quinto teste, onde a posição da primeira e última linha em uma tabela com 1000 linhas é trocada, o Vue demonstra mais desempenho que seus competidores, levando 52ms, 68ms a menos que Angular, que levou 120ms para completar. React fica em último com 152ms necessários para finalizar. 17 120,25 60,5 150 61,75 52 0 20 40 60 80 100 120 140 160 Teste 4 Teste 5 MILISSEGUNDOS (MS) Angular React Vue 30 Gráfico 4 - Comparação de desempenho nos testes 6 e 7 entre os frameworks, apresentando a média dos resultados de cada teste Fonte: Elaboração do autor, 2021. A comparação agora se volta ao desempenho dos frameworks em operações de remoção no DOM, com os resultados apresentados no Gráfico 4. No sexto teste, que remove todas as linhas da tabela com 1000 linhas, o React oferece o maior desempenho com 81ms necessários para finalizar a tarefa, seguido de Vue com 101ms. Angular fica um pouco atrás de Vue levando 110ms para concluir a tarefa. O sétimo teste, que remove apenas uma linha da tabela com 1000 linhas, o Angular abre uma vantagem enorme, necessitando apenas 13ms para completar a tarefa, obtendo até cinco vezes mais performance que seus adversários. React e Vue ficaram equiparados em mais um teste, levando 72ms e 73ms para concluir a tarefa, respectivamente. A enorme vantagem do Angular neste teste se dá pelo fato de ser uma tarefa que se beneficia da manipulação direta no DOM real, enquanto os outros frameworks utilizam um DOM virtual. 110,75 13,5 81 72,25 101,75 73 0 20 40 60 80 100 120 Teste 6 Teste 7 MILISSEGUNDOS (MS) Angular React Vue 31 Gráfico 5 - Comparação de desempenho no teste 8 entre os frameworks, apresentando a média dos resultados de cada teste Fonte: Elaboração do autor, 2021. No Gráfico 5 é apresentado os resultados da última comparação de desempenho, que avalia a performance de manipulação de estado dos elementos no DOM. No oitavo e último teste, onde é selecionado uma linha na tabela com 1000 linhas, o Angular lidera, requerendo apenas 7ms para realizar a tarefa, novamente sendo cinco vezes mais performático que seu adversário mais próximo, o Vue, que levou 38ms. React mostrou a pior performance entre os competidores, sendo necessário 65ms para concluir a tarefa. Neste teste, além do Angular demonstrar mais desempenho em seu gerenciamento de estados, ele também se beneficia novamente da manipulação direta do DOM real. O Angular obteve liderança com bastante vantagem na maioria dos testes, enquanto React e Vue dividiram a liderança igualmente no restante dos testes. A abordagem de não utilizar um DOM virtual e realizar as manipulações diretamente no DOM real pode ser o motivo de seu alto desempenho em operações simples de manipulação e gerenciamento de estados. E apesar de não liderar nos outros testes, seu desempenho ainda foi satisfatório. Vue também demonstrou um bom desempenho em comparação com seus adversários em operações que manipulam vários elementos, obtendo altas vantagens nos dois testes em que ele lidera. Apesar de também liderar em dois testes, React não apresenta muita vantagem, muitas vezes ficando lado a lado com Vue em termos de desempenho. 5 CONCLUSÃO A decisão de um framework dependerá de vários fatores: importância do desempenho, escala do projeto, conhecimento da equipe, experiências anteriores etc., e como não existe um 7,5 65,75 38,25 0 10 20 30 40 50 60 70 Teste 8 MILISSEGUNDOS (MS) Angular React Vue 32 frameworkque resolva todos os problemas serão feitas algumas recomendações para certos casos de uso baseadas nos resultados das comparações feitas neste trabalho. Os três frameworks são recomendados para aplicações de larga escala, sendo que escalabilidade foi um dos objetivos na criação e desenvolvimentos de Angular, React e Vue. O Angular é recomendado para equipes que tenham histórico ou experiência com linguagens orientadas a objetos, ou até apreciação pela linguagem TypeScript. Angular também é recomendado para empresas ou equipes que preferem uma ênfase na estrutura entre vários projetos. Em contraponto, React e Vue oferecem mais flexibilidade na estrutura, organização e desenvolvimento de aplicações web, o que pode ser benéfico em alguns projetos. React é recomendado para quem busca um grande ecossistema, com uma comunidade gigante e grande variedade de soluções para problemas web. Também é recomendado para equipes com um grande foco ou experiência em JavaScript. Para designers que precisem trabalhar com código HTML, Angular e Vue são facilmente adotáveis. Por fim, Angular é recomendado para aplicações que buscam alto desempenho. É importante lembrar que essas são apenas recomendações e que cada framework deve ser cuidadosamente avaliado no contexto em que ele vai ser usado, dando o devido peso a cada métrica aqui apresentada. REFERÊNCIAS ANGULAR. Introduction to the Angular Docs. Disponível em: https://angular.io/docs. [S. l., 2021a]. Acesso em: 23 mai. 2021. ANGULAR. Angular contributors. Disponível em: https://angular.io/about?group=Angular. [S. l., 2021b]. Acesso em: 18 set. 2021. ANGULAR. Angular. Disponível em: https://angular.io/. [S. l., 2021c]. Acesso em: 19 set. 2021. BLACKWOOD, Benjamin; RAMBEAU, Michael. 2020 JavaScript Rising Stars. Disponível em: https://risingstars.js.org/2020/en#section-framework. Osaka, Japan, 2020. Acesso em: 23 mai. 2021. CROMWELL, Vivian. Between the Wires: An interview with Vue.js creator Evan You. Disponível em: https://www.freecodecamp.org/news/between-the-wires-an-interview-with- vue-js-creator-evan-you-e383cbf57cc4/. [S. l.], 2017. Acesso em: 23 mai. 2021. ECMA INTERNATIONAL. ECMAScript ® 2021 Language Specification. Disponível em: https://262.ecma-international.org/12.0/. [S. l., 2021]. Acesso em: 22 ago. 2021. 33 GITHUB. About. Disponível em: https://github.com/about. [S. l., 2021a]. Acesso em: 14 ago. 2021. GITHUB. Saving repositories with stars. Disponível em: https://docs.github.com/en/get- started/exploring-projects-on-github/saving-repositories-with-stars. [S. l., 2021b]. Acesso em: 14 ago. 2021. GITHUB. About issues. Disponível em: https://docs.github.com/en/issues/tracking-your- work-with-issues/about-issues. [S. l., 2021c]. Acesso em: 14 ago. 2021. GORE, Anthony. What's The Deal With Vue's Virtual DOM?. Disponível em: https://vuejsdevelopers.com/2017/02/21/vue-js-virtual-dom/. [S. l.], 2017. Acesso em: 22 ago. 2021. GUDELLI, Arunkumar. History of AngularJs. Disponível em: https://www.angularjswiki.com/angular/history-of-angularjs/. [S. l.], 2019. Acesso em: 23 mai. 2021. NPM. About npm. Disponível em: https://docs.npmjs.com/about-npm. [S. l., 2021]. Acesso em: 14 ago. 2021. OCCHINO, Tom. React.js Conf 2015 Keynote - Introducing React Native. Disponível em: https://youtu.be/KVZ-P-ZI6W4. [S. l.], 2015. Acesso em: 23 mai. 2021. STACKSHARE. Why developers like AngularJS. Disponível em: https://stackshare.io/angularjs. [S. l., 2021a]. Acesso em: 23 mai. 2021. STACKSHARE. Why developers like Angular 2. Disponível em: https://stackshare.io/angular-2. [S. l., 2021b]. Acesso em: 23 mai. 2021. STACKSHARE. Why developers like React. Disponível em: https://stackshare.io/react. [S. l., 2021c]. Acesso em: 23 mai. 2021. STACKSHARE. Why developers like Vue.js. [S. l., 2021d]. Disponível em: https://stackshare.io/vue-js. Acesso em: 23 mai. 2021. STACKOVERFLOW. Stack Overflow company page. [S. l., 2021]. Disponível em: https://stackoverflow.com/company. Acesso em: 14 ago. 2021. STATISTA. Global digital population as of January 2021. Disponível em: https://www.statista.com/statistics/617136/digital-population-worldwide/. [S. l.], 2021. Acesso em: 22 mai. 2021. REACTJS. Tutorial: Intro do React. Disponível em: https://reactjs.org/tutorial/tutorial.html#what-is-react. [S. l., 2021a]. Acesso em: 23 mai. 2021. REACTJS. Team. Disponível em: https://reactjs.org/community/team.html. [S. l., 2021b]. Acesso em: 18 set. 2021. 34 REACTJS. React – A JavaScript library for building user interfaces. Disponível em: https://reactjs.org/. [S. l., 2021c]. Acesso em: 19 set. 2021. ROBIE, Jonathan; RESEARCH, Texcel. What is the Document Object Model?. Disponível em: https://www.w3.org/TR/WD-DOM/introduction.html. [S. l., 1998]. Acesso em: 22 ago. 2021. VUEJS. Meet the team. Disponível em: https://v3.vuejs.org/community/team.html. [S. l., 2021a]. Acesso em: 18 set. 2021. VUEJS. Sponsor Vue.js Development. Disponível em: https://v3.vuejs.org/support- vuejs/#current-premium-sponsors. [S. l., 2021b]. Acesso em: 19 set. 2021. VUEJSBR-DOCS-NEXT. Introdução | Vue.js. Disponível em: https://vuejsbr-docs- next.netlify.app/guide/introduction.html. [S. l., 2021]. Acesso em: 23 mai. 2021. WHATWG. DOM Standard. Disponível em: https://dom.spec.whatwg.org. [S. l.], 2021. Acesso em: 22 ago. 2021. 1 Introdução 1.1 Objetivos 1.1.1 Objetivo geral 1.1.2 Objetivos específicos 2 Frameworks 2.1 Angular 2.2 React 2.3 Vue 3 Metodologia 3.1 Métricas 3.1.1 Popularidade 3.1.1.1 NPM 3.1.1.2 GitHub 3.1.1.3 Stack Overflow 3.1.2 Comunidade 3.1.3 Recursos, Flexibilidade e Suporte 3.1.4 Curva de aprendizagem e Documentação 3.1.4.1 Versionamento do JavaScript e TypeScript 3.1.5 Desempenho 3.1.5.1 DOM 3.1.5.2 Virtual DOM 3.1.5.3 Projeto 3.1.5.4 Testes 3.1.5.4.1 Teste 1: Criação de 1000 linhas 3.1.5.4.2 Teste 2: Criação de 10000 linhas 3.1.5.4.3 Teste 3: Inserção de 1000 linhas 3.1.5.4.4 Teste 4: Atualização parcial 3.1.5.4.5 Teste 5: Troca de linhas 3.1.5.4.6 Teste 6: Remoção de linhas 3.1.5.4.7 Teste 7: Remoção de linha 3.1.5.4.8 Teste 8: Seleção de linha 4 Comparação 4.1 Popularidade 4.1.1 Uso corporativo 4.2 Comunidade 4.2.1 Suporte financeiro 4.3 Recursos, Flexibilidade e Suporte 4.4 Curva de aprendizagem e Documentação 4.5 Desempenho 4.5.1 Projeto 4.5.2 Resultados 4.5.2.1 Angular 4.5.2.2 React 4.5.2.3 Vue 4.5.3 Análise 5 Conclusão
Compartilhar