SlideShare a Scribd company logo
1 of 45
Download to read offline
IntersectionObserver
Time for
@pocketjoso
Open source, web perf, tooling, React
Critical css: Penthouse, criticalcss.com
About me
@pocketjoso pocketjoso
Jonas Ohlsson Aden
https://jonassebastianohlsson.com
Lead Front end team
Using Voice AI to make technology disappear
Today’s talk
• What is IntersectionObserver❔
• Why you need it 👊
• How to use it (today) 🚀
What is
IntersectionObserver
❔
Default behaviour is in-view monitoring
‘root’ can be changed (advanced use cases)
Some usages areas 🎯
• lazy loading content
• in-view tracking
• animation triggers
in-view animation trigger
Why is it needed?
We’ve been doing these things for years!
Why is it needed?
..without it you end up with
• complex code
• performance issues
more on why: https://github.com/w3c/IntersectionObserver/blob/gh-pages/explainer.md#observing-position
Why complex and badly
performing? (historically)
• ‘scroll’ fires too often, needs to be
throttled
useful: https://css-tricks.com/debouncing-throttling-explained-examples/
why getBoundingClientRect is slow https://gist.github.com/paulirish/5d52fb081b3570c81e3a
• useful DOM methods are too slow 🐌, f.e.
DOMElement.getBoundingClientRect
• workarounds requires caching expensive DOM
read values, and then cache invalidation..
IntersectionObserver
to the rescue! 🎉
const observer = new
window.IntersectionObserver(onIntersect)
function onIntersect (entries) {
entries.forEach(entry => {
if (entry.isIntersecting) {
console.log('element intersecting!')
}
})
}
observer.observe(DOMElement)
👍
in-view monitoring
with IntersectionObserver
Why is it needed?
recap
• avoid complex code
• avoid performance issues
more on why: https://github.com/w3c/IntersectionObserver/blob/gh-pages/explainer.md#observing-position
✅
IntersectionObserver
performance built in 🏇
• callback doesn’t fire continuously

- and internally uses requestIdleCallback*
• not magic: do keep handler execution quick
• no need for getBoundingClientRect()

- intersection checks handled and optimised by
browser
*so far only in Chrome
Why is it needed?
recap
• avoid complex code
• avoid performance issues
✅
✅
IntersectionObserver
performance built in 🏇
• callback doesn’t fire continuously

- and internally uses requestIdleCallback*
• not magic: do keep handler execution quick
• no need for getBoundingClientRect()

- intersection checks handled and optimised by
browser
*so far only in Chrome
IntersectionObserver
for animations
• don’t use if need continuous updates; tracing
scroll position
-> Parallax effects ❌
• can use if okay with delayed (async) updates
-> enter/exit animation trigger ✅
✅ Just test your use case
IntersectionObserver
what else do we need to know?
full API docs: https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API
in-view detection
via entry.isIntersecting
const observer = new
window.IntersectionObserver(onIntersect)
function onIntersect (entries) {
entries.forEach(entry => {
if (entry.isIntersecting) {
console.log('element intersecting!')
}
})
}
observer.observe(DOMElement)
In my opinion the easiest way to do this
entry.isIntersecting
• Not whether entry is intersecting or not
• whether the element now intersects more or
less than before
⚠ in earlier version of spec the behaviour was the former; and it’s still the case in polyfills, and early Edge
in view detection
via entry.intersectionRatio
const observer = new
window.IntersectionObserver(onIntersect)
function onIntersect (entries) {
entries.forEach(entry => {
if (entry.intersectionRatio > 0) {
console.log('element intersecting!')
}
})
}
observer.observe(DOMElement)
(not enough to just use intersectionRatio)
intersectionRatio = 

area intersecting / total area
by default: area in view
Image credit: https://developers.google.com/web/updates/2016/04/intersectionobserver
root
(Viewport)
intersectionRatio = 

area intersecting /
total area
in view detection
via intersectionRatio
const observer = new IntersectionObserver(
onIntersect,
{threshold: [0.01]} // default: [0]
)
function onIntersect (entries) {
entries.forEach(entry => {
if (entry.intersectionRatio > 0) {
console.log('element intersecting!')
}
})
}
observer.observe(DOMElement)
You need to add a custom threshold
in view detection
via intersectionRatio
const observer = new IntersectionObserver(
onIntersect,
{threshold: [0.01]} // default: [0]
)
function onIntersect (entries) {
entries.forEach(entry => {
if (entry.intersectionRatio > 0) {
console.log('element intersecting!')
}
})
}
observer.observe(DOMElement)
threshold + intersectionRatio demo: https://codepen.io/pocketjoso/pen/jGqgPB
threshold: array of intersectionRatio values
when crossed triggers onIntersect callback
in view detection
via intersectionRatio
const observer = new IntersectionObserver(
onIntersect,
{threshold: [0.01]} // Note: above 0
)
function onIntersect (entries) {
entries.forEach(entry => {
// without 0.01 threshold
// we can get false negatives here
if (entry.intersectionRatio > 0) {
console.log('element intersecting!')
}
})
}
⚠
To avoid false negatives
thresholds and callbacks
• onIntersect also fires when observer.observe() is called
• No guarantee of one onIntersect call per threshold -

callback is ~ throttled, time-overlapping calls omitted
• ⚠ Possible to get no callbacks is scrolling past too
quickly
• ✅ Should not be a problem for most use cases
determine direction
• entry.boundingClientRect: static read-
only value - we get it for free! 🎉
• together with entry.isIntersecting we
can determine direction
function onIntersect (entries) {
entries.forEach(entry => {
// entry.boundingClientRect
// entry.isIntersecting

}
re-use observer
const observer = new
window.IntersectionObserver(onIntersect)
[…document.querySelectorAll('.myClass')]
.forEach(DOMElement => observer.observe(DOMElement))
also possible using multiple observers,

if need different observer configuration
observer.unobserve & entry.target
const observer = new
window.IntersectionObserver(onIntersect)
function onIntersect (entries) {
entries.forEach(entry => {
if (entry.isIntersecting) {
// f.e. lazy load image here
// then stop observing.
// entry.target is the DOMElement
// we called observer.observe with
observer.unobserve(entry.target)
}
})
}
[…document.querySelectorAll(‘.lazy-load’)]
.forEach(DOMElement => observer.observe(DOMElement))
disconnect
const observer = new
window.IntersectionObserver(onIntersect)
// later - tears down all observing
observer.disconnect()
use case: on navigation (leaving page) in
Single Page Application
rootMargin
px or percent
Can use negative margins
const observer = new IntersectionObserver(
onIntersect,
{ rootMargin: '0px 0px 0px 0px' }
)
observer.observe(DOMElement)
rootMargin demo: https://codepen.io/pocketjoso/pen/GMqJYx?editors=0110
rootMargin
• Use positive margin to fire onIntersect earlier
- for lazy loading logic
• Could use negative margin to delay onIntersect,
to have more of the element in-view already…
..but better define such “margin” relative to the element:



const observer = new IntersectionObserver(
onIntersect,
{threshold: [0.2]} // update when 20% in-view instead of 0%
)
Support?
http://caniuse.com/#feat=intersectionobserver
Support strategies
1. Progressive enhancement
2. Polyfill
https://cdn.polyfill.io/v2/polyfill.js?features=IntersectionObserver)
Configure polyfill to poll for changes from css (:hover, animations) and other user interactions:
https://github.com/w3c/IntersectionObserver/tree/master/polyfill#configuring-the-polyfill
How we use at
• React
• Declarative code
Declarative
(order: Big Mac)
vs
Imperative
(recipe: cut the cucumber, rinse the salad…)
DOM manipulation -
imperative
const observer = new IntersectionObserver(
onIntersect,
{threshold: [0.01]} // default: [0]
)
function onIntersect (entries) {
entries.forEach(entry => {
if (entry.intersectionRatio > 0) {
console.log('element intersecting!')
}
})
}
observer.observe(DOMElement)
We want to avoid repeating this kind of code
<InViewMonitor
classNameInView='animated fadeInUp'
>
<ElementToAnimateIn />
</InViewMonitor>
How we use at
• “Reveal” animations
<InViewMonitor
childPropsInView={{ playVideo: true }}
>
<VideoPlayer />
</InViewMonitor>
How we use at
• Auto play/stop video

- save GPU and mobile battery
<InViewMonitor
onInView={() => trackEvent(‘VideoPlayerInView')}
>
<VideoPlayer />
</InViewMonitor>
How we use at
• track components coming into view
• .. or any other custom functionality
How we use at
• declarative & easy to use
• Uses IntersectionObserver under the hood
Open source! 🎉

https://snipsco.github.io/react-inview-monitor/
react-inview-monitor
Summary
• IntersectionObserver is here -

ready to use today (with a polyfill)
• For in-view detection, it is an easier and
better performing alternative than scroll
listeners
We’re hiring..
https://snips.ai/jobs
That’s all! 🥂
Thank you! 🙏
@pocketjoso
Resources
https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API
https://developers.google.com/web/updates/2016/04/intersectionobserver
https://github.com/w3c/IntersectionObserver/blob/gh-pages/explainer.md
https://davidwalsh.name/intersection-observers
http://deanhume.com/home/blogpost/lazy-loading-images-using-intersection-
observer/10163
https://www.youtube.com/watch?v=ncYQkOrKTaI&list=PLNYkxOF6rcIBykcJ7bvTpqU7vt-
oey72J&index=7
https://corydowdy.com/blog/lazy-loading-images-with-intersection-observer
https://alligator.io/js/intersection-observer
http://caniuse.com/#feat=intersectionobserver
https://developers.google.com/web/updates/2017/09/sticky-headers
@pocketjoso

More Related Content

What's hot

Non Conventional Android Programming En
Non Conventional Android Programming EnNon Conventional Android Programming En
Non Conventional Android Programming Enguest9bcef2f
 
The current state of web
The current state of webThe current state of web
The current state of webRitesh Kumar
 
React Native: The Development Flow
React Native: The Development FlowReact Native: The Development Flow
React Native: The Development FlowRitesh Kumar
 
So you think you know JavaScript
So you think you know JavaScriptSo you think you know JavaScript
So you think you know JavaScriptMatt Apperson
 
Workshop 1: Good practices in JavaScript
Workshop 1: Good practices in JavaScriptWorkshop 1: Good practices in JavaScript
Workshop 1: Good practices in JavaScriptVisual Engineering
 
soft-shake.ch - Hands on Node.js
soft-shake.ch - Hands on Node.jssoft-shake.ch - Hands on Node.js
soft-shake.ch - Hands on Node.jssoft-shake.ch
 
Ember testing internals with ember cli
Ember testing internals with ember cliEmber testing internals with ember cli
Ember testing internals with ember cliCory Forsyth
 
Testing Javascript with Jasmine
Testing Javascript with JasmineTesting Javascript with Jasmine
Testing Javascript with JasmineTim Tyrrell
 
Workshop 12: AngularJS Parte I
Workshop 12: AngularJS Parte IWorkshop 12: AngularJS Parte I
Workshop 12: AngularJS Parte IVisual Engineering
 
Real Time Event Dispatcher
Real Time Event DispatcherReal Time Event Dispatcher
Real Time Event DispatcherPeter Dietrich
 
Workshop 14: AngularJS Parte III
Workshop 14: AngularJS Parte IIIWorkshop 14: AngularJS Parte III
Workshop 14: AngularJS Parte IIIVisual Engineering
 
Intro to JavaScript
Intro to JavaScriptIntro to JavaScript
Intro to JavaScriptYakov Fain
 
Testing JS with Jasmine
Testing JS with JasmineTesting JS with Jasmine
Testing JS with JasmineEvgeny Gurin
 
Consuming Web Services with Swift and Rx
Consuming Web Services with Swift and RxConsuming Web Services with Swift and Rx
Consuming Web Services with Swift and RxGuillermo Gonzalez
 
Mirage For Beginners
Mirage For BeginnersMirage For Beginners
Mirage For BeginnersWilson Su
 
Building an angular application -1 ( API: Golang, Database: Postgres) v1.0
Building an angular application -1 ( API: Golang, Database: Postgres) v1.0Building an angular application -1 ( API: Golang, Database: Postgres) v1.0
Building an angular application -1 ( API: Golang, Database: Postgres) v1.0Frost
 
Workshop: Functional testing made easy with PHPUnit & Selenium (phpCE Poland,...
Workshop: Functional testing made easy with PHPUnit & Selenium (phpCE Poland,...Workshop: Functional testing made easy with PHPUnit & Selenium (phpCE Poland,...
Workshop: Functional testing made easy with PHPUnit & Selenium (phpCE Poland,...Ondřej Machulda
 

What's hot (20)

Non Conventional Android Programming En
Non Conventional Android Programming EnNon Conventional Android Programming En
Non Conventional Android Programming En
 
The current state of web
The current state of webThe current state of web
The current state of web
 
React Native: The Development Flow
React Native: The Development FlowReact Native: The Development Flow
React Native: The Development Flow
 
So you think you know JavaScript
So you think you know JavaScriptSo you think you know JavaScript
So you think you know JavaScript
 
Workshop 1: Good practices in JavaScript
Workshop 1: Good practices in JavaScriptWorkshop 1: Good practices in JavaScript
Workshop 1: Good practices in JavaScript
 
soft-shake.ch - Hands on Node.js
soft-shake.ch - Hands on Node.jssoft-shake.ch - Hands on Node.js
soft-shake.ch - Hands on Node.js
 
Ember testing internals with ember cli
Ember testing internals with ember cliEmber testing internals with ember cli
Ember testing internals with ember cli
 
Testing Javascript with Jasmine
Testing Javascript with JasmineTesting Javascript with Jasmine
Testing Javascript with Jasmine
 
Workshop 12: AngularJS Parte I
Workshop 12: AngularJS Parte IWorkshop 12: AngularJS Parte I
Workshop 12: AngularJS Parte I
 
Real Time Event Dispatcher
Real Time Event DispatcherReal Time Event Dispatcher
Real Time Event Dispatcher
 
Workshop 15: Ionic framework
Workshop 15: Ionic frameworkWorkshop 15: Ionic framework
Workshop 15: Ionic framework
 
Workshop 14: AngularJS Parte III
Workshop 14: AngularJS Parte IIIWorkshop 14: AngularJS Parte III
Workshop 14: AngularJS Parte III
 
Intro to JavaScript
Intro to JavaScriptIntro to JavaScript
Intro to JavaScript
 
iOS and Android apps automation
iOS and Android apps automationiOS and Android apps automation
iOS and Android apps automation
 
Your code are my tests
Your code are my testsYour code are my tests
Your code are my tests
 
Testing JS with Jasmine
Testing JS with JasmineTesting JS with Jasmine
Testing JS with Jasmine
 
Consuming Web Services with Swift and Rx
Consuming Web Services with Swift and RxConsuming Web Services with Swift and Rx
Consuming Web Services with Swift and Rx
 
Mirage For Beginners
Mirage For BeginnersMirage For Beginners
Mirage For Beginners
 
Building an angular application -1 ( API: Golang, Database: Postgres) v1.0
Building an angular application -1 ( API: Golang, Database: Postgres) v1.0Building an angular application -1 ( API: Golang, Database: Postgres) v1.0
Building an angular application -1 ( API: Golang, Database: Postgres) v1.0
 
Workshop: Functional testing made easy with PHPUnit & Selenium (phpCE Poland,...
Workshop: Functional testing made easy with PHPUnit & Selenium (phpCE Poland,...Workshop: Functional testing made easy with PHPUnit & Selenium (phpCE Poland,...
Workshop: Functional testing made easy with PHPUnit & Selenium (phpCE Poland,...
 

Similar to IntersectionObserver: Avoid Complex Code and Improve Performance with In-View Detection

Puppeteer - A web scraping & UI Testing Tool
Puppeteer - A web scraping & UI Testing ToolPuppeteer - A web scraping & UI Testing Tool
Puppeteer - A web scraping & UI Testing ToolMiki Lombardi
 
Introduction to aop
Introduction to aopIntroduction to aop
Introduction to aopDror Helper
 
An opinionated intro to Node.js - devrupt hospitality hackathon
An opinionated intro to Node.js - devrupt hospitality hackathonAn opinionated intro to Node.js - devrupt hospitality hackathon
An opinionated intro to Node.js - devrupt hospitality hackathonLuciano Mammino
 
Philip Shurpik "Architecting React Native app"
Philip Shurpik "Architecting React Native app"Philip Shurpik "Architecting React Native app"
Philip Shurpik "Architecting React Native app"Fwdays
 
Servlet 3.1 Async I/O
Servlet 3.1 Async I/OServlet 3.1 Async I/O
Servlet 3.1 Async I/OSimone Bordet
 
Vitaliy Makogon: Migration to ivy. Angular component libraries with IVY support.
Vitaliy Makogon: Migration to ivy. Angular component libraries with IVY support.Vitaliy Makogon: Migration to ivy. Angular component libraries with IVY support.
Vitaliy Makogon: Migration to ivy. Angular component libraries with IVY support.VitaliyMakogon
 
SharePoint Framework, Angular and Azure Functions
SharePoint Framework, Angular and Azure FunctionsSharePoint Framework, Angular and Azure Functions
SharePoint Framework, Angular and Azure FunctionsSébastien Levert
 
Improving app performance with Kotlin Coroutines
Improving app performance with Kotlin CoroutinesImproving app performance with Kotlin Coroutines
Improving app performance with Kotlin CoroutinesHassan Abid
 
파이썬 웹 서비스 구성과 이해
파이썬 웹 서비스 구성과 이해파이썬 웹 서비스 구성과 이해
파이썬 웹 서비스 구성과 이해Selo Lee
 
The Evolution of Async-Programming on .NET Platform (.Net China, C#)
The Evolution of Async-Programming on .NET Platform (.Net China, C#)The Evolution of Async-Programming on .NET Platform (.Net China, C#)
The Evolution of Async-Programming on .NET Platform (.Net China, C#)jeffz
 
SharePoint Saturday Lisbon 2017 - SharePoint Framework, Angular & Azure Funct...
SharePoint Saturday Lisbon 2017 - SharePoint Framework, Angular & Azure Funct...SharePoint Saturday Lisbon 2017 - SharePoint Framework, Angular & Azure Funct...
SharePoint Saturday Lisbon 2017 - SharePoint Framework, Angular & Azure Funct...Sébastien Levert
 
Re-Design with Elixir/OTP
Re-Design with Elixir/OTPRe-Design with Elixir/OTP
Re-Design with Elixir/OTPMustafa TURAN
 
Medium TechTalk — iOS
Medium TechTalk — iOSMedium TechTalk — iOS
Medium TechTalk — iOSjimmyatmedium
 
Advanced iOS Debbuging (Reloaded)
Advanced iOS Debbuging (Reloaded)Advanced iOS Debbuging (Reloaded)
Advanced iOS Debbuging (Reloaded)Massimo Oliviero
 
Ewebkit basic (Web rendering enging of EFL)
Ewebkit basic (Web rendering enging of EFL)Ewebkit basic (Web rendering enging of EFL)
Ewebkit basic (Web rendering enging of EFL)ryuan choi
 
SharePoint Fest Seattle - SharePoint Framework, Angular & Azure Functions
SharePoint Fest Seattle - SharePoint Framework, Angular & Azure FunctionsSharePoint Fest Seattle - SharePoint Framework, Angular & Azure Functions
SharePoint Fest Seattle - SharePoint Framework, Angular & Azure FunctionsSébastien Levert
 
MOPCON 2014 - Best software architecture in app development
MOPCON 2014 - Best software architecture in app developmentMOPCON 2014 - Best software architecture in app development
MOPCON 2014 - Best software architecture in app developmentanistar sung
 
Mobile webapplication development
Mobile webapplication developmentMobile webapplication development
Mobile webapplication developmentGanesh Gembali
 
Front End Development for Back End Developers - UberConf 2017
Front End Development for Back End Developers - UberConf 2017Front End Development for Back End Developers - UberConf 2017
Front End Development for Back End Developers - UberConf 2017Matt Raible
 

Similar to IntersectionObserver: Avoid Complex Code and Improve Performance with In-View Detection (20)

Puppeteer - A web scraping & UI Testing Tool
Puppeteer - A web scraping & UI Testing ToolPuppeteer - A web scraping & UI Testing Tool
Puppeteer - A web scraping & UI Testing Tool
 
Introduction to aop
Introduction to aopIntroduction to aop
Introduction to aop
 
An opinionated intro to Node.js - devrupt hospitality hackathon
An opinionated intro to Node.js - devrupt hospitality hackathonAn opinionated intro to Node.js - devrupt hospitality hackathon
An opinionated intro to Node.js - devrupt hospitality hackathon
 
Node azure
Node azureNode azure
Node azure
 
Philip Shurpik "Architecting React Native app"
Philip Shurpik "Architecting React Native app"Philip Shurpik "Architecting React Native app"
Philip Shurpik "Architecting React Native app"
 
Servlet 3.1 Async I/O
Servlet 3.1 Async I/OServlet 3.1 Async I/O
Servlet 3.1 Async I/O
 
Vitaliy Makogon: Migration to ivy. Angular component libraries with IVY support.
Vitaliy Makogon: Migration to ivy. Angular component libraries with IVY support.Vitaliy Makogon: Migration to ivy. Angular component libraries with IVY support.
Vitaliy Makogon: Migration to ivy. Angular component libraries with IVY support.
 
SharePoint Framework, Angular and Azure Functions
SharePoint Framework, Angular and Azure FunctionsSharePoint Framework, Angular and Azure Functions
SharePoint Framework, Angular and Azure Functions
 
Improving app performance with Kotlin Coroutines
Improving app performance with Kotlin CoroutinesImproving app performance with Kotlin Coroutines
Improving app performance with Kotlin Coroutines
 
파이썬 웹 서비스 구성과 이해
파이썬 웹 서비스 구성과 이해파이썬 웹 서비스 구성과 이해
파이썬 웹 서비스 구성과 이해
 
The Evolution of Async-Programming on .NET Platform (.Net China, C#)
The Evolution of Async-Programming on .NET Platform (.Net China, C#)The Evolution of Async-Programming on .NET Platform (.Net China, C#)
The Evolution of Async-Programming on .NET Platform (.Net China, C#)
 
SharePoint Saturday Lisbon 2017 - SharePoint Framework, Angular & Azure Funct...
SharePoint Saturday Lisbon 2017 - SharePoint Framework, Angular & Azure Funct...SharePoint Saturday Lisbon 2017 - SharePoint Framework, Angular & Azure Funct...
SharePoint Saturday Lisbon 2017 - SharePoint Framework, Angular & Azure Funct...
 
Re-Design with Elixir/OTP
Re-Design with Elixir/OTPRe-Design with Elixir/OTP
Re-Design with Elixir/OTP
 
Medium TechTalk — iOS
Medium TechTalk — iOSMedium TechTalk — iOS
Medium TechTalk — iOS
 
Advanced iOS Debbuging (Reloaded)
Advanced iOS Debbuging (Reloaded)Advanced iOS Debbuging (Reloaded)
Advanced iOS Debbuging (Reloaded)
 
Ewebkit basic (Web rendering enging of EFL)
Ewebkit basic (Web rendering enging of EFL)Ewebkit basic (Web rendering enging of EFL)
Ewebkit basic (Web rendering enging of EFL)
 
SharePoint Fest Seattle - SharePoint Framework, Angular & Azure Functions
SharePoint Fest Seattle - SharePoint Framework, Angular & Azure FunctionsSharePoint Fest Seattle - SharePoint Framework, Angular & Azure Functions
SharePoint Fest Seattle - SharePoint Framework, Angular & Azure Functions
 
MOPCON 2014 - Best software architecture in app development
MOPCON 2014 - Best software architecture in app developmentMOPCON 2014 - Best software architecture in app development
MOPCON 2014 - Best software architecture in app development
 
Mobile webapplication development
Mobile webapplication developmentMobile webapplication development
Mobile webapplication development
 
Front End Development for Back End Developers - UberConf 2017
Front End Development for Back End Developers - UberConf 2017Front End Development for Back End Developers - UberConf 2017
Front End Development for Back End Developers - UberConf 2017
 

Recently uploaded

Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...gurkirankumar98700
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 

Recently uploaded (20)

Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 

IntersectionObserver: Avoid Complex Code and Improve Performance with In-View Detection