Chapter 1. Understanding web performance
1.1. Understanding web performance
1.1.1. Web performance and the user experience
1.2.1. Installing Node.js and Git
1.3. Auditing the client’s website
1.4. Optimizing the client’s website
Chapter 2. Using assessment tools
2.1. Evaluating with Google PageSpeed Insights
2.2. Using browser-based assessment tools
2.3. Inspecting network requests
2.4. Rendering performance-auditing tools
2.4.1. Understanding how browsers render web pages
2.4.2. Using Google Chrome’s Timeline tool
2.4.3. Identifying problem events: thy enemy is jank
2.5. Benchmarking JavaScript in Chrome
2.6. Simulating and monitoring devices
2.6.1. Simulating devices in the desktop web browser
3.1. Don’t talk much and stay DRY
3.1.2. Use shallow CSS selectors
3.1.3. Culling shallow selectors
3.1.4. LESS is more and taming SASS
3.2. Mobile-first is user-first
3.2.1. Mobile-first vs. desktop-first
3.3. Performance-tuning your CSS
3.3.1. Avoiding the @import declaration
3.3.2. @import serializes requests
3.3.3. <link> parallelizes requests
3.3.4. Placing CSS in the <head>
3.3.5. Preventing the Flash of Unstyled Content
3.3.6. Increasing rendering speed
3.3.8. Constructing and running the benchmark
3.3.9. Examining the benchmark results
3.3.10. Using flexbox where possible
3.4. Working with CSS transitions
Chapter 4. Understanding critical CSS
4.1. What does critical CSS solve?
4.2. How does critical CSS work?
4.3. Implementing critical CSS
4.3.1. Getting the recipe website up and running
4.5. Making maintainability easier
Chapter 5. Making images responsive
5.1. Why think about image delivery?
5.2. Understanding image types and their applications
5.2.1. Working with raster images
5.3.1. Targeting displays in CSS by using media queries
5.4.1. The universal max-width rule for images
5.4.3. Using the <picture> element
Chapter 6. Going further with images
6.1.2. Generating the image sprite
6.1.3. Using the generated sprite
6.3. Encoding images with WebP
6.3.1. Encoding lossy WebP images with imagemin
7.2. Compressing EOT and TTF font formats
7.3.1. Manually subsetting fonts
7.3.2. Delivering font subsets by using the unicode-range property
7.4. Optimizing the loading of fonts
7.4.1. Understanding font-loading problems
7.4.2. Using the CSS font-display property
Chapter 8. Keeping JavaScript lean and fast
8.1. Affecting script-loading behavior
8.1.1. Placing the <script> element properly
8.2. Using leaner jQuery-compatible alternatives
8.2.1. Comparing the alternatives
8.2.2. Exploring the contenders
8.3. Getting by without jQuery
8.3.1. Checking for the DOM to be ready
8.3.2. Selecting elements and binding events
8.3.3. Using classList to manipulate classes on elements
8.3.4. Reading and modifying element attributes and content
8.4. Animating with requestAnimationFrame
8.4.1. requestAnimationFrame at a glance
8.4.2. Timer function-driven animations and requestAnimationFrame
Chapter 9. Boosting performance with service workers
9.1. What are service workers?
9.2. Writing your first service worker
9.2.1. Installing the service worker
9.2.2. Registering the service worker
9.2.3. Intercepting and caching network requests
9.3. Updating your service worker
Chapter 10. Fine-tuning asset delivery
10.3.1. Using CDN-hosted assets
10.4.1. Using the preconnect resource hint
Chapter 11. Looking to the future with HTTP/2
11.1. Understanding why we need HTTP/2
11.1.1. Understanding the problem with HTTP/1
11.1.2. Solving common HTTP/1 problems via HTTP/2
11.2. Exploring how optimization techniques change for HTTP/2
11.3. Sending assets preemptively with Server Push
11.4. Optimizing for both HTTP/1 and HTTP/2
11.4.1. How HTTP/2 servers deal with HTTP/2-incapable browsers
Chapter 12. Automating optimization with gulp
12.2. Laying down the foundations
12.3.1. The anatomy of a gulp task
A.2.1. Web servers and related middleware
Appendix B. Native equivalents of common jQuery functionality
B.3.2. Triggering events programmatically
B.4. Iterating over a set of elements
B.5. Manipulating classes on elements
B.6. Accessing and modifying styles
B.7. Getting and setting attributes
B.8. Getting and setting element contents