• Nenhum resultado encontrado

Javascript por debaixo dos panos

N/A
N/A
Protected

Academic year: 2021

Share "Javascript por debaixo dos panos"

Copied!
31
0
0

Texto

(1)

Laís Lima

Designer/Front End Developer @ Cosmobots

Javascript por

debaixo dos panos

(2)

Por que entender?

É fundamental que você saiba os poderes da linguagem com que trabalha

Facilitar debug, quanto antes encontrar o problema mais rápida será a reação

É essencial para o seu currículo! =P

Performance, quanto mais você conhece, mais você sabe os poderes da linguagem

(3)
(4)

Javascript engine

(5)

O que acontece quando a engine lê seu código

no Browser?

Quando o seu código é executado no browser, são criados:

Global Execution Context Global Memory

Call Stack

Primeiro devemos saber que:

(6)

Global

Execution

Context

Global

Memory

Javascript Engine

Call Stack

(7)

Como a engine lê seu código

// Legal, temos uma constante, vamos armazenar na Global Memory

const num = 2;

// olha só uma função, vamos armazenar ela na Global memory também

function pow(num) { return num * num; }

(8)

Global

Execution

Context

Global

Memory

Javascript Engine

Call Stack

pow:function

(9)
(10)
(11)

Global

Execution

Context

Global

Memory

Javascript Engine

Call Stack

pow:function num: 2 pow() pow: Executando...

(12)

Mais dois contextos são criados

Estes são:

Local Execution Context Local Memory

(13)

Global

Execution

Context

Global

Memory

Javascript Engine

Call Stack

pow: pow() pow: Local execution context Local memory Local execution context Local memory

(14)

Javascript Engines

As engines são responsáveis por fazer com que a máquina entenda o nosso código Javascript

Algumas delas são

V8 - Chrome e Node JS Spider Monkey - Mozilla Chakra - Microsoft Edge

(15)

Como a engine parece

(16)

Runtime no browser

Memory Heap Call Stack

AJAX - XMLHttpRequest DOM - document Timeout - setTimeout

Web API

onClick onLoad onDone

Callback queue Event loop

(17)

Tá,vamos ver como funciona?

console.log('Olá'); setTimeout(() => { console.log('Tudo bem?'); }, 5000); console.log('Tchau');

(18)

Call Stack Web APIs Callback queue Event loop Browser console Olá Tchau () => {} () => {} console.log("Tudo bem?") Tudo bem? Timer () => {} console.log("Olá") setTimeout () => {} console.log("Tchau")

(19)
(20)

Entenda sobre o V8, uma engine javascript

É open source e mantido pelo google

https://medium.com/dailyjs/understanding-v8s-bytecode-317d46c94775

É escrito em C++ (estaticamente tipado

enquanto javascript é dinamicamente

tipado)

Primeira engine projetada para

aumentar a performance da execução do javascript no navegador

(21)

Algumas threads do V8

Existe uma thread principal que busca seu código, compila e então executa Uma thread para otimizar o código que está sendo executado na principal threads para lidar com varreduras e garbage collector

(22)

Classe oculta

São layouts de objetos que são criados em tempo de execução se são apontados pelo ponteiro do objeto na memória

Ponteiro

classe oculta inicial C0

(23)

Classe oculta

function Point(x) { this.x = x;

}

(24)

Classe oculta

Ponteiro classe oculta inicial C1 para a propriedade x classe oculta inicial C0

(25)

Inlining

substituir invocação da função pelo corpo da mesma

Inline Caching

Muitas chamadas para o mesmo método tendem a ocorrer para o mesmo tipo de objeto.

(26)

Código de máquina

V8 compila direto para código de máquina (bytecode),

consegue otimizar o mesmo e trocar em tempo de execução isto é uma tarefa muito complexa.

Garbage Collector

ao invés de percorrer todo o heap, tentando marcar cada possível objeto, ele apenas marca parte do heap, e então volta para a execução normal. A próxima parada do GC ai continuar de onde o passo anterior do Heap parou. isso permite muitas pausas curtas durante a execução normal.

(27)
(28)

Dicas de performance

Métodos: Por conta do inline caching chamar o mesmo método

várias vezes...

Propriedades de objetos: Sempre instancie propriedades de

objetos na mesma ordem

Propriedades dinâmicas: adicionando propriedades para um objeto depois da

instanciação vai forçar uma classe oculta a mudar e desacelerar qualquer método que estava otimizado pela classe oculta anterior. Ao invés disso, atribua todas as propriedades de um objeto no seu construtor.

(29)

Fontes:

https://medium.com/reactbrasil/como-o-javascript-funciona-o-event-loop-e-o-surgimento-da-programa%C3%A7%C3%A3 o-ass%C3%ADncrona-5-maneiras-de-18d0b8d6849a https://medium.com/reactbrasil/como-o-javascript-funciona-uma-vis%C3%A3o-geral-da-engine-runtime-e-da-call-st ack-471dd5e1aa30 https://medium.com/reactbrasil/como-o-javascript-funciona-dentro-da-engine-v8-5-dicas-sobre-como-escrever-c%C 3%B3digo-otimizado-e05af6088fd5 https://www.youtube.com/watch?v=p-iiEDtpy6I https://www.youtube.com/watch?v=8aGhZQkoFbQ&t=370s https://v8.dev/

(30)

Agradecimentos

Pessoas que contribuíram para este conteúdo:

Kamila Santos, https://www.linkedin.com/in/kamila-santos-oliveira

Daniel Martins, https://www.linkedin.com/in/daniel-martins-251b12127

Julio Silva, https://www.linkedin.com/in/silva-julio

(31)

Obrigada ˆˆ

Referências

Documentos relacionados

– É mais rápido terminar um thread que um processo – É mais rápido chavear entre threads de um

-021 Por quilograma, maior do que o limite de preços máximo do imposto específico aplicado para partes de suíno, mas não maior do que o preço de entrada de partes de suíno,

Esta análise de dados permite uma avaliação mais concisa da reabsorção óssea de osso alveolar mandibular, atunado como ponto de partida para a avaliação da densidade óssea, e com

17 CORTE IDH. Caso Castañeda Gutman vs.. restrição ao lançamento de uma candidatura a cargo político pode demandar o enfrentamento de temas de ordem histórica, social e política

Através do Projeto Social de Inclusão Digital (PSID) do IFTO Campus Palmas e a partir da capacitação de um professor multiplicador no Programa para Desenvolvimento

Essas operações, com e sem risco de crédito, são contabilizadas em conta do ativo “Outros créditos de operações com planos de assistência à saúde”

3 - Quando não possa reparar-se convenientemente o caixão deteriorado, encerrar-se-à o mesmo noutro caixão de zinco ou será removido para sepultura à escolha

O PROGRAMA DE PÓS-GRADUAÇÃO EM FISIOPATOLOGIA E CIÊNCIAS CIRÚRGICAS, DA UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO - UERJ torna público o presente Edital,