SlideShare una empresa de Scribd logo
1 de 78
Descargar para leer sin conexión
THROTTLE & DEBOUNCE 
PATTERNS 
IN WEB APPS 
@ALMIRFILHO
@loopinfinito 
l8p.com.br 
@almirfilho
@loopinfinito 
l8p.com.br 
@almirfilho
@loopinfinito 
l8p.com.br 
@almirfilho 
after 
conf
THE PROBLEM
How to control 
user events 
frequency?
SOME CASES 
onclick 
onresize 
onscroll 
onmousemove
onclick 
Order some shit 
… 
Some AJAX action. Whatever
onclick 
Order some shit 
Some AJAX action. Whatever 
click 
freak
onresize 
Responsive modafoca
onresize 
Δ = 100px 
≃ 100 * 
triggerings! 
!%?#$ 
Responsive modafoca
onscroll 
Paralax bullshit
onscroll 
Δ = 100px 
… same 
fuc*ing 
thing 
≃ 
Paralax bullshit
onmousemove 
Gaming junk
onmousemove 
Δx = 100px 
Δy = 50px 
≃ 150 * 
trigg… OMG 
plz stop 
Gaming junk
**BONUS** PROBLEM
Updating <canvas> 
drawings?
Updating <canvas> 
drawings? 
just redraw 
E-V-E-R-Y-T-H-I-N-G
stage.update = function(){ 
redrawHeavyShit(); 
}; 
! 
while(game.isOn){ 
game.step(); 
stage.update(); 
} 
stupid 
game loop
WAY COOLER 
stage.update = function(){ 
redrawHeavyShit(); 
}; 
! 
var gameLoop = function(){ 
game.step(); 
stage.update(); 
requestAnimationFrame(gameLoop); 
}; 
! 
gameLoop();
WAY COOLER 
stage.update = function(){ 
redrawHeavyShit(); 
}; 
! 
var gameLoop = function(){ 
game.step(); 
stage.update(); 
requestAnimationFrame(gameLoop); 
}; 
! 
gameLoop();
Measuring 
damage with 
dev tools
RENDERING & PAINTING COSTS 
all major and modern* browsers 
* even in IE (11)
So, how to control 
user events 
frequency?
THROTTLE
A throttle is a 
mechanism to 
manage fuel flow 
in an engine
ENGINE THROTTLE
So, throttle is just a 
valve? 
! yeeep
COMMON CASES 
resizing 
scrolling 
mouse moving
0s 0.1s 
t 
onscroll 
E E E E E E E E E E E 
paralax()
onscroll throttled 
0s 0.1s 
t 
E E E E E E E E E E E 
THROTTLE 
paralax()
onscroll throttled 
0s 0.1s 
t 
E E E E E E E E E E E 
THROTTLE 
paralax()
var paralax = function(args){ 
complexHeavyShit(); 
}; 
! 
window.addEventListener(‘scroll’, function(e){ 
paralax(e.args); 
});
LET’S 
THROOOOTLE IT 
var paralax = function(args){ 
complexHeavyShit(); 
}; 
! 
window.addEventListener(‘scroll’, 
throttleParalax() 
);
var throttleParalax = (function(){ 
var timeWindow = 500; 
var now = (new Date()).getTime(); 
var lastExecution = new Date(now - timeWindow); 
! 
var paralax = function(args){ 
complexHeavyShit(); 
}; 
! 
return function(){ 
var now = (new Date()).getTime(); 
if(lastExecution.getTime() + timeWindow <= now){ 
lastExecution = new Date(); 
return paralax.apply(this, arguments); 
} 
}; 
}());
var throttleParalax = (function(){ 
var timeWindow = 500; 
var now = (new Date()).getTime(); 
var lastExecution = new Date(now - timeWindow); 
! 
var paralax = function(args){ 
complexHeavyShit(); 
}; 
! 
return function(){ 
var now = (new Date()).getTime(); 
if(lastExecution.getTime() + timeWindow <= now){ 
lastExecution = new Date(); 
return paralax.apply(this, arguments); 
} 
}; 
}()); 
sets 
a context
var throttleParalax = (function(){ 
var timeWindow = 500; 
var now = (new Date()).getTime(); 
var lastExecution = new Date(now - timeWindow); 
! 
var paralax = function(args){ 
complexHeavyShit(); 
}; 
! 
return function(){ 
var now = (new Date()).getTime(); 
if(lastExecution.getTime() + timeWindow <= now){ 
lastExecution = new Date(); 
return paralax.apply(this, arguments); 
} 
}; 
}()); 
sets 
the func.
var throttleParalax = (function(){ 
var timeWindow = 500; 
var now = (new Date()).getTime(); 
var lastExecution = new Date(now - timeWindow); 
! 
var paralax = function(args){ 
complexHeavyShit(); 
}; 
! 
return function(){ 
var now = (new Date()).getTime(); 
if(lastExecution.getTime() + timeWindow <= now){ 
lastExecution = new Date(); 
return paralax.apply(this, arguments); 
} 
}; 
}()); 
returns the 
event handler
Let’s visualize it
Let’s visualize it 
0s 500ms 
t 
E 
event 
happens
Let’s visualize it 
0s 500ms 
t 
E 
event 
executes
Let’s visualize it 
0s 500ms 
t 
E 100ms 
timeWindow
Let’s visualize it 
0s 500ms 
t 
E 100ms 
E 
another event 
happens
Let’s visualize it 
0s 500ms 
t 
E 100ms 
E 
no execution
Let’s visualize it 
0s 500ms 
t 
E 100ms 
E E 
event 
happens
Let’s visualize it 
0s 500ms 
t 
E 100ms 
E E 
same thing 
now
Let’s visualize it 
0s 500ms 
t 
E 100ms 
E E 100ms
Let’s visualize it 
0s 500ms 
t 
E 100ms 
E E 1E00msE E
DEBOUNCE
A debouncing is a 
technique to 
guarantee that a 
button was pressed 
only once.
ELECTRONIC 
DEBOUNCING
Debounce cancels 
multiple actions for 
postpone to the 
last one.
COMMON CASES 
clicking 
key pressing
0s 1s 
t 
onkeyup 
E E E E E E E E E 
autoComplete()
onkeyup debouncing 
0s 1s 
t 
E E E E E E E E E 
DEBOUNCE 
autoComplete()
onkeyup debouncing 
0s 1s 
t 
E E E E E E E E E 
DEBOUNCE 
autoComplete()
btn.addEventListener(‘keyup’, function(){ 
autoComplete(); 
});
LET’S 
DEBOOOUNCE IT 
btn.addEventListener(‘keyup’, 
debounceAutoComplete() 
);
var debounceAutoComplete = (function(){ 
var timeWindow = 100; 
var timeout; 
! 
var autoComplete = function(arg1, arg2){/* … */}; 
! 
return function(){ 
var context = this; 
var args = arguments; 
clearTimeout(timeout); 
timeout = setTimeout(function(){ 
autoComplete.apply(context, args); 
}, timeWindow); 
}; 
}());
var debounceAutoComplete = (function(){ 
var timeWindow = 100; 
sets 
var timeout; 
a context 
! 
var autoComplete = function(arg1, arg2){/* … */}; 
! 
return function(){ 
var context = this; 
var args = arguments; 
clearTimeout(timeout); 
timeout = setTimeout(function(){ 
autoComplete.apply(context, args); 
}, timeWindow); 
}; 
}());
var debounceAutoComplete = (function(){ 
var timeWindow = 100; 
var timeout; 
! 
var autoComplete = function(arg1, arg2){/* … */}; 
! 
return function(){ 
sets 
the func. 
var context = this; 
var args = arguments; 
clearTimeout(timeout); 
timeout = setTimeout(function(){ 
autoComplete.apply(context, args); 
}, timeWindow); 
}; 
}());
var debounceAutoComplete = (function(){ 
var timeWindow = 100; 
var timeout; 
! 
var autoComplete = function(arg1, arg2){/* … */}; 
! 
return function(){ 
return the 
handler 
var context = this; 
var args = arguments; 
clearTimeout(timeout); 
timeout = setTimeout(function(){ 
autoComplete.apply(context, args); 
}, timeWindow); 
}; 
}());
Let’s visualize it
Let’s visualize it 
0s 500ms 
t 
E 
event 
happens
Let’s visualize it 
0s 500ms 
t 
E 100ms 
setTimeOut
Let’s visualize it 
0s 500ms 
t 
E 100ms 
E 
another event 
happens
Let’s visualize it 
0s 500ms 
t 
E 100ms 
E 
clearTimeOut
Let’s visualize it 
0s 500ms 
t 
E 100ms 
reset 
timeOut 
E
Let’s visualize it 
0s 500ms 
t 
E E 10E0ms
Let’s visualize it 
0s 500ms 
t 
E E 10E0ms
Let’s visualize it 
0s 500ms 
t 
E E E 100ms
Let’s visualize it 
0s 500ms 
t 
E E E 100ms 
cool to 
execute!
Let’s visualize it 
0s 500ms 
t 
E E E 100ms 
E 
life goes on…
READ ABOUT [PT-BR]
but… 
<x-mimimi>
JQUERY PLUGIN 
jquery-throttle-debounce 
$(window).scroll($.throttle(250, paralax)); 
! 
$('input').keyup($.debounce(250, autoComplete)); 
github.com/cowboy/jquery-throttle-debounce
UNDERSCORE.JS 
$(window).scroll(_.throttle(paralax, 250)); 
! 
$(‘input’).keyup(_.debounce(autoComplete, 250)); 
underscorejs.org
THANK 
YOU! 
@ALMIRFILHO

Más contenido relacionado

La actualidad más candente

Programming ppt files (final)
Programming ppt files (final)Programming ppt files (final)
Programming ppt files (final)yap_raiza
 
Ejercicios Scilab Completo
Ejercicios Scilab CompletoEjercicios Scilab Completo
Ejercicios Scilab CompletoRicardo Grandas
 
Lock? We don't need no stinkin' locks!
Lock? We don't need no stinkin' locks!Lock? We don't need no stinkin' locks!
Lock? We don't need no stinkin' locks!Michael Barker
 
Parametricity - #cljsyd - May, 2015
Parametricity - #cljsyd - May, 2015Parametricity - #cljsyd - May, 2015
Parametricity - #cljsyd - May, 2015Leonardo Borges
 
The Ring programming language version 1.9 book - Part 92 of 210
The Ring programming language version 1.9 book - Part 92 of 210The Ring programming language version 1.9 book - Part 92 of 210
The Ring programming language version 1.9 book - Part 92 of 210Mahmoud Samir Fayed
 
Newton cotes method
Newton cotes methodNewton cotes method
Newton cotes methodFaisal Saeed
 
Concurrent Application Development using Scala
Concurrent Application Development using ScalaConcurrent Application Development using Scala
Concurrent Application Development using ScalaSiarhiej Siemianchuk
 
Universal JavaScript
Universal JavaScriptUniversal JavaScript
Universal JavaScript名辰 洪
 
You will learn RxJS in 2017
You will learn RxJS in 2017You will learn RxJS in 2017
You will learn RxJS in 2017名辰 洪
 
Quinto Punto Parte B
Quinto Punto Parte BQuinto Punto Parte B
Quinto Punto Parte Bgustavo206
 
New feature of async fakeAsync test in angular
New feature of async fakeAsync test in angularNew feature of async fakeAsync test in angular
New feature of async fakeAsync test in angularJia Li
 

La actualidad más candente (20)

Programming ppt files (final)
Programming ppt files (final)Programming ppt files (final)
Programming ppt files (final)
 
Taller De Scilab
Taller De ScilabTaller De Scilab
Taller De Scilab
 
Ejercicios Scilab Completo
Ejercicios Scilab CompletoEjercicios Scilab Completo
Ejercicios Scilab Completo
 
Trabajo Scilab
Trabajo ScilabTrabajo Scilab
Trabajo Scilab
 
Lock? We don't need no stinkin' locks!
Lock? We don't need no stinkin' locks!Lock? We don't need no stinkin' locks!
Lock? We don't need no stinkin' locks!
 
Parametricity - #cljsyd - May, 2015
Parametricity - #cljsyd - May, 2015Parametricity - #cljsyd - May, 2015
Parametricity - #cljsyd - May, 2015
 
SPL 8 | Loop Statements in C
SPL 8 | Loop Statements in CSPL 8 | Loop Statements in C
SPL 8 | Loop Statements in C
 
The Ring programming language version 1.9 book - Part 92 of 210
The Ring programming language version 1.9 book - Part 92 of 210The Ring programming language version 1.9 book - Part 92 of 210
The Ring programming language version 1.9 book - Part 92 of 210
 
Newton cotes method
Newton cotes methodNewton cotes method
Newton cotes method
 
Concurrent Application Development using Scala
Concurrent Application Development using ScalaConcurrent Application Development using Scala
Concurrent Application Development using Scala
 
Lab 3
Lab 3Lab 3
Lab 3
 
Universal JavaScript
Universal JavaScriptUniversal JavaScript
Universal JavaScript
 
2 презентация rx java+android
2 презентация rx java+android2 презентация rx java+android
2 презентация rx java+android
 
You will learn RxJS in 2017
You will learn RxJS in 2017You will learn RxJS in 2017
You will learn RxJS in 2017
 
Faisal
FaisalFaisal
Faisal
 
Tu1
Tu1Tu1
Tu1
 
Cd
CdCd
Cd
 
Csharp_Chap04
Csharp_Chap04Csharp_Chap04
Csharp_Chap04
 
Quinto Punto Parte B
Quinto Punto Parte BQuinto Punto Parte B
Quinto Punto Parte B
 
New feature of async fakeAsync test in angular
New feature of async fakeAsync test in angularNew feature of async fakeAsync test in angular
New feature of async fakeAsync test in angular
 

Similar a Throttle and Debounce Patterns in Web Apps

JVMLS 2016. Coroutines in Kotlin
JVMLS 2016. Coroutines in KotlinJVMLS 2016. Coroutines in Kotlin
JVMLS 2016. Coroutines in KotlinAndrey Breslav
 
The Strange World of Javascript and all its little Asynchronous Beasts
The Strange World of Javascript and all its little Asynchronous BeastsThe Strange World of Javascript and all its little Asynchronous Beasts
The Strange World of Javascript and all its little Asynchronous BeastsFederico Galassi
 
Angular promises and http
Angular promises and httpAngular promises and http
Angular promises and httpAlexe Bogdan
 
Understanding Asynchronous JavaScript
Understanding Asynchronous JavaScriptUnderstanding Asynchronous JavaScript
Understanding Asynchronous JavaScriptjnewmanux
 
Promises are so passé - Tim Perry - Codemotion Milan 2016
Promises are so passé - Tim Perry - Codemotion Milan 2016Promises are so passé - Tim Perry - Codemotion Milan 2016
Promises are so passé - Tim Perry - Codemotion Milan 2016Codemotion
 
Promise: async programming hero
Promise: async programming heroPromise: async programming hero
Promise: async programming heroThe Software House
 
Expert JavaScript tricks of the masters
Expert JavaScript  tricks of the mastersExpert JavaScript  tricks of the masters
Expert JavaScript tricks of the mastersAra Pehlivanian
 
EcmaScript unchained
EcmaScript unchainedEcmaScript unchained
EcmaScript unchainedEduard Tomàs
 
Callbacks, Promises, and Coroutines (oh my!): Asynchronous Programming Patter...
Callbacks, Promises, and Coroutines (oh my!): Asynchronous Programming Patter...Callbacks, Promises, and Coroutines (oh my!): Asynchronous Programming Patter...
Callbacks, Promises, and Coroutines (oh my!): Asynchronous Programming Patter...Domenic Denicola
 
Orsiso
OrsisoOrsiso
Orsisoe27
 
jQuery for Beginners
jQuery for Beginners jQuery for Beginners
jQuery for Beginners NAILBITER
 
OO JS for AS3 Devs
OO JS for AS3 DevsOO JS for AS3 Devs
OO JS for AS3 DevsJason Hanson
 
Developer Experience i TypeScript. Najbardziej ikoniczne duo
Developer Experience i TypeScript. Najbardziej ikoniczne duoDeveloper Experience i TypeScript. Najbardziej ikoniczne duo
Developer Experience i TypeScript. Najbardziej ikoniczne duoThe Software House
 
Rich and Snappy Apps (No Scaling Required)
Rich and Snappy Apps (No Scaling Required)Rich and Snappy Apps (No Scaling Required)
Rich and Snappy Apps (No Scaling Required)Thomas Fuchs
 
Asynchronous programming done right - Node.js
Asynchronous programming done right - Node.jsAsynchronous programming done right - Node.js
Asynchronous programming done right - Node.jsPiotr Pelczar
 
The Ring programming language version 1.8 book - Part 88 of 202
The Ring programming language version 1.8 book - Part 88 of 202The Ring programming language version 1.8 book - Part 88 of 202
The Ring programming language version 1.8 book - Part 88 of 202Mahmoud Samir Fayed
 
Javascript And J Query
Javascript And J QueryJavascript And J Query
Javascript And J Queryitsarsalan
 
openFrameworks – パーティクルを動かす、静的配列と動的配列 - 多摩美メディアアートII
openFrameworks – パーティクルを動かす、静的配列と動的配列 - 多摩美メディアアートIIopenFrameworks – パーティクルを動かす、静的配列と動的配列 - 多摩美メディアアートII
openFrameworks – パーティクルを動かす、静的配列と動的配列 - 多摩美メディアアートIIAtsushi Tadokoro
 
Avinash Kundaliya: Javascript and WordPress
Avinash Kundaliya: Javascript and WordPressAvinash Kundaliya: Javascript and WordPress
Avinash Kundaliya: Javascript and WordPresswpnepal
 

Similar a Throttle and Debounce Patterns in Web Apps (20)

JVMLS 2016. Coroutines in Kotlin
JVMLS 2016. Coroutines in KotlinJVMLS 2016. Coroutines in Kotlin
JVMLS 2016. Coroutines in Kotlin
 
The Strange World of Javascript and all its little Asynchronous Beasts
The Strange World of Javascript and all its little Asynchronous BeastsThe Strange World of Javascript and all its little Asynchronous Beasts
The Strange World of Javascript and all its little Asynchronous Beasts
 
Angular promises and http
Angular promises and httpAngular promises and http
Angular promises and http
 
Understanding Asynchronous JavaScript
Understanding Asynchronous JavaScriptUnderstanding Asynchronous JavaScript
Understanding Asynchronous JavaScript
 
Promises are so passé - Tim Perry - Codemotion Milan 2016
Promises are so passé - Tim Perry - Codemotion Milan 2016Promises are so passé - Tim Perry - Codemotion Milan 2016
Promises are so passé - Tim Perry - Codemotion Milan 2016
 
Promise: async programming hero
Promise: async programming heroPromise: async programming hero
Promise: async programming hero
 
Expert JavaScript tricks of the masters
Expert JavaScript  tricks of the mastersExpert JavaScript  tricks of the masters
Expert JavaScript tricks of the masters
 
EcmaScript unchained
EcmaScript unchainedEcmaScript unchained
EcmaScript unchained
 
Callbacks, Promises, and Coroutines (oh my!): Asynchronous Programming Patter...
Callbacks, Promises, and Coroutines (oh my!): Asynchronous Programming Patter...Callbacks, Promises, and Coroutines (oh my!): Asynchronous Programming Patter...
Callbacks, Promises, and Coroutines (oh my!): Asynchronous Programming Patter...
 
Orsiso
OrsisoOrsiso
Orsiso
 
jQuery for Beginners
jQuery for Beginners jQuery for Beginners
jQuery for Beginners
 
OO JS for AS3 Devs
OO JS for AS3 DevsOO JS for AS3 Devs
OO JS for AS3 Devs
 
Developer Experience i TypeScript. Najbardziej ikoniczne duo
Developer Experience i TypeScript. Najbardziej ikoniczne duoDeveloper Experience i TypeScript. Najbardziej ikoniczne duo
Developer Experience i TypeScript. Najbardziej ikoniczne duo
 
Rich and Snappy Apps (No Scaling Required)
Rich and Snappy Apps (No Scaling Required)Rich and Snappy Apps (No Scaling Required)
Rich and Snappy Apps (No Scaling Required)
 
Of class2
Of class2Of class2
Of class2
 
Asynchronous programming done right - Node.js
Asynchronous programming done right - Node.jsAsynchronous programming done right - Node.js
Asynchronous programming done right - Node.js
 
The Ring programming language version 1.8 book - Part 88 of 202
The Ring programming language version 1.8 book - Part 88 of 202The Ring programming language version 1.8 book - Part 88 of 202
The Ring programming language version 1.8 book - Part 88 of 202
 
Javascript And J Query
Javascript And J QueryJavascript And J Query
Javascript And J Query
 
openFrameworks – パーティクルを動かす、静的配列と動的配列 - 多摩美メディアアートII
openFrameworks – パーティクルを動かす、静的配列と動的配列 - 多摩美メディアアートIIopenFrameworks – パーティクルを動かす、静的配列と動的配列 - 多摩美メディアアートII
openFrameworks – パーティクルを動かす、静的配列と動的配列 - 多摩美メディアアートII
 
Avinash Kundaliya: Javascript and WordPress
Avinash Kundaliya: Javascript and WordPressAvinash Kundaliya: Javascript and WordPress
Avinash Kundaliya: Javascript and WordPress
 

Más de Almir Filho

256 Shades of R, G and B
256 Shades of R, G and B256 Shades of R, G and B
256 Shades of R, G and BAlmir Filho
 
The Creative Developer
The Creative DeveloperThe Creative Developer
The Creative DeveloperAlmir Filho
 
Esse cara é o grunt
Esse cara é o gruntEsse cara é o grunt
Esse cara é o gruntAlmir Filho
 
CSS Layout: O ontem, o hoje e o depois
CSS Layout: O ontem, o hoje e o depoisCSS Layout: O ontem, o hoje e o depois
CSS Layout: O ontem, o hoje e o depoisAlmir Filho
 
HTML5 Sensitivo: Seu browser no plano astral
HTML5 Sensitivo: Seu browser no plano astralHTML5 Sensitivo: Seu browser no plano astral
HTML5 Sensitivo: Seu browser no plano astralAlmir Filho
 
HTML5: seu navegador não é mais o mesmo
HTML5: seu navegador não é mais o mesmoHTML5: seu navegador não é mais o mesmo
HTML5: seu navegador não é mais o mesmoAlmir Filho
 

Más de Almir Filho (7)

256 Shades of R, G and B
256 Shades of R, G and B256 Shades of R, G and B
256 Shades of R, G and B
 
The Creative Developer
The Creative DeveloperThe Creative Developer
The Creative Developer
 
Esse cara é o grunt
Esse cara é o gruntEsse cara é o grunt
Esse cara é o grunt
 
CSS Layout: O ontem, o hoje e o depois
CSS Layout: O ontem, o hoje e o depoisCSS Layout: O ontem, o hoje e o depois
CSS Layout: O ontem, o hoje e o depois
 
Web Audio Hero
Web Audio HeroWeb Audio Hero
Web Audio Hero
 
HTML5 Sensitivo: Seu browser no plano astral
HTML5 Sensitivo: Seu browser no plano astralHTML5 Sensitivo: Seu browser no plano astral
HTML5 Sensitivo: Seu browser no plano astral
 
HTML5: seu navegador não é mais o mesmo
HTML5: seu navegador não é mais o mesmoHTML5: seu navegador não é mais o mesmo
HTML5: seu navegador não é mais o mesmo
 

Último

Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionOnePlan Solutions
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...Jittipong Loespradit
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...SelfMade bd
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrainmasabamasaba
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastPapp Krisztián
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfonteinmasabamasaba
 
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With SimplicityWSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With SimplicityWSO2
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...masabamasaba
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park masabamasaba
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is insideshinachiaurasa2
 
Harnessing ChatGPT - Elevating Productivity in Today's Agile Environment
Harnessing ChatGPT  - Elevating Productivity in Today's Agile EnvironmentHarnessing ChatGPT  - Elevating Productivity in Today's Agile Environment
Harnessing ChatGPT - Elevating Productivity in Today's Agile EnvironmentVictorSzoltysek
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...masabamasaba
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park masabamasaba
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesVictorSzoltysek
 
WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?WSO2
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareJim McKeeth
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...masabamasaba
 

Último (20)

Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
 
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With SimplicityWSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
 
Harnessing ChatGPT - Elevating Productivity in Today's Agile Environment
Harnessing ChatGPT  - Elevating Productivity in Today's Agile EnvironmentHarnessing ChatGPT  - Elevating Productivity in Today's Agile Environment
Harnessing ChatGPT - Elevating Productivity in Today's Agile Environment
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
 
WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK Software
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
 

Throttle and Debounce Patterns in Web Apps