SlideShare a Scribd company logo
Introduction to
Performance APIs
Chrome Tech Talk Night #12
Shogo Sensui (@1000ch)
Shogo Sensui
(@1000ch)
Software Engineer
Merpay, Inc / Mercari, Inc
Table of contents
● Lazy Loading
● Prefetch
● Off The Main Thread
🐢 Lazy Loading
Intersection Observer
> The Intersection Observer API
provides a way to asynchronously
observe changes in the intersection
of a target element with an
ancestor element or with a
top-level document's viewport.
const observer = new
IntersectionObserver((entries) => {
for (const entry of entries) {
if (entry.isIntersecting) {
console.log(entry);
}
}
});
const el = document.querySelector('#el);
observer.observe(el);
WebKit shipped!!!
Intersection Observer v2
Intersection Observer v2 will detect
the actual visiblity (like “opacity”).
● New options
○ trackVisiblity constructor
option to track visiblity
○ isVisible property in
IntersectionObserverEntry
● IntersectionObserver v2 demo
const el = document.querySelector('#el);
const observer = new
IntersectionObserver((entries) => {
for (const entry of entries) {
if (entry.isVisible) {
console.log(entry);
}
}
});
observer.observe(el, {
trackVisiblity: true
});
Browser native lazy-loading
lazyload attribute to load if
display with-in viewport.
● will be enabled on...
○ <img>
○ <iframe>
● Lazyload images and iframes
by bengreenstein · Pull Request
#3752 · whatwg/html.
● Blink LazyLoad Design Docs
(public)
<img
src="https://example.com/image.jpg"
lazyload="on">
<iframe
src="https://google.com"
lazyload="on">
</iframe>
⚡ Prefetch
Priority Hints for resource loading
importance attribute to indicate
resource priority.
● will be enabled on...
○ <img>
○ <iframe>
○ <script>
○ <link>
○ fetch()
● Priority Hints Draft Community
Group Report 18 October 2018
<img
src="https://example.com/image.jpg"
importance="high">
<iframe
src="https://example.com"
importance="low">
</iframe>
<script>
fetch('https://google.com', {
importance: 'high'
});
</script>
Resource Hints
Resource Hints provides
speculative loading which consists
of...
● DNS Prefetch: host
● Preconnect: host
● Prefetch: resources
● Prerender: specified page
<link rel="dns-prefetch" href="//example.com/">
<link rel="preconnect" href="//example.com/">
<link
rel="prefetch" as="image"
href="https://example.com/high-priority.jpg">
<link
rel="prerender"
href="https://example.com/">
https://www.igvita.com/2015/08/17/eliminating-roundtrips-with-preconnect/
Preload
Preload provides aggressive loading
● For nested resources for initial
loading
○ e.g) Images referred in CSS
○ e.g) JavaScript loaded on JavaScript
● Similar to Resource Hints
<link
rel="preload"
href="https://example.com/high-priority.jpg">
<link
rel="preload"
href="https://example.com/high-priority.js">
Chrome Prerender History
chrome://net-internals/#prerender
GoogleChromeLabs/quicklink
> Faster subsequent page-loads by
prefetching in-viewport links during
idle time
Speculative prefetch links with-in
viewport using following APIs.
● Intersection Observer
● Prefetch (Resource Hints)
● requestIdleCallback()
● Network Information API.
quicklink({
ignores: [
//api/?/,
uri => uri.includes('.zip'),
(uri, el) => el.hasAttribute('noprefetch')
]
});
Nuxt v2.4 supports prefetching links in viewport
> Nuxt.js will automagically
prefetch the code-splitted pages
linked with <nuxt-link> when visible
in the viewport by default. This
hugely improves the end user
performances, inspired by
quicklink.
AMP is the best example for Prefetch/Prerender
AMP prefetch/prerender some resources to achieve instant loading
● Prefetch resources
○ from Google AMP Cache hosted on Google
● Prerender documents
○ AMP’s prerender differs from <link rel=preload>
■ Why AMP HTML does not take full advantage of the preload scanner
AMP’s URL is a long-standing problem..
Web Packaging will solve the AMP’s URL problem
Web Packaging consists of...
● Signed HTTP Exchanges: Signs request/response including URL with
private keys and creates .sxg file
● Bundled HTTP Exchanges: Bundles subresources in response
● Loading Signed Exchanges: Loads signed .sxg file and displays the
original URL instead of distributed URL
🚀 Off The Main Thread
More rich,
More heavy.
Web Page’s payload is increasing continuously
Main Thread is busy
● Loading (almost described by Critical Rendering Path)
○ Fetch HTML
○ Parse HTML and construct DOM
○ Fetch sub-resources including CSS
○ Parse CSS and construct CSSOM
○ Eval heavy JavaScript (especially in recent web app)
○ etc...
● Runtime
○ Interact to user operations
○ Fetch data and render async
○ etc...
Performance metrics are changing
1. Focused to Server Response (old SSR)
○ load event
○ DOMContentLoaded event
2. Focused to First View (CSR a.k.a SPA)
○ Speed Index
○ First Paint, First Contentful Paint, First Meaningful Paint
○ Async smooth page transition
3. Focusing to interactivity <= now
○ First CPU Idle (Time to interactive)
○ Responsibility on Runtime
https://dev.to/addyosmani/web-page-usability-matters-3aok
DOM manipulation is heavy
● Virtual DOM was born
○ to solve rendering performance
○ The Inner Working Of Virtual DOM
○ View library has implemented it such as React, Vue.js, Angular, Preact
● Virtual DOM achieve effective rendering, but...
○ Diff algorithm is also heavy
○ Can we use DOM in Worker?
● Split DOM manipulation
○ React Suspense provides async render with Promise
○ Vue.js mutation will use requestIdleCallback()
Off The Main Thread (inner browser)
● Parse and compile scripts in V8
● HTMLParser Redesign
● Will Worklets work on Worker thread?
Off The Main Thread (web page land)
● ampproject/worker-dom: DOM API implementation in Worker
○ using MutationRecord and postMessage
○ Browser-native Worker DOM is…?
● OffscreenCanvas: Canvas in Worker
○ Draw canvas on Worker Context
● Concurrent JavaScript idea by WebKit
https://threejs.org/examples/webgl_worker_offscreencanvas.html
More easier postMessage() !!!
postMessage() interface override
We could only pass string messages
to postMessage(), but new interface
is added.
postMessage(
// primitives, object, File, Blob, etc...
message,
// targetOrigin, transfer
options
);
postMessage(
// string
message,
// targetOrigin
targetOrigin,
// transfer
transfer
);
JavaScript "blöcks" proposal
We could only pass string messages
to postMessage(), but new interface
is added.
const result = await worker{|
const res = await fetch("people.json");
const json = await res.json();
return json[2].firstName;
|};
GoogleChromeLabs/comlink
> Comlink removes the mental
barrier of thinking about
postMessage and hides the fact
that you are working with workers.
// main.js
const MyClass = Comlink.proxy(new
Worker("worker.js"));
// `instance` is an instance of `MyClass` that
lives in the worker!
const instance = await new MyClass();
// logs “myValue = 42”
await instance.logSomething();
Further prospects
● More adoptive loading
○ By using Resource Hints, Intersection Observer, lazyload attribute, etc
● More effective prefetch
○ Like quicklink, Nikkei
● Will View libraries use Worker?
○ To calculate Virtual DOM diffs in Worker Thread
○ To apply Virtual DOM patch from Worker Thread
● Pray for browser optimizations 🙏

More Related Content

What's hot (20)

PDF
MongoDB and Node.js
Norberto Leite
 
PPTX
NodeJS - Server Side JS
Ganesh Kondal
 
PPTX
Nodejs
Vinod Kumar Marupu
 
PPTX
3 Things Everyone Knows About Node JS That You Don't
F5 Buddy
 
PDF
"Applied Enterprise Metaprogramming in JavaScript", Vladyslav Dukhin
Fwdays
 
PDF
Let's migrate to Swift 3.0
CocoaHeads France
 
PPTX
Introduction to Node js
Akshay Mathur
 
PDF
JavaScript as a Server side language (NodeJS): JSConf 2011, Dhaka
Nurul Ferdous
 
PPTX
Searching for the framework of my dreams in node.js ecosystem by Mykyta Semen...
Binary Studio
 
PPTX
Node js for enterprise
ravisankar munusamy
 
PDF
JavaScript Web Workers
Tobias Pfeiffer
 
PPTX
Nodejs getting started
Triet Ho
 
PPTX
Node.js Patterns for Discerning Developers
cacois
 
PDF
Realtime web application with java
JeongHun Byeon
 
PPTX
webworkers
Asanka Indrajith
 
PPTX
Node js training (1)
Ashish Gupta
 
PDF
Getting started with node JS
Hamdi Hmidi
 
PPTX
Before start
Medhat Dawoud
 
PDF
Treinamento frontend
Adrian Caetano
 
PDF
Analyse Yourself
Norberto Leite
 
MongoDB and Node.js
Norberto Leite
 
NodeJS - Server Side JS
Ganesh Kondal
 
3 Things Everyone Knows About Node JS That You Don't
F5 Buddy
 
"Applied Enterprise Metaprogramming in JavaScript", Vladyslav Dukhin
Fwdays
 
Let's migrate to Swift 3.0
CocoaHeads France
 
Introduction to Node js
Akshay Mathur
 
JavaScript as a Server side language (NodeJS): JSConf 2011, Dhaka
Nurul Ferdous
 
Searching for the framework of my dreams in node.js ecosystem by Mykyta Semen...
Binary Studio
 
Node js for enterprise
ravisankar munusamy
 
JavaScript Web Workers
Tobias Pfeiffer
 
Nodejs getting started
Triet Ho
 
Node.js Patterns for Discerning Developers
cacois
 
Realtime web application with java
JeongHun Byeon
 
webworkers
Asanka Indrajith
 
Node js training (1)
Ashish Gupta
 
Getting started with node JS
Hamdi Hmidi
 
Before start
Medhat Dawoud
 
Treinamento frontend
Adrian Caetano
 
Analyse Yourself
Norberto Leite
 

Similar to Introduction to Performance APIs (20)

PDF
Ten practical ways to improve front-end performance
Andrew Rota
 
PPTX
Road to sbt 1.0: Paved with server (2015 Amsterdam)
Eugene Yokota
 
PDF
Full Stack React Workshop [CSSC x GDSC]
GDSC UofT Mississauga
 
PDF
Dust.js
Yevgeniy Brikman
 
PPTX
Micronaut: A new way to build microservices
Luram Archanjo
 
PPTX
Web summit.pptx
171SagnikRoy
 
PDF
Beginning MEAN Stack
Rob Davarnia
 
PPTX
Road to sbt 1.0 paved with server
Eugene Yokota
 
PDF
Sprint 17
ManageIQ
 
PPTX
GDSC NITS Presents Kickstart into ReactJS
Pratik Majumdar
 
PPTX
Advanced JavaScript
Mahmoud Tolba
 
PPT
Developing Java Web Applications
hchen1
 
PDF
Refactoring to a Single Page Application
Codemotion
 
PDF
Building an Extensible, Resumable DSL on Top of Apache Groovy
jgcloudbees
 
ODP
BaseX user-group-talk XML Prague 2013
Andy Bunce
 
PDF
Advanced web application architecture - Talk
Matthias Noback
 
PPT
Monorail presentation at WebDevelopersCommunity, Feb 1, 2009
ken.egozi
 
PPTX
Refactoring to a SPA
Marcello Teodori
 
PDF
Cannibalising The Google App Engine
catherinewall
 
Ten practical ways to improve front-end performance
Andrew Rota
 
Road to sbt 1.0: Paved with server (2015 Amsterdam)
Eugene Yokota
 
Full Stack React Workshop [CSSC x GDSC]
GDSC UofT Mississauga
 
Micronaut: A new way to build microservices
Luram Archanjo
 
Web summit.pptx
171SagnikRoy
 
Beginning MEAN Stack
Rob Davarnia
 
Road to sbt 1.0 paved with server
Eugene Yokota
 
Sprint 17
ManageIQ
 
GDSC NITS Presents Kickstart into ReactJS
Pratik Majumdar
 
Advanced JavaScript
Mahmoud Tolba
 
Developing Java Web Applications
hchen1
 
Refactoring to a Single Page Application
Codemotion
 
Building an Extensible, Resumable DSL on Top of Apache Groovy
jgcloudbees
 
BaseX user-group-talk XML Prague 2013
Andy Bunce
 
Advanced web application architecture - Talk
Matthias Noback
 
Monorail presentation at WebDevelopersCommunity, Feb 1, 2009
ken.egozi
 
Refactoring to a SPA
Marcello Teodori
 
Cannibalising The Google App Engine
catherinewall
 
Ad

More from Shogo Sensui (17)

PDF
Web Standards Interop 2022
Shogo Sensui
 
PDF
Web Standards 2018
Shogo Sensui
 
PDF
The State of Web Components
Shogo Sensui
 
PDF
Component of Web Frontend
Shogo Sensui
 
PDF
Web フロントエンドの変遷とこれから
Shogo Sensui
 
PDF
Introduction to Resource Hints
Shogo Sensui
 
PDF
Web Components 2016 & Polymer v2
Shogo Sensui
 
PDF
これからのJavaScriptの話
Shogo Sensui
 
PDF
初心者のためのWeb標準技術
Shogo Sensui
 
PDF
Introduction to Service Worker
Shogo Sensui
 
PDF
We should optimize images
Shogo Sensui
 
PDF
Web Components changes Web Development
Shogo Sensui
 
PDF
Re-think about Web Performance
Shogo Sensui
 
PDF
Browser Computing Structure
Shogo Sensui
 
PDF
Brush up your Coding! 2013 winter
Shogo Sensui
 
PDF
Brush up your Coding!
Shogo Sensui
 
PDF
Functional JavaScript with Lo-Dash.js
Shogo Sensui
 
Web Standards Interop 2022
Shogo Sensui
 
Web Standards 2018
Shogo Sensui
 
The State of Web Components
Shogo Sensui
 
Component of Web Frontend
Shogo Sensui
 
Web フロントエンドの変遷とこれから
Shogo Sensui
 
Introduction to Resource Hints
Shogo Sensui
 
Web Components 2016 & Polymer v2
Shogo Sensui
 
これからのJavaScriptの話
Shogo Sensui
 
初心者のためのWeb標準技術
Shogo Sensui
 
Introduction to Service Worker
Shogo Sensui
 
We should optimize images
Shogo Sensui
 
Web Components changes Web Development
Shogo Sensui
 
Re-think about Web Performance
Shogo Sensui
 
Browser Computing Structure
Shogo Sensui
 
Brush up your Coding! 2013 winter
Shogo Sensui
 
Brush up your Coding!
Shogo Sensui
 
Functional JavaScript with Lo-Dash.js
Shogo Sensui
 
Ad

Recently uploaded (20)

PPTX
From Sci-Fi to Reality: Exploring AI Evolution
Svetlana Meissner
 
PDF
CIFDAQ Weekly Market Wrap for 11th July 2025
CIFDAQ
 
PDF
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
Fwdays
 
PDF
Transcript: New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
PDF
How Startups Are Growing Faster with App Developers in Australia.pdf
India App Developer
 
PDF
CIFDAQ Token Spotlight for 9th July 2025
CIFDAQ
 
PPTX
Webinar: Introduction to LF Energy EVerest
DanBrown980551
 
PDF
CIFDAQ Market Wrap for the week of 4th July 2025
CIFDAQ
 
PDF
DevBcn - Building 10x Organizations Using Modern Productivity Metrics
Justin Reock
 
PDF
What Makes Contify’s News API Stand Out: Key Features at a Glance
Contify
 
PDF
From Code to Challenge: Crafting Skill-Based Games That Engage and Reward
aiyshauae
 
PDF
Biography of Daniel Podor.pdf
Daniel Podor
 
PDF
"AI Transformation: Directions and Challenges", Pavlo Shaternik
Fwdays
 
PDF
Jak MŚP w Europie Środkowo-Wschodniej odnajdują się w świecie AI
dominikamizerska1
 
PDF
Smart Trailers 2025 Update with History and Overview
Paul Menig
 
PDF
HCIP-Data Center Facility Deployment V2.0 Training Material (Without Remarks ...
mcastillo49
 
PPTX
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 
PDF
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
PDF
[Newgen] NewgenONE Marvin Brochure 1.pdf
darshakparmar
 
PDF
Agentic AI lifecycle for Enterprise Hyper-Automation
Debmalya Biswas
 
From Sci-Fi to Reality: Exploring AI Evolution
Svetlana Meissner
 
CIFDAQ Weekly Market Wrap for 11th July 2025
CIFDAQ
 
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
Fwdays
 
Transcript: New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
How Startups Are Growing Faster with App Developers in Australia.pdf
India App Developer
 
CIFDAQ Token Spotlight for 9th July 2025
CIFDAQ
 
Webinar: Introduction to LF Energy EVerest
DanBrown980551
 
CIFDAQ Market Wrap for the week of 4th July 2025
CIFDAQ
 
DevBcn - Building 10x Organizations Using Modern Productivity Metrics
Justin Reock
 
What Makes Contify’s News API Stand Out: Key Features at a Glance
Contify
 
From Code to Challenge: Crafting Skill-Based Games That Engage and Reward
aiyshauae
 
Biography of Daniel Podor.pdf
Daniel Podor
 
"AI Transformation: Directions and Challenges", Pavlo Shaternik
Fwdays
 
Jak MŚP w Europie Środkowo-Wschodniej odnajdują się w świecie AI
dominikamizerska1
 
Smart Trailers 2025 Update with History and Overview
Paul Menig
 
HCIP-Data Center Facility Deployment V2.0 Training Material (Without Remarks ...
mcastillo49
 
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
[Newgen] NewgenONE Marvin Brochure 1.pdf
darshakparmar
 
Agentic AI lifecycle for Enterprise Hyper-Automation
Debmalya Biswas
 

Introduction to Performance APIs

  • 1. Introduction to Performance APIs Chrome Tech Talk Night #12 Shogo Sensui (@1000ch)
  • 3. Table of contents ● Lazy Loading ● Prefetch ● Off The Main Thread
  • 5. Intersection Observer > The Intersection Observer API provides a way to asynchronously observe changes in the intersection of a target element with an ancestor element or with a top-level document's viewport. const observer = new IntersectionObserver((entries) => { for (const entry of entries) { if (entry.isIntersecting) { console.log(entry); } } }); const el = document.querySelector('#el); observer.observe(el);
  • 7. Intersection Observer v2 Intersection Observer v2 will detect the actual visiblity (like “opacity”). ● New options ○ trackVisiblity constructor option to track visiblity ○ isVisible property in IntersectionObserverEntry ● IntersectionObserver v2 demo const el = document.querySelector('#el); const observer = new IntersectionObserver((entries) => { for (const entry of entries) { if (entry.isVisible) { console.log(entry); } } }); observer.observe(el, { trackVisiblity: true });
  • 8. Browser native lazy-loading lazyload attribute to load if display with-in viewport. ● will be enabled on... ○ <img> ○ <iframe> ● Lazyload images and iframes by bengreenstein · Pull Request #3752 · whatwg/html. ● Blink LazyLoad Design Docs (public) <img src="https://example.com/image.jpg" lazyload="on"> <iframe src="https://google.com" lazyload="on"> </iframe>
  • 10. Priority Hints for resource loading importance attribute to indicate resource priority. ● will be enabled on... ○ <img> ○ <iframe> ○ <script> ○ <link> ○ fetch() ● Priority Hints Draft Community Group Report 18 October 2018 <img src="https://example.com/image.jpg" importance="high"> <iframe src="https://example.com" importance="low"> </iframe> <script> fetch('https://google.com', { importance: 'high' }); </script>
  • 11. Resource Hints Resource Hints provides speculative loading which consists of... ● DNS Prefetch: host ● Preconnect: host ● Prefetch: resources ● Prerender: specified page <link rel="dns-prefetch" href="//example.com/"> <link rel="preconnect" href="//example.com/"> <link rel="prefetch" as="image" href="https://example.com/high-priority.jpg"> <link rel="prerender" href="https://example.com/">
  • 13. Preload Preload provides aggressive loading ● For nested resources for initial loading ○ e.g) Images referred in CSS ○ e.g) JavaScript loaded on JavaScript ● Similar to Resource Hints <link rel="preload" href="https://example.com/high-priority.jpg"> <link rel="preload" href="https://example.com/high-priority.js">
  • 15. GoogleChromeLabs/quicklink > Faster subsequent page-loads by prefetching in-viewport links during idle time Speculative prefetch links with-in viewport using following APIs. ● Intersection Observer ● Prefetch (Resource Hints) ● requestIdleCallback() ● Network Information API. quicklink({ ignores: [ //api/?/, uri => uri.includes('.zip'), (uri, el) => el.hasAttribute('noprefetch') ] });
  • 16. Nuxt v2.4 supports prefetching links in viewport > Nuxt.js will automagically prefetch the code-splitted pages linked with <nuxt-link> when visible in the viewport by default. This hugely improves the end user performances, inspired by quicklink.
  • 17. AMP is the best example for Prefetch/Prerender AMP prefetch/prerender some resources to achieve instant loading ● Prefetch resources ○ from Google AMP Cache hosted on Google ● Prerender documents ○ AMP’s prerender differs from <link rel=preload> ■ Why AMP HTML does not take full advantage of the preload scanner
  • 18. AMP’s URL is a long-standing problem..
  • 19. Web Packaging will solve the AMP’s URL problem Web Packaging consists of... ● Signed HTTP Exchanges: Signs request/response including URL with private keys and creates .sxg file ● Bundled HTTP Exchanges: Bundles subresources in response ● Loading Signed Exchanges: Loads signed .sxg file and displays the original URL instead of distributed URL
  • 20. 🚀 Off The Main Thread
  • 21. More rich, More heavy. Web Page’s payload is increasing continuously
  • 22. Main Thread is busy ● Loading (almost described by Critical Rendering Path) ○ Fetch HTML ○ Parse HTML and construct DOM ○ Fetch sub-resources including CSS ○ Parse CSS and construct CSSOM ○ Eval heavy JavaScript (especially in recent web app) ○ etc... ● Runtime ○ Interact to user operations ○ Fetch data and render async ○ etc...
  • 23. Performance metrics are changing 1. Focused to Server Response (old SSR) ○ load event ○ DOMContentLoaded event 2. Focused to First View (CSR a.k.a SPA) ○ Speed Index ○ First Paint, First Contentful Paint, First Meaningful Paint ○ Async smooth page transition 3. Focusing to interactivity <= now ○ First CPU Idle (Time to interactive) ○ Responsibility on Runtime
  • 25. DOM manipulation is heavy ● Virtual DOM was born ○ to solve rendering performance ○ The Inner Working Of Virtual DOM ○ View library has implemented it such as React, Vue.js, Angular, Preact ● Virtual DOM achieve effective rendering, but... ○ Diff algorithm is also heavy ○ Can we use DOM in Worker? ● Split DOM manipulation ○ React Suspense provides async render with Promise ○ Vue.js mutation will use requestIdleCallback()
  • 26. Off The Main Thread (inner browser) ● Parse and compile scripts in V8 ● HTMLParser Redesign ● Will Worklets work on Worker thread?
  • 27. Off The Main Thread (web page land) ● ampproject/worker-dom: DOM API implementation in Worker ○ using MutationRecord and postMessage ○ Browser-native Worker DOM is…? ● OffscreenCanvas: Canvas in Worker ○ Draw canvas on Worker Context ● Concurrent JavaScript idea by WebKit
  • 30. postMessage() interface override We could only pass string messages to postMessage(), but new interface is added. postMessage( // primitives, object, File, Blob, etc... message, // targetOrigin, transfer options ); postMessage( // string message, // targetOrigin targetOrigin, // transfer transfer );
  • 31. JavaScript "blöcks" proposal We could only pass string messages to postMessage(), but new interface is added. const result = await worker{| const res = await fetch("people.json"); const json = await res.json(); return json[2].firstName; |};
  • 32. GoogleChromeLabs/comlink > Comlink removes the mental barrier of thinking about postMessage and hides the fact that you are working with workers. // main.js const MyClass = Comlink.proxy(new Worker("worker.js")); // `instance` is an instance of `MyClass` that lives in the worker! const instance = await new MyClass(); // logs “myValue = 42” await instance.logSomething();
  • 33. Further prospects ● More adoptive loading ○ By using Resource Hints, Intersection Observer, lazyload attribute, etc ● More effective prefetch ○ Like quicklink, Nikkei ● Will View libraries use Worker? ○ To calculate Virtual DOM diffs in Worker Thread ○ To apply Virtual DOM patch from Worker Thread ● Pray for browser optimizations 🙏