Upgrade to Pro — share decks privately, control downloads, hide ads and more …

The Cost Of JavaScript in 2023

The Cost Of JavaScript in 2023

As the world builds sites that are more heavily reliant on JavaScript, we sometimes pay for what we send down in ways that we can’t always easily see. Addy Osmani will explain how and why JavaScript is the most expensive resource your site uses today—especially on mobile and lower-end desktops.

Addy will also share tips for fixing JavaScript performance issues so everything loads quicker. A little discipline can help if you want your site to load and be interactive as soon as possible on mobile.

Video: https://www.youtube.com/watch?v=ZKH3DLT4BKw

Objective
Teach developers why JavaScript is the costliest part of their sites and what they can do to optimize this well.

Five Things Audience Members Will Learn:

What the dominant costs of heavy JavaScript are
How median hardware plus heavy JavaScript can impact user-experience
Tips and tricks for reducing the cost of JavaScript, reducing long-tasks and improving the Core Web Vitals metrics
Things frameworks and browsers are doing to try reducing the cost of JavaScript by default.
How new performance metrics can help you reason about where to optimize JavaScript to improve user interactions

First presented at FITC/Web Unleashed

Addy Osmani

June 28, 2023
Tweet

More Decks by Addy Osmani

Other Decks in Programming

Transcript

  1. View Slide

  2. @reactive_dude
    JAVASCRIPT
    IS GOOD...IN
    MODERATION

    View Slide

  3. View Slide

  4. View Slide

  5. View Slide

  6. Patterns for web applications
    Portfolio Content Storefront Social Network Immersive
    Holotype Personal Blog CNN Amazon Facebook Figma
    Interactivity Minimal Linked Articles Purchase Multi-Point, Real-time Everything
    Session Depth Shallow Shallow Shallow - Medium Extended Deep
    Values Simplicity Discover-ability Load Performance Dynamicism Immersiveness
    Routing Server Server, Hybrid Hybrid, Transitional Transitional, Client Client
    Rendering Static Static, SSR Static, SSR SSR CSR
    Hydration None Progressive, Partial Partial, Resumable Any None (CSR)
    Example
    Framework
    11ty Astro, Elder Marko, Qwik, Hydrogen Next, Remix Create React
    App
    https://dev.to/this-is-learning/patterns-for-building-javascript-websites-in-2022-5a93

    View Slide

  7. View Slide

  8. View Slide

  9. View Slide

  10. PROGRESSIVE
    HYDRATION

    View Slide

  11. FACTOR IN
    VISIBILITY

    View Slide

  12. View Slide

  13. View Slide

  14. View Slide

  15. View Slide

  16. View Slide

  17. View Slide

  18. View Slide

  19. View Slide

  20. View Slide

  21. View Slide

  22. @addyosmani

    View Slide

  23. View Slide

  24. View Slide

  25. View Slide

  26. View Slide

  27. View Slide

  28. View Slide

  29. View Slide

  30. View Slide

  31. View Slide

  32. View Slide

  33. INP

    View Slide

  34. View Slide

  35. View Slide

  36. View Slide

  37. https://web.dev/optimize-long-tasks/
    A)
    B)

    View Slide

  38. https://philipwalton.com/articles/why-web-developers-need-to-care-about-interactivity/
    *

    View Slide

  39. View Slide

  40. View Slide

  41. View Slide

  42. View Slide

  43. * Background compilation: 1-2% improvement to main thread V8 time time reduction. Background parsing and other improvements to
    parse reduced overall V8 load time by up to 10-20%

    View Slide

  44. ~20-40% reduction in parse and
    compilation time during load.

    View Slide

  45. View Slide

  46. View Slide

  47. View Slide

  48. View Slide

  49. View Slide

  50. View Slide

  51. View Slide

  52. View Slide

  53. View Slide

  54. View Slide

  55. View Slide

  56. View Slide

  57. View Slide

  58. View Slide

  59. View Slide

  60. View Slide

  61. View Slide

  62. @ChrisArter
    npm install
    WHAT’S
    IN YOUR
    JAVASCRIPT
    BUNDLE?

    View Slide

  63. View Slide

  64. View Slide

  65. View Slide

  66. Static import

    View Slide

  67. Static import

    View Slide

  68. Code-splitting bundles

    View Slide

  69. View Slide

  70. Dynamic Import

    View Slide

  71. Dynamic Import

    View Slide

  72. Code-splitting bundles

    View Slide

  73. Route and component splitting

    View Slide

  74. View Slide

  75. “Invisible” Visible

    View Slide

  76. Import On Visibility

    View Slide

  77. Import On Visibility

    View Slide

  78. View Slide

  79. How and where do I want to render content?
    Check out Lydia Hallie’s great “Rendering Patterns” talk

    View Slide

  80. View Slide

  81. Rehydration

    View Slide

  82. Partial Hydration

    View Slide

  83. Islands Architecture

    View Slide

  84. View Slide

  85. Rehydration

    View Slide

  86. Progressive Hydration

    View Slide

  87. RESUMABLE HYDRATION
    Check out “Hydration is pure overhead” by Misko Hevery

    View Slide

  88. View Slide

  89. https://twitter.com/shuding_

    View Slide

  90. View Slide

  91. Streaming Server Rendering

    View Slide

  92. Doodles courtesy Dan Abramov

    View Slide

  93. Selective Hydration: before

    View Slide

  94. Selective Hydration: after

    View Slide

  95. View Slide

  96. View Slide

  97. View Slide

  98. View Slide

  99. View Slide

  100. View Slide

  101. View Slide