Iniciar teste gratuito
Searching...
SoBrief
Português
EnglishEnglish
EspañolSpanish
简体中文Chinese
繁體中文Chinese (Traditional)
FrançaisFrench
DeutschGerman
日本語Japanese
PortuguêsPortuguese
ItalianoItalian
한국어Korean
РусскийRussian
NederlandsDutch
العربيةArabic
PolskiPolish
हिन्दीHindi
Tiếng ViệtVietnamese
SvenskaSwedish
ΕλληνικάGreek
TürkçeTurkish
ไทยThai
ČeštinaCzech
RomânăRomanian
MagyarHungarian
УкраїнськаUkrainian
Bahasa IndonesiaIndonesian
DanskDanish
SuomiFinnish
БългарскиBulgarian
עבריתHebrew
NorskNorwegian
HrvatskiCroatian
CatalàCatalan
SlovenčinaSlovak
LietuviųLithuanian
SlovenščinaSlovenian
СрпскиSerbian
EestiEstonian
LatviešuLatvian
فارسیPersian
മലയാളംMalayalam
தமிழ்Tamil
اردوUrdu
High Performance JavaScript

High Performance JavaScript

Build Faster Web Application Interfaces
por Nicholas C. Zakas 2010 232 páginas
4.10
500+ avaliações
Ouvir
Experimente o Acesso Completo por 3 Dias
Desbloqueie o áudio e muito mais!
Continuar

Principais Lições

1. Carregue JavaScript de forma eficiente para reduzir requisições HTTP e melhorar a velocidade da página

Diminua o número de requisições HTTP necessárias para renderizar a página.

Combine e posicione os scripts. Una vários arquivos JavaScript em um único arquivo para minimizar as requisições HTTP. Coloque as tags de script no final do corpo do HTML para permitir que a página carregue visualmente antes da execução dos scripts. Utilize técnicas de carregamento assíncrono, como inserção dinâmica de scripts ou o atributo defer, sempre que possível.

Minifique e comprima. Use ferramentas como o YUI Compressor para eliminar caracteres e espaços desnecessários dos arquivos JavaScript. Ative a compressão gzip no servidor web para reduzir ainda mais o tamanho dos arquivos. Considere usar uma Rede de Distribuição de Conteúdo (CDN) para servir os recursos estáticos, incluindo arquivos JavaScript, a partir de servidores geograficamente distribuídos, garantindo entrega mais rápida.

Implemente estratégias de cache. Defina cabeçalhos de cache apropriados para os arquivos JavaScript, permitindo que os navegadores os armazenem localmente. Utilize versionamento ou timestamps nos nomes dos arquivos para forçar atualizações quando necessário. Para dispositivos móveis com capacidades limitadas de cache, avalie o uso do cache de aplicação HTML5 ou mecanismos de armazenamento no lado do cliente.

2. Otimize o acesso a dados e o gerenciamento de escopo para uma execução mais rápida

Variáveis locais são sempre as mais rápidas para acessar dentro de uma função, enquanto variáveis globais tendem a ser as mais lentas.

Minimize a travessia da cadeia de escopo. Armazene variáveis frequentemente acessadas que estão fora do escopo em variáveis locais. Evite usar a instrução with e a função eval(), pois podem estender a cadeia de escopo e desacelerar a execução. Use closures com moderação, pois mantêm referências ao escopo externo e podem impactar o uso de memória.

Otimize o acesso a objetos e arrays. Utilize a notação de ponto em vez da notação de colchetes ao acessar propriedades de objetos com identificadores conhecidos e válidos. Armazene o comprimento dos arrays em loops for para evitar buscas repetidas da propriedade. Considere usar objetos ou arrays simples em vez de estruturas de dados mais complexas quando o armazenamento simples de chave-valor for suficiente.

Aproveite a notação literal. Use literais de objeto e array em vez de seus construtores (por exemplo, {} em vez de new Object()). Isso não só melhora a legibilidade, como também pode ser mais rápido em muitos motores JavaScript.

3. Minimize a manipulação do DOM para melhorar o desempenho

O acesso e a manipulação do DOM são partes importantes das aplicações web modernas. Mas toda vez que você cruza a ponte do ECMAScript para o mundo do DOM, isso tem um custo.

Agrupe operações no DOM. Reduza a manipulação direta do DOM fazendo alterações em um fragmento de documento ou nó clonado antes de atualizar o DOM ativo. Isso diminui o número de reflows e repaints, que são computacionalmente caros.

Use seletores eficientes. Aproveite métodos nativos do DOM como getElementById() e querySelector() em vez de métodos mais genéricos. Ao usar bibliotecas, certifique-se de que elas utilizem esses métodos nativos mais rápidos quando disponíveis. Armazene em cache referências do DOM para elementos acessados com frequência.

Otimize o tratamento de eventos. Implemente delegação de eventos anexando ouvintes a elementos pai em vez de elementos filhos individuais. Isso reduz o número de ouvintes e melhora o desempenho, especialmente para elementos adicionados dinamicamente.

4. Implemente algoritmos eficientes e técnicas de controle de fluxo

Na verdade, existem apenas dois fatores: trabalho feito por iteração e número de iterações.

Otimize loops. Minimize o trabalho realizado em cada iteração movendo código invariante para fora do loop. Use loops while reversos quando possível, pois costumam ser mais rápidos que loops for. Considere usar métodos de array como forEach(), map() e reduce() para iterações mais limpas e potencialmente mais rápidas.

Escolha condicionais apropriadas. Use instruções switch em vez de longas cadeias if-else ao lidar com múltiplos valores discretos. Para condições complexas, avalie o uso de tabelas de consulta ou bitmasks para avaliação mais rápida.

Implemente memoização. Armazene em cache os resultados de chamadas de função custosas para evitar cálculos redundantes. Isso é especialmente útil para funções recursivas ou operações chamadas frequentemente com os mesmos parâmetros.

5. Escolha o formato de dados correto para desempenho ideal em Ajax

JSON possui várias vantagens em comparação ao XML. É um formato muito menor, com menos da resposta total sendo usada como estrutura e mais como dados.

Prefira JSON em vez de XML. JSON é mais compacto e mais rápido para analisar do que XML. Sempre que possível, use JSON-P (JSON com padding) para análise ainda mais rápida, especialmente ao lidar com grandes conjuntos de dados. Para conjuntos de dados extremamente grandes, considere usar formatos delimitados personalizados para minimizar overhead.

Otimize a transmissão de dados. Use requisições GET para operações idempotentes e POST para cargas maiores. Implemente estratégias de cache adequadas para respostas Ajax para reduzir requisições de rede desnecessárias. Considere técnicas como multipart XHR para agrupar múltiplos recursos em uma única requisição.

Trate os dados de forma eficiente. Analise respostas JSON usando métodos nativos como JSON.parse() quando disponíveis. Implemente renderização progressiva para grandes conjuntos de dados, melhorando a percepção de desempenho. Use web workers para tarefas demoradas de análise ou processamento, mantendo a interface responsiva.

6. Crie interfaces responsivas gerenciando a thread da interface do navegador

Nenhuma tarefa JavaScript deve levar mais de 100 milissegundos para ser executada.

Divida tarefas longas. Use setTimeout() ou setInterval() para dividir operações extensas em partes menores, permitindo que a interface permaneça responsiva. Considere usar Web Workers para tarefas intensivas de CPU que não requerem acesso ao DOM.

Otimize os manipuladores de eventos. Aplique debounce ou throttle em manipuladores de eventos frequentes, como scroll ou redimensionamento, para reduzir o número de chamadas de função. Garanta que os manipuladores terminem rapidamente, especialmente em interações do usuário.

Gerencie animações eficientemente. Use requestAnimationFrame() para animações mais suaves, sincronizadas com o ciclo de renderização do navegador. Minimize o número de elementos animados e utilize transições ou animações CSS sempre que possível para melhor desempenho.

7. Aproveite processos de build e deploy para impulsionar o desempenho do JavaScript

Tudo que pode ser feito em tempo de build não deve ser feito em tempo de execução.

Automatize otimizações. Implemente um processo de build usando ferramentas como Grunt, Gulp ou Webpack para automatizar tarefas como concatenação, minificação e compressão de arquivos JavaScript. Use source maps para manter a capacidade de depuração do código minificado.

Implemente divisão de código. Divida sua aplicação em pedaços menores que podem ser carregados sob demanda, reduzindo a carga inicial e melhorando o tempo de inicialização. Use técnicas como lazy loading para recursos não críticos.

Otimize para produção. Remova códigos exclusivos de desenvolvimento, como logs e declarações de depuração, nas builds de produção. Implemente detecção de recursos em vez de detecção de navegador para criar códigos mais manuteníveis e performáticos em diferentes ambientes.

8. Utilize ferramentas de profiling para identificar e resolver gargalos de desempenho

Ter o software adequado é essencial para identificar gargalos tanto no carregamento quanto na execução dos scripts.

Aproveite as ferramentas de desenvolvimento dos navegadores. Use os perfis embutidos em navegadores como Chrome DevTools, Firefox Developer Tools e Safari Web Inspector para analisar o tempo de execução do JavaScript e identificar funções lentas. Utilize os painéis de rede para otimizar o carregamento de recursos e identificar gargalos na entrega de ativos.

Implemente medições personalizadas. Use a Performance API (window.performance) ou funções de temporização customizadas para medir operações específicas no seu código. Isso permite um acompanhamento e otimização de desempenho mais detalhados.

Monitore o desempenho no mundo real. Implemente Real User Monitoring (RUM) para coletar dados de desempenho de usuários reais. Isso oferece insights sobre como sua aplicação se comporta em diferentes dispositivos e condições de rede, ajudando a priorizar esforços de otimização.

Última atualização:

Report Issue

Resumo das Resenhas

4.10 de 5
Média de 500+ avaliações do Goodreads e Amazon.

High Performance JavaScript recebe críticas mistas, com uma avaliação média de 4,11 em 5. Muitos leitores elogiam as análises detalhadas e as dicas práticas para otimizar o código JavaScript. No entanto, alguns apontam que o conteúdo está desatualizado, já que o livro foi publicado em 2010. Entre os aspetos positivos destacam-se as explicações minuciosas sobre técnicas de desempenho, interações com o DOM e expressões regulares. Por outro lado, os críticos referem que muitas dessas práticas já são padrão e que os testes de desempenho nos navegadores estão ultrapassados. Apesar da sua idade, alguns leitores ainda encontram valor nos fundamentos e na perspetiva histórica sobre a otimização do desempenho em JavaScript.

Your rating:
4.53
133 avaliações
Want to read the full book?

Perguntas Frequentes

What's High Performance JavaScript about?

  • Focus on Performance: High Performance JavaScript by Nicholas C. Zakas is centered on optimizing JavaScript to enhance web application performance, addressing execution time, DOM interaction, and network latency.
  • Historical Context: The book provides a historical perspective on JavaScript, tracing its evolution from 1996 to the present, highlighting the increasing complexity of web applications.
  • Practical Techniques: It offers practical techniques and best practices for writing efficient JavaScript code, making it a valuable resource for developers aiming to improve their skills.

Why should I read High Performance JavaScript?

  • Enhance User Experience: By applying the techniques in this book, you can significantly improve the speed and responsiveness of web applications, leading to a better user experience.
  • Stay Current: The book covers the evolution of JavaScript engines and optimization practices, ensuring you are up-to-date with the latest trends in web development.
  • Expert Insights: Authored by Nicholas C. Zakas, a recognized expert, the book provides valuable insights that can help you become a more proficient JavaScript developer.

What are the key takeaways of High Performance JavaScript?

  • Optimization Techniques: The book outlines various optimization techniques, such as minimizing DOM access and using efficient algorithms, to improve JavaScript performance.
  • JavaScript Loading Strategies: It emphasizes efficient JavaScript loading, recommending practices like placing scripts at the bottom of the page to avoid blocking rendering.
  • Understanding JavaScript Engines: Readers gain insights into modern JavaScript engines, including just-in-time compilation and garbage collection, crucial for writing high-performance code.

What are the best quotes from High Performance JavaScript and what do they mean?

  • Performance and Usability: "JavaScript performance in the browser is arguably the most important usability issue facing developers." This highlights the critical role of performance in user satisfaction and web application success.
  • Minimize DOM Interaction: "Touch the DOM lightly, and stay within ECMAScript as much as possible." This advice emphasizes minimizing direct DOM interactions, which can be slow, and focusing on faster JavaScript operations.
  • Comprehensive Techniques: "The techniques and approaches taught in this book address many different aspects of JavaScript." This indicates the book's comprehensive nature, covering essential topics for optimizing JavaScript performance.

How does High Performance JavaScript address DOM scripting performance?

  • DOM Access Costs: The book explains that accessing and modifying DOM elements is expensive and can lead to performance bottlenecks, especially in loops.
  • Batch DOM Changes: It advises batching DOM changes to minimize reflows and repaints, which can slow down the user interface.
  • Efficient Methods: The author recommends using methods like document.createDocumentFragment() to make off-document changes before appending to the DOM, reducing reflows.

What are the best practices for loading JavaScript according to High Performance JavaScript?

  • Scripts at the Bottom: The book recommends placing all <script> tags just before the closing </body> tag to ensure the page renders before JavaScript execution begins.
  • Asynchronous Loading: It suggests using the async or defer attributes for script tags to prevent blocking the rendering of the page while scripts are being downloaded.
  • Minimize Script Tags: Grouping multiple scripts into a single file reduces the number of HTTP requests, significantly improving loading times.

What techniques does High Performance JavaScript recommend for optimizing algorithms?

  • Minimize Work Per Iteration: The book advises reducing operations within loops to improve performance, such as caching array lengths in local variables.
  • Efficient Data Structures: It suggests using lookup tables instead of conditionals for mapping values, which can significantly speed up execution.
  • Avoid Recursion: The author recommends using iterative solutions instead of recursive ones to prevent stack overflow errors and improve performance.

How does High Performance JavaScript explain the importance of understanding JavaScript engines?

  • Engine Evolution: The book discusses the evolution of JavaScript engines and their performance improvements through techniques like just-in-time compilation.
  • Garbage Collection: It explains how garbage collection works in different engines and its impact on performance, emphasizing the need for memory-efficient code.
  • Performance Implications: Understanding engine execution helps developers write optimized JavaScript, leading to faster web applications.

How does High Performance JavaScript address the browser UI thread?

  • Single Process Management: The book explains that most browsers have a single process shared between JavaScript execution and UI updates, which can lead to unresponsive interfaces if not managed properly.
  • Task Queuing System: Zakas describes how the UI thread uses a queuing system to manage tasks, helping developers optimize code to ensure UI updates are not blocked.
  • Responsiveness Importance: Ensuring responsiveness in web applications is critical, and developers are encouraged to minimize JavaScript execution time to keep the UI responsive.

What techniques does High Performance JavaScript recommend for optimizing Ajax?

  • Efficient Data Formats: The book recommends using JSON instead of XML for Ajax requests due to its lightweight nature and faster parsing.
  • Minimize HTTP Requests: Zakas advises combining multiple Ajax requests into a single request whenever possible to decrease load times.
  • Leverage Caching: Properly configured caching can reduce server load and improve response times for repeat users.

How can I improve my JavaScript code based on High Performance JavaScript?

  • Avoid Double Evaluation: The book advises against using eval() and the Function() constructor due to performance penalties, recommending direct function calls instead.
  • Object and Array Literals: Zakas emphasizes the performance benefits of using object and array literals for creating data structures, resulting in cleaner code.
  • Implement Lazy Loading: Using lazy loading techniques defers work until necessary, optimizing performance by executing only essential code during critical interactions.

What are the performance implications of using web workers as discussed in High Performance JavaScript?

  • Offload Processing: Web workers allow JavaScript code to run in the background, separate from the main UI thread, improving performance by offloading heavy computations.
  • Limited DOM Access: Web workers cannot directly access the DOM, preventing UI-related issues and ensuring long-running tasks do not interfere with user interactions.
  • Efficient Communication: Web workers communicate with the main thread using the postMessage() method, allowing efficient data transfer while keeping the UI responsive.

Sobre o Autor

Nicholas C. Zakas é uma referência incontornável no desenvolvimento front-end, reconhecido pela sua profunda experiência em JavaScript e tecnologias web. Durante quase cinco anos, trabalhou no Yahoo!, onde contribuiu para a biblioteca YUI e liderou a equipa responsável pelo desenvolvimento front-end da página inicial do Yahoo!. Zakas é autor de vários livros influentes sobre JavaScript, entre os quais se destacam "Maintainable JavaScript", "Professional JavaScript for Web Developers" e "High Performance JavaScript". O seu trabalho centra-se nas melhores práticas do desenvolvimento web, com especial ênfase no aprimoramento progressivo, acessibilidade, desempenho, escalabilidade e manutenção. Como consultor, autor e orador, Zakas continua a moldar o universo do desenvolvimento front-end através das suas valiosas contribuições para o conhecimento e os padrões da indústria.

Follow
Ouvir
Now playing
High Performance JavaScript
0:00
-0:00
Now playing
High Performance JavaScript
0:00
-0:00
1x
Queue
Home
Swipe
Library
Get App
Try Full Access for 3 Days
Listen, bookmark, and more
Compare Features Free Pro
📖 Read Summaries
Read unlimited summaries. Free users get 3 per month
🎧 Listen to Summaries
Listen to unlimited summaries in 40 languages
❤️ Unlimited Bookmarks
Free users are limited to 4
📜 Unlimited History
Free users are limited to 4
📥 Unlimited Downloads
Free users are limited to 1
Risk-Free Timeline
Hoje: Acesso Imediato
Ouça resumos completos de mais de 26.000 livros. São mais de 12.000 horas de áudio!
Dia 2: Lembrete do Teste
Enviaremos uma notificação avisando que seu teste está acabando.
Dia 3: Sua assinatura começa
A cobrança será feita em Jun 16,
cancele a qualquer momento antes.
Consume 2.8× More Books
2.8× more books Listening Reading
Our users love us
600,000+ readers
Trustpilot Rating
TrustPilot
4.6 Excellent
This site is a total game-changer. I've been flying through book summaries like never before. Highly, highly recommend.
— Dave G
Worth my money and time, and really well made. I've never seen this quality of summaries on other websites. Very helpful!
— Em
Highly recommended!! Fantastic service. Perfect for those that want a little more than a teaser but not all the intricate details of a full audio book.
— Greg M
Save 62%
Yearly
$119.88 $44.99/year/yr
$3.75/mo
Monthly
$9.99/mo
Start a 3-Day Free Trial
3 days free, then $44.99/year. Cancel anytime.
Unlock a world of fiction & nonfiction books
26,000+ books for the price of 2 books
Read any book in 10 minutes
Discover new books like Tinder
Request any book if it's not summarized
Read more books than anyone you know
#1 app for book lovers
Lifelike & immersive summaries
30-day money-back guarantee
Download summaries in EPUBs or PDFs
Cancel anytime in a few clicks
Scanner
Find a barcode to scan

We have a special gift for you
Open
38% OFF
DISCOUNT FOR YOU
$79.99
$49.99/year
only $4.16 per month
Continue
2 taps to start, super easy to cancel
Settings
General
Widget
Loading...
We have a special gift for you
Open
38% OFF
DISCOUNT FOR YOU
$79.99
$49.99/year
only $4.16 per month
Continue
2 taps to start, super easy to cancel