Slide 1

Slide 1 text

OTIMIZAÇÕES E ANÁLISE DE DESEMPENHO DE APLICAÇÕES JAVASCRIPT JÉSSICA FÉLIX (JESSILYNEH)

Slide 2

Slide 2 text

Eu sou a Jess Sou desenvolvedora de Software há 8 anos. Trabalho na área faz 6 anos. I .T. Architect II na F1rst (Grupo Santander) Tech Lead na ONG Lacrei Saúde Instrutora de Javascript na Linux Tips Organizadora na comunidade Nerdzão OTIMIZAÇÕES E ANÁLISE DE DESEMPENHO DE APLICAÇÕES JAVASCRIPT @jessilyneh

Slide 3

Slide 3 text

Ciclo de vida de uma aplicação JavaScript @jessilyneh OTIMIZAÇÕES E ANÁLISE DE DESEMPENHO DE APLICAÇÕES JAVASCRIPT Pode envolver outras etapas específicas, como a criação, atualização e destruição de componentes, além de eventos e fases específicas. Algumas etapas em comum: Carregamento do código fonte da aplicação JavaScript. Análise do código fonte e verifica se há erros léxicos e sintáticos. Compilação o código fonte em código de máquina. Otimização para melhorar o desempenho da aplicação Criação do objeto principal e escopo global, onde todas as funções e variáveis globais são definidas. Execução do código, seguindo as regras de escopo e contexto de execução. 1. 2. 3. 4. 5. 6.

Slide 4

Slide 4 text

Ciclo de vida de uma aplicação JavaScript @jessilyneh OTIMIZAÇÕES E ANÁLISE DE DESEMPENHO DE APLICAÇÕES JAVASCRIPT https://webdesign.tutsplus.com/phases-of-javascript-events--cms-107255t Etapa 1 Carregamento do código fonte: O navegador faz o download do código fonte do JavaScript da página web ou de um servidor externo O navegador faz o download do arquivo JavaScript quando ele encontra uma tag no código HTML da página ou quando um evento que executa código JavaScript é acionado. O download é feito pelo navegador através de uma solicitação HTTP para o servidor que hospeda o arquivo JavaScript, respondendo com o arquivo, que é baixado pelo navegador e armazenado em cache para uso posterior.

Slide 5

Slide 5 text

Ciclo de vida de uma aplicação JavaScript @jessilyneh OTIMIZAÇÕES E ANÁLISE DE DESEMPENHO DE APLICAÇÕES JAVASCRIPT https://blog.matheuscastiglioni.com.br/desconstruindo-a-web-como-v8-funciona/ Etapa 2 Análise do código fonte: O navegador cria uma árvore de sintaxe abstrata (AST) para representar a estrutura do código. Uma vez que o browser tem acesso aos códigos JavaScript (seja após o download ou leitura da tag script), é hora de lê-lo e executá-lo. Nesse momento que entre em cena os motores JavaScript dos navegadores.

Slide 6

Slide 6 text

Ciclo de vida de uma aplicação JavaScript @jessilyneh OTIMIZAÇÕES E ANÁLISE DE DESEMPENHO DE APLICAÇÕES JAVASCRIPT https://blog.matheuscastiglioni.com.br/desconstruindo-a-web-como-v8-funciona/ Etapa 2 Análise do código fonte: O navegador cria uma árvore de sintaxe abstrata (AST) para representar a estrutura do código. Pegar o código JavaScript. Parsear o JavaScript. Montar a AST. Interpretar a AST. Gerar o bytecode. 1. 2. 3. 4. 5.

Slide 7

Slide 7 text

Ciclo de vida de uma aplicação JavaScript @jessilyneh OTIMIZAÇÕES E ANÁLISE DE DESEMPENHO DE APLICAÇÕES JAVASCRIPT https://efcl.info/2016/03/06/ast-first-step/ Etapa 2 Análise do código fonte: O navegador cria uma árvore de sintaxe abstrata (AST) para representar a estrutura do código. A AST é criada a partir do processo de análise léxica e sintática do código fonte, que envolve a identificação de tokens e a construção de uma árvore de análise sintática. A AST é uma representação intermediária do código fonte que é usada pelo interpretador ou compilador para gerar o código executável. A AST é usada para otimizar o código, detectar erros de sintaxe, realizar análise de segurança e muito mais.

Slide 8

Slide 8 text

Ciclo de vida de uma aplicação JavaScript @jessilyneh OTIMIZAÇÕES E ANÁLISE DE DESEMPENHO DE APLICAÇÕES JAVASCRIPT https://medium.com/dailyjs/understanding-v8s-bytecode-317d46c94775 Etapa 3 Compilação: O compilador do JavaScript do navegador converte o código-fonte JavaScript em código de máquina executável

Slide 9

Slide 9 text

Ciclo de vida de uma aplicação JavaScript @jessilyneh OTIMIZAÇÕES E ANÁLISE DE DESEMPENHO DE APLICAÇÕES JAVASCRIPT https://devporai.com.br/5-dicas-para-otimizar-codigo-javascript/ Etapa 4 Otimização: O compilador de Javascript do navegador pode otimizar o código gerado para melhorar o desempenho da aplicação, podendo incluir técnicas como inlining de funções, eliminação de código morto e eliminação de laços Inlining de funções:As funções que são declaradas como inline são substituídas pelo seu corpo real em tempo de compilação. Isso pode reduzir o tempo de execução do programa, pois elimina a sobrecarga de chamadas de função e a alocação de memória para as variáveis locais da função. No entanto, é importante notar que nem todas as funções podem ser inlined, pois algumas funções podem ser muito grandes ou complexas para serem inlined com eficiência.

Slide 10

Slide 10 text

Compiladores Javascript @jessilyneh OTIMIZAÇÕES E ANÁLISE DE DESEMPENHO DE APLICAÇÕES JAVASCRIPT https://geekflare.com/es/best-javascript-online-compilers/ V8: usado no Google Chrome e em outros navegadores baseados no Chromium. Conhecido por sua velocidade e eficiência na compilação de código JavaScript. SpiderMonkey: usado no Mozilla Firefox. Conhecido por sua capacidade de otimizar o código JavaScript em tempo real e por sua compatibilidade com as especificações ECMAScript. Chakra: Usado no Microsoft Edge. Conhecido por sua capacidade de otimizar o código JavaScript em tempo real e por sua compatibilidade com as especificações ECMAScript. JavaScriptCore: Usado no Safari da Apple. Conhecido por sua velocidade e eficiência na compilação de código JavaScript.

Slide 11

Slide 11 text

Ciclo de vida de uma aplicação JavaScript @jessilyneh OTIMIZAÇÕES E ANÁLISE DE DESEMPENHO DE APLICAÇÕES JAVASCRIPT David Flanagan - “JavaScript: O guia definitivo” Etapa 5 Criação do objeto global (Global Object): as propriedades desse objeto são os símbolos definidos globalmente que estão disponíveis para um programa Javascript. A Engine cria um ovo objeto global e dá a ele um conjunto inicial de propriedades que define: propriedades globais, como undefined, Infinity, NaN e etc.. funções globais, como isNaN(), parseInt() e etc… funções construtoras, como Date(), RegExp(), String(), Object(), Array() e etc… objetos globais, como Math, JSON e etc..

Slide 12

Slide 12 text

Ciclo de vida de uma aplicação JavaScript @jessilyneh OTIMIZAÇÕES E ANÁLISE DE DESEMPENHO DE APLICAÇÕES JAVASCRIPT David Flanagan - “JavaScript: O guia definitivo” Etapa 5 Criação do objeto global (Global Object): Em Javascript do lado do cliente, o objeto Window também é o objeto Global. O objeto Window está no topo do encadeamento de escopo e suas propriedades e métodos são efetivamente variáveis globais e funções globais. O objeto Window representa uma janela, guia ou quadro do navegador.

Slide 13

Slide 13 text

Ciclo de vida de uma aplicação JavaScript @jessilyneh OTIMIZAÇÕES E ANÁLISE DE DESEMPENHO DE APLICAÇÕES JAVASCRIPT https://webdesign.tutsplus.com/phases-of-javascript-events--cms-107255t Etapa 6 Execução: O código JavaScript é executado no navegador, interagindo com o DOM (Document Object Model) e outros recursos da página web. O código JavaScript pode ser executado em diferentes contextos: console do navegador, em um arquivo separado ou incorporado em uma página HTML. Durante a execução, o navegador interpreta e executa as instruções contidas no código JavaScript, permitindo que o código manipule elementos HTML, CSS e outros recursos da página, além de interagir com APIs externas e realizar operações em segundo plano.

Slide 14

Slide 14 text

Ciclo de vida de uma aplicação JavaScript @jessilyneh OTIMIZAÇÕES E ANÁLISE DE DESEMPENHO DE APLICAÇÕES JAVASCRIPT https://webdesign.tutsplus.com/phases-of-javascript-events--cms-107255t Etapa 6 Execução: O código JavaScript é executado no navegador, interagindo com o DOM (Document Object Model) e outros recursos da página web. O código JavaScript pode ser executado em diferentes contextos: console do navegador, em um arquivo separado ou incorporado em uma página HTML. Durante a execução, o navegador interpreta e executa as instruções contidas no código JavaScript, permitindo que o código manipule elementos HTML, CSS e outros recursos da página, além de interagir com APIs externas e realizar operações em segundo plano.

Slide 15

Slide 15 text

Ciclo de vida de uma aplicação JavaScript @jessilyneh OTIMIZAÇÕES E ANÁLISE DE DESEMPENHO DE APLICAÇÕES JAVASCRIPT https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Memory_management Etapa 5 Gerenciamento de memória: O navegador gerencia a alocação e desalocação de memória para objetos Javascript, garantindo que a memória seja usada de forma eficiente e evitando vazamentos. Alocar a memória que você precisa Utilizar a memória alocada (ler, escrever) Liberar a memória alocada quando não é mais necessária 1. 2. 3.

Slide 16

Slide 16 text

Ciclo de vida de uma aplicação JavaScript @jessilyneh OTIMIZAÇÕES E ANÁLISE DE DESEMPENHO DE APLICAÇÕES JAVASCRIPT https://www.geeksforgeeks.org/stack-vs-heap-memory-allocation/ Etapa 5 É uma área de memória dinâmica alocada para armazenar objetos e variáveis de instância. Os objetos criados na heap memory são acessíveis por todo o programa. Gerenciada automaticamente pelo coletor de lixo do JavaScript, que libera a memória alocada para objetos que não estão mais em uso. Heap Memory: É uma área de memória estática que é alocada para armazenar variáveis locais e referências de objetos. Gerenciada automaticamente pelo JavaScript, que libera a memória alocada para variáveis locais quando a função que as criou é concluída. É limitada em tamanho e pode causar um estouro de pilha se muitas variáveis locais forem criadas. Stack Memory:

Slide 17

Slide 17 text

Ciclo de vida de uma aplicação JavaScript @jessilyneh OTIMIZAÇÕES E ANÁLISE DE DESEMPENHO DE APLICAÇÕES JAVASCRIPT https://www.geeksforgeeks.org/stack-vs-heap-memory-allocation/ Etapa 5 é usada para armazenar objetos e variáveis de instância Heap Memory: é usada para armazenar variáveis locais e referências de objetos Stack Memory: Memória dinâmica: Alocada em tempo de execução, usada para armazenar objetos e variáveis de instância que precisam ser criados e destruídos dinamicamente durante a execução do programa. memória estática Alocada em tempo de compilação, usada para armazenar variáveis locais e referências de objetos que não precisam ser criados e destruídos dinamicamente durante a execução do programa.

Slide 18

Slide 18 text

Ciclo de vida de uma aplicação JavaScript @jessilyneh OTIMIZAÇÕES E ANÁLISE DE DESEMPENHO DE APLICAÇÕES JAVASCRIPT https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Memory_management Etapa 5 Gerenciamento de memória: O navegador gerencia a alocação e desalocação de memória para objetos Javascript, garantindo que a memória seja usada de forma eficiente e evitando vazamentos.

Slide 19

Slide 19 text

Ciclo de vida de eventos JavaScript A cada evento, a ação se propaga através do Document Object Model (DOM). O DOM possui uma estrutura em árvore, com elementos irmãos, filhos e pais. Os eventos sempre percorrem a árvore em uma sequência. @jessilyneh OTIMIZAÇÕES E ANÁLISE DE DESEMPENHO DE APLICAÇÕES JAVASCRIPT https://webdesign.tutsplus.com/phases-of-javascript-events--cms-107255t Um evento pode ser tão simples quanto hover ou click. Quando os eventos acontecem, existem listeners para executar a funcionalidade como desejada. Representação da Árvore DOM

Slide 20

Slide 20 text

Ciclo de vida de eventos JavaScript @jessilyneh OTIMIZAÇÕES E ANÁLISE DE DESEMPENHO DE APLICAÇÕES JAVASCRIPT https://webdesign.tutsplus.com/phases-of-javascript-events--cms-107255t Uma função JavaScript conhecida como event handler é ativada quando um evento ocorre. Um elemento pode esperar e “ouvir” a ocorrência do evento adicionando um event listener à interface responsiva.

Slide 21

Slide 21 text

Ciclo de vida de eventos JavaScript @jessilyneh OTIMIZAÇÕES E ANÁLISE DE DESEMPENHO DE APLICAÇÕES JAVASCRIPT https://webdesign.tutsplus.com/phases-of-javascript-events--cms-107255t Processo onde os eventos começam a se propagar. Começa no elemento wrapper, que pode ser o Document ou window, O elemento alvo é responsável por iniciar um ciclo de eventos. O evento vinculado à window é executado primeiro. Em seguida, ele desce na seguinte ordem: document, html, body, div e o elemento de destino. The Event Capturing Phase

Slide 22

Slide 22 text

Ciclo de vida de eventos JavaScript @jessilyneh OTIMIZAÇÕES E ANÁLISE DE DESEMPENHO DE APLICAÇÕES JAVASCRIPT https://dom.spec.whatwg.org/#ref-for-dom-event-bubbles%E2%91%A2 "Bubbles" é uma propriedade de eventos em JavaScript que indica se o evento se propaga pela árvore DOM ou não. A propriedade "bubbles" é somente leitura e pode ser acessada por meio do objeto Event

Slide 23

Slide 23 text

Ciclo de vida de eventos JavaScript @jessilyneh OTIMIZAÇÕES E ANÁLISE DE DESEMPENHO DE APLICAÇÕES JAVASCRIPT https://webdesign.tutsplus.com/phases-of-javascript-events--cms-107255t O componente de UI que acionou o evento é conhecido como elemento de destino (target). A propriedade para identificar este alvo é event.target. Se a propriedade bubbles for verdadeira,o elemento pai direto do elemento selecionado é o primeiro a receber o evento, seguido pelo próximo até atingir o elemento . Se as bubbles forem falsas, nenhum dos ancestrais do alvo receberá o evento. The Target Phase

Slide 24

Slide 24 text

Ciclo de vida de eventos JavaScript @jessilyneh OTIMIZAÇÕES E ANÁLISE DE DESEMPENHO DE APLICAÇÕES JAVASCRIPT https://javascript.plainenglish.io/different-phases-of-events-in-javascript-901ed0b23999 O Bubbling é o oposto direto da captura.É aqui que o evento flui do target para o pai. O fluxo ascendente de um evento pode atingir o Document ou até mesmo a Window. Quando você clica no elemento

, todos os event handlers de click dos elementos pai são invocados, começando do mais externo e propagando-se para dentro até o elemento de destino

. The Bubbling Phase

->

->->->.

Slide 25

Slide 25 text

Evitando Problemas de memory leak @jessilyneh OTIMIZAÇÕES E ANÁLISE DE DESEMPENHO DE APLICAÇÕES JAVASCRIPT Certifique-se de que todos os eventos registrados sejam removidos quando não forem mais necessários. Isso pode ser feito usando o método removeEventListener(). Evite criar loops infinitos em eventos que podem ser acionados várias vezes. Certifique-se de que todos os objetos criados durante o ciclo de vida do evento sejam devidamente destruídos quando não forem mais necessários. Evite criar objetos globais que possam ser referenciados por eventos em diferentes partes do código. Use ferramentas de depuração, como o Chrome DevTools, para identificar e corrigir problemas de memory leaking

Slide 26

Slide 26 text

Uso do Developer tools @jessilyneh OTIMIZAÇÕES E ANÁLISE DE DESEMPENHO DE APLICAÇÕES JAVASCRIPT https://loadninja.com/articles/debug-javascript-performance/ Abra o DevTools e clique na guia Performance. Clique no botão Gravar para começar a registrar o desempenho do tempo de execução. Aguarde enquanto o DevTools cria o perfil da página. Clique em stop para interromper a gravação, processar os dados e exibir os resultados.

Slide 27

Slide 27 text

Uso do Developer tools @jessilyneh OTIMIZAÇÕES E ANÁLISE DE DESEMPENHO DE APLICAÇÕES JAVASCRIPT https://loadninja.com/articles/debug-javascript-performance/ Gráfico FPS: O gráfico de quadros por segundo (FPS) mostra o desempenho das animações e geralmente deve ser de 60 FPS. Quando a taxa de quadros cair abaixo dos níveis aceitáveis, você verá uma barra vermelha em vez de uma barra verde. Gráfico de CPU: O gráfico de CPU mostra o uso de CPU do navegador. Se você estiver maximizando a CPU de um navegador, encontre maneiras de reduzir a quantidade de trabalho necessária, pois você pode deixar o dispositivo do usuário lento. Métricas principais a serem observadas:

Slide 28

Slide 28 text

@jessilyneh OTIMIZAÇÕES E ANÁLISE DE DESEMPENHO DE APLICAÇÕES JAVASCRIPT Performance Insights Identificam problemas como solicitações de bloqueio de renderização, mudanças de layout e tarefas longas que podem afetar negativamente o desempenho de carregamento da página do seu site e, especificamente, as pontuações do Core Web Vital do site.

Slide 29

Slide 29 text

@jessilyneh OTIMIZAÇÕES E ANÁLISE DE DESEMPENHO DE APLICAÇÕES JAVASCRIPT Performance Insights Temos uma linha do tempo de rastreamento e podemos inspecionar os dados, mas também temos uma lista do que o DevTools considera os principais "Insights" que valem a pena pesquisar. Também oferece sugestões acionáveis ​ ​ para melhorar as pontuações de CWV e fornece links para outros recursos e documentação

Slide 30

Slide 30 text

Técnicas para melhorar desempenho @jessilyneh OTIMIZAÇÕES E ANÁLISE DE DESEMPENHO DE APLICAÇÕES JAVASCRIPT https://www.wmtips.com/html/lazy-loading-definitive-guide/ Lazy loading é uma técnica que consiste em carregar conteúdo apenas quando for solicitado pelo usuário,para melhorar o desempenho de uma página da web. Lazy Loading Imagens ou outros recursos pesados que não são necessários para a visualização inicial da página. Conteúdo abaixo do fold pesado e pode afetar o tempo de carregamento da página. Página contém muitas imagens e o tempo de carregamento é um problema. Quando usar Quando NÃO usar Quando o conteúdo acima do fold é importante e deve ser carregado o mais rápido possível. Quando o conteúdo é pequeno e não afeta significativamente o tempo de carregamento da página. Quando o conteúdo é necessário para a interação do usuário com a página

Slide 31

Slide 31 text

Técnicas para melhorar desempenho @jessilyneh OTIMIZAÇÕES E ANÁLISE DE DESEMPENHO DE APLICAÇÕES JAVASCRIPT https://www.freecodecamp.org/news/javascript-debounce-example/ Técnica utilizada para garantir que uma função seja executada apenas uma vez após um determinado período de tempo, mesmo que seja acionada várias vezes em um curto espaço de tempo Deboucing Trabalhando com eventos que podem ser acionados várias vezes em um curto espaço de tempo Para evitar que funções pesadas sejam executadas várias vezes em um curto espaço de tempo. Quando se deseja evitar a execução acidental de funções devido a cliques ou toques acidentais. Quando usar Quando NÃO usar Quando se trabalha com eventos que precisam ser executados imediatamente, como a digitação em um campo de entrada. Quando o atraso na execução da função pode afetar negativamente o desempenho do programa.

Slide 32

Slide 32 text

Técnicas para melhorar desempenho @jessilyneh OTIMIZAÇÕES E ANÁLISE DE DESEMPENHO DE APLICAÇÕES JAVASCRIPT https://woliveiras.com.br/posts/o-que-e-para-que-serve-throttle%20/ Técnica utilizada para limitar a frequência com que uma função pode ser chamada em um determinado período de tempo. Parecido com Deboucing. Throttling Trabalho com eventos que podem ser acionados várias vezes em um curto espaço de tempo Evitar que funções pesadas sejam executadas várias vezes em pouco tempo. Quando se deseja evitar sobrecarregar um servidor ou API com muitas solicitações em um curto espaço de tempo. Quando usar Quando NÃO usar Quando se trabalha com eventos que precisam ser executados imediatamente, como a digitação em um campo de entrada. Quando a limitação na frequência de execução da função pode afetar negativamente o desempenho do programa.

Slide 33

Slide 33 text

Técnicas para melhorar desempenho @jessilyneh OTIMIZAÇÕES E ANÁLISE DE DESEMPENHO DE APLICAÇÕES JAVASCRIPT Debouncing garante que uma função seja executada apenas uma vez após um determinado período de tempo, mesmo que seja acionada várias vezes em um curto espaço de tempo. Deboucing Throttling Throttling limita a frequência com que uma função pode ser chamada em um determinado período de tempo.

Slide 34

Slide 34 text

Técnicas para melhorar desempenho @jessilyneh OTIMIZAÇÕES E ANÁLISE DE DESEMPENHO DE APLICAÇÕES JAVASCRIPT https://woliveiras.com.br/posts/o-que-e-para-que-serve-throttle%20/ Web Workers são uma API do JavaScript que permite executar scripts em threads separadas da thread principal do navegador, melhorando a performance de aplicações web. Uso de Web Workers Executar cálculos pesados em segundo plano, sem bloquear a thread principal do navegador. Realizar operações de I/O, como leitura e escrita em arquivos, sem afetar a interface do usuário. Realizar operações de rede, como requisições HTTP, sem bloquear a thread principal do navegador. Executar scripts longos em segundo plano, sem afetar a interface do usuário Quando usar Quando NÃO usar O código não é pesado o suficiente para justificar o uso de Web Workers. Suporte para Web Workers não está disponível em todos os navegadores que a aplicação web precisa suportar. Quando o uso de Web Workers pode introduzir problemas de sincronização de dados entre a thread principal e as threads secundárias.

Slide 35

Slide 35 text

Dicas adicionais @jessilyneh OTIMIZAÇÕES E ANÁLISE DE DESEMPENHO DE APLICAÇÕES JAVASCRIPT Learn Core Web Vitals Google