SlideShare a Scribd company logo
1 of 68
Browser Internals for
JS Devs
@alexblom
alex@isleofcode.com
Isle of Code
• Toronto based development;
• Focused on Ember, Cordova & Electron;
ember-cordova
• https://github.com/isleofcode/ember-cordova
• Managed / run by Isle of Code;
• Makes packaging hybrid apps for ember really
easy;
• When you work on hybrid, render performance &
memory management are things you have to
deal with;
A Browsers Job
• Get and present the selected resource;
• For the purpose of this talk, we are assuming
HTML;
JS / Render Engines
• Chrome uses V8 / Blink;
• Safari uses Nitro / Webkit / Webcore;
https://www.html5rocks.com/en/tutorials/internals/howbrowserswork/
Threads
• There are two threads:
• Main: Running JS, CSS Styles, layout &
painting;
• Compositor: Drawing bitmaps via GPU,
visibility, scroll;
http://dbaron.org/talks/2012-03-11-sxsw/master.xhtml
DOM Tree
• The DOM Tree has one tag per item, but does not really hold content;
• e.g.
• document
• head
• title
• body
• p
• text node
• In WebKit, the root node is Node.h
• Note that there are documents, elements & text;
Render Tree
• The Render tree is the visual part of the DOM
• e.g.
• root
• body
• div
• line 1
• line 2
• The root is the element that contains all other elems
• May contains elms that do not have any DOM information
WebCore
Representations
• RenderFlow.h;
• RenderBlock.h;
• RenderInline.h;
Parsing HTML is Hard
• It allows invalid tags and keeps going, e.g.
• Missing closing tags;
• Putting content outside of body;
• Closing tags too early;
• Unlike most parsers, it works hard on your behalf
& protects you;
Execution stops at Script
Tags
• This is why including scripts at the end of <body>
is important;
• In HTML5, you can include an async tag:
• <script src=“ember.js” async></script>
Layout
• Layout information is often cached, so on e.g.
resize events, the sizes are taken from a cache;
• Layout often involves:
1 Parent renderer determines its own width.
2 Parent goes over children and:
1 Place the child renderer (sets its x and y).
2 Calls child layout if needed–they are dirty or we are in a global layout, or
for some other reason–which calculates the child's height.
3 Parent uses children's accumulative heights and the heights of margins
and padding to set its own height–this will be used by the parent renderer's
parent.
4 Sets its dirty bit to false.
https://www.html5rocks.com/en/tutorials/internals/howbrowserswork/
Paint Order
1. Background colour;
2. Background image;
3. Border;
4. Children;
5. Outline;
https://www.html5rocks.com/en/tutorials/internals/howbrowserswork/
Tokenization Example
• <i> webu <i> would yield:
• start-tag: i;
• char-tag: w/e/b/u
• end-tag: i;
for vs while
setTimeout is best
effort
Manage Reflows
What causes Reflow?
• Resizing the browser window;
• using JavaScript methods involving computed
styles;
• adding or removing elements from the DOM; and
• changing an element's classes.
• https://developers.google.com/speed/articles/reflo
w
visibility:hidden
CSS transforms only affect the
selected element, not those around it
http://blogs.adobe.com/webplatform/2014/03/18/css-animations-and-transitions-performance/
http://blogs.adobe.com/webplatform/2014/03/18/css-animations-and-transitions-performance/
Examples
Best Practices for avoiding
Reflow
1. Avoid setting multiple inline styles; avoid setting styles individually.
2. Use class names of elements, and do so as low in the DOM tree as possible.
3. Batch your DOM changes and perform them offline;
4. Avoid computing styles too often. If you must then cache those values.
5. Apply animations with position: fixed or absolute so it doesn’t affect the layout of other elements.
6. Avoid table layouts, they trigger more reflows than block layouts because multiple passes must be made over
the elements.
7. Reduce unnecessary DOM depth. Changes at one level in the DOM tree can cause changes at every level of
the tree - all the way up to the root, and all the the way down into the children of the modified node. This leads
to more time being spent performing reflow.
8. Minimize CSS rules and remove unused CSS rules.
9. If you make complex rendering changes such as animations, do so out of the flow. Use position-absolute or
position-fixed to accomplish this.
10.Avoid unnecessary complex CSS selectors - descendant selectors in particular.
http://stage.docs.phonegap.com/tutorials/optimize/03-min-reflows/
Coalesce Changes
or
Work on a local fragment
Animation Frames
• ~15ms target;
• Taking longer will clog your thread;
• This 15ms target includes the work your browser
needs to do. Best to target ~10;
• Allows the browser to batch animation work;
Example
Measuring
Performance
Profiling
• CPU Profiler: What is taking longest to run?;
• Timeline: Rendering performance & bottlenecks;
• Timers: Measure events;
• Heap Profile: Memory, detached nodes;
• Visual: Subjective;
Examples
Memory Leaks
• Garbage Collection: 2 types:
• Young Generation & Old Generation
http://blog.isleofcode.com/the-real-reason-to-avoid-jquery/
Name closures for
better profiling
https://developer.chrome.com/devtools/docs/javascript-memory-profiling
window.performance.now
v
new Date()
node / command line
• Built in as of Node 4.4;
• add —prof tag
• node —prof foo.js
• node —prof-process isolate-* > foo.txt
Using too much memory
has negative implications
http://www-
cs.canisius.edu/~hertzm/gcmalloc-oopsla-
2005.pdf
V8
• V8 compiles JS to native code before executing
There are no steps for interpretation or bytecode;
• Compilation usually won’t happen until a function
is called;
• Compilation happens one function at a time;
• SAFARI BENCHMARKS
Compilers
• General compiler & optimization compiler
(TurboFan);
• Code runs through general compiler first;
• V8 identifies hot code for optimization;
• Code via optimization compiler runs up to 100x
faster;
• Applies to the containing function - not blocks;
Not Optimizable
• Generator functions;
• debugger;
• eval;
• with;
• __proto__;
• rest params;
• compound let/const;
• try/catch & try/finally;
Leaking or re-assigning
arguments
Leaking or re-assigning
arguments
Leaking or re-assigning
arguments
• In non-strict, V8 preserves the bindings between
arguments[0] & arg0. If you re-assign, V8 says
‘too hard’ and bails out (choses to not optimize);
• It expects arg0 & arguments[0] to have the same
hidden class;
• Using strict does not preserve bindings, meaning
the code can be optimized;
Leaking or re-assigning
arguments
Safe arguments
• arguments[n], where n is defined and not a
param;
• apply(arguments);
• arguments.length;
Not Optimizable
• Generator functions;
• debugger;
• eval;
• with;
• __proto__;
• rest params;
• compound let/const;
• try/catch & try/finally;
Isolate non optimizable code
into small functions
Hidden Classes
• Keeping track of dynamic, changing classes is
hard;
• V8 assigns hidden to represent objects;
• The first hidden class is initialized on the ‘new’
invocation (C0);
C0
• The first hidden class is initialized on the ‘new’
invocation (C0);
• The second is initialized when language is
assigned (C1);
C0
C1
• The first hidden class is initialized on the ‘new’ invocation
(C0);
• The second is initialized when language is assigned
(C1);
• The third is initialized when skill is assigned (C2);
• goodProgrammer has a class of C2;
C0
C1
C2
Class Chain
• C0 is a hidden class that is an empty object;
• C1 is based on C0, with a language property;
• C2 is based on C1, with a skill property;
• C0 -> C1 -> C2;
• Same hidden classes can be used. Both
programmers have a hidden class of C2;
C0
C1
C2
C0
Hidden Class can no longer
be re-used
• C0 -> C1 -> C2 can no longer be used for
badProgrammer. The shape of the objects are
different;
• A new hidden class is created for the extra
property, which is only attached to
badProgrammer;
• Now V8 is tracking two classes, and is unlikely to
optimize;
Order matters
• Assigning properties in different orders results in
different hidden classes;
• Consider hidden classes to be a linked list,
where the class is the last node (they are not);
Consistently having this problem is not really a
JS problem. You have a modelling problem.
Monomorphic vs
Polymorphic
• Monomorphic are hidden classes that are always
passed the same object type (e.g. String);
• V8 assumes classes are monomorphic. Passing
a different object type to the same function
requires a new hidden class to be created;
Optimize Mobile
• Payload <500kb, 1mb is often safe;
• <5k nodes, <10k in extreme circumstances;
• Coalesce network requests;
Further Reading
• https://github.com/petkaantonov/bluebird/wiki/Opt
imization-killers
• https://www.html5rocks.com/en/tutorials/internals
/howbrowserswork/
Browser Internals for
JS Devs
@alexblom
alex@isleofcode.com

More Related Content

What's hot

Organinzing Your PHP Projects (2010 Memphis PHP)
Organinzing Your PHP Projects (2010 Memphis PHP)Organinzing Your PHP Projects (2010 Memphis PHP)
Organinzing Your PHP Projects (2010 Memphis PHP)Paul Jones
 
Webpack & EcmaScript 6 (Webelement #32)
Webpack & EcmaScript 6 (Webelement #32)Webpack & EcmaScript 6 (Webelement #32)
Webpack & EcmaScript 6 (Webelement #32)srigi
 
Action-Domain-Responder: A Refinement of MVC
Action-Domain-Responder: A Refinement of MVCAction-Domain-Responder: A Refinement of MVC
Action-Domain-Responder: A Refinement of MVCPaul Jones
 
Ruby On Rails Introduction
Ruby On Rails IntroductionRuby On Rails Introduction
Ruby On Rails IntroductionThomas Fuchs
 
The Cascade, Grids, Headings, and Selectors from an OOCSS Perspective, Ajax ...
The Cascade, Grids, Headings, and Selectors from an OOCSS Perspective,  Ajax ...The Cascade, Grids, Headings, and Selectors from an OOCSS Perspective,  Ajax ...
The Cascade, Grids, Headings, and Selectors from an OOCSS Perspective, Ajax ...Nicole Sullivan
 
Ruby'izing iOS development
Ruby'izing iOS developmentRuby'izing iOS development
Ruby'izing iOS developmenttoamitkumar
 
C++ 11 Style : A Touch of Class
C++ 11 Style : A Touch of ClassC++ 11 Style : A Touch of Class
C++ 11 Style : A Touch of ClassYogendra Rampuria
 
Perl6 DBDI YAPC::EU 201008
Perl6 DBDI YAPC::EU 201008Perl6 DBDI YAPC::EU 201008
Perl6 DBDI YAPC::EU 201008Tim Bunce
 

What's hot (9)

Ruby on Rails Presentation
Ruby on Rails PresentationRuby on Rails Presentation
Ruby on Rails Presentation
 
Organinzing Your PHP Projects (2010 Memphis PHP)
Organinzing Your PHP Projects (2010 Memphis PHP)Organinzing Your PHP Projects (2010 Memphis PHP)
Organinzing Your PHP Projects (2010 Memphis PHP)
 
Webpack & EcmaScript 6 (Webelement #32)
Webpack & EcmaScript 6 (Webelement #32)Webpack & EcmaScript 6 (Webelement #32)
Webpack & EcmaScript 6 (Webelement #32)
 
Action-Domain-Responder: A Refinement of MVC
Action-Domain-Responder: A Refinement of MVCAction-Domain-Responder: A Refinement of MVC
Action-Domain-Responder: A Refinement of MVC
 
Ruby On Rails Introduction
Ruby On Rails IntroductionRuby On Rails Introduction
Ruby On Rails Introduction
 
The Cascade, Grids, Headings, and Selectors from an OOCSS Perspective, Ajax ...
The Cascade, Grids, Headings, and Selectors from an OOCSS Perspective,  Ajax ...The Cascade, Grids, Headings, and Selectors from an OOCSS Perspective,  Ajax ...
The Cascade, Grids, Headings, and Selectors from an OOCSS Perspective, Ajax ...
 
Ruby'izing iOS development
Ruby'izing iOS developmentRuby'izing iOS development
Ruby'izing iOS development
 
C++ 11 Style : A Touch of Class
C++ 11 Style : A Touch of ClassC++ 11 Style : A Touch of Class
C++ 11 Style : A Touch of Class
 
Perl6 DBDI YAPC::EU 201008
Perl6 DBDI YAPC::EU 201008Perl6 DBDI YAPC::EU 201008
Perl6 DBDI YAPC::EU 201008
 

Viewers also liked

Building Hybrid Apps with Ember
Building Hybrid Apps with EmberBuilding Hybrid Apps with Ember
Building Hybrid Apps with Emberjakecraige
 
Feedback sheet
Feedback sheet Feedback sheet
Feedback sheet downerj
 
Anjing musafir
Anjing musafirAnjing musafir
Anjing musafirRah Man
 
Virus y antivirus
Virus y antivirusVirus y antivirus
Virus y antivirusalexzjaam
 
What UX Has Taught Me
What UX Has Taught MeWhat UX Has Taught Me
What UX Has Taught MeSherif Tariq
 
R121 Difference
R121 DifferenceR121 Difference
R121 DifferenceBen Welch
 
Phonegap Day 2016: Ember/JS & Hybrid Apps Tips
Phonegap Day 2016: Ember/JS & Hybrid Apps TipsPhonegap Day 2016: Ember/JS & Hybrid Apps Tips
Phonegap Day 2016: Ember/JS & Hybrid Apps TipsAlex Blom
 
Ember Conf 2016: Building Mobile Apps with Ember
Ember Conf 2016: Building Mobile Apps with EmberEmber Conf 2016: Building Mobile Apps with Ember
Ember Conf 2016: Building Mobile Apps with EmberAlex Blom
 
Smart card technology
Smart card technologySmart card technology
Smart card technologyDeepak Raj
 
Web Payments IG // TPAC 2016
Web Payments IG // TPAC 2016Web Payments IG // TPAC 2016
Web Payments IG // TPAC 2016Interledger
 
Artificial Satellites
Artificial SatellitesArtificial Satellites
Artificial SatellitesVioletBlack11
 

Viewers also liked (16)

Building Hybrid Apps with Ember
Building Hybrid Apps with EmberBuilding Hybrid Apps with Ember
Building Hybrid Apps with Ember
 
Feedback sheet
Feedback sheet Feedback sheet
Feedback sheet
 
Mate
MateMate
Mate
 
chu de 01_ Nhóm 3
chu de 01_ Nhóm 3chu de 01_ Nhóm 3
chu de 01_ Nhóm 3
 
Anjing musafir
Anjing musafirAnjing musafir
Anjing musafir
 
Virus y antivirus
Virus y antivirusVirus y antivirus
Virus y antivirus
 
Normas apa
Normas apaNormas apa
Normas apa
 
What UX Has Taught Me
What UX Has Taught MeWhat UX Has Taught Me
What UX Has Taught Me
 
R121 Difference
R121 DifferenceR121 Difference
R121 Difference
 
Daily derivative report 10th Aug 2016
Daily derivative report 10th Aug 2016Daily derivative report 10th Aug 2016
Daily derivative report 10th Aug 2016
 
Steganography
SteganographySteganography
Steganography
 
Phonegap Day 2016: Ember/JS & Hybrid Apps Tips
Phonegap Day 2016: Ember/JS & Hybrid Apps TipsPhonegap Day 2016: Ember/JS & Hybrid Apps Tips
Phonegap Day 2016: Ember/JS & Hybrid Apps Tips
 
Ember Conf 2016: Building Mobile Apps with Ember
Ember Conf 2016: Building Mobile Apps with EmberEmber Conf 2016: Building Mobile Apps with Ember
Ember Conf 2016: Building Mobile Apps with Ember
 
Smart card technology
Smart card technologySmart card technology
Smart card technology
 
Web Payments IG // TPAC 2016
Web Payments IG // TPAC 2016Web Payments IG // TPAC 2016
Web Payments IG // TPAC 2016
 
Artificial Satellites
Artificial SatellitesArtificial Satellites
Artificial Satellites
 

Similar to Browser Internals for JS Devs: WebU Toronto 2016 by Alex Blom

Designing True Cross-Platform Apps
Designing True Cross-Platform AppsDesigning True Cross-Platform Apps
Designing True Cross-Platform AppsFITC
 
Killing the Angle Bracket
Killing the Angle BracketKilling the Angle Bracket
Killing the Angle Bracketjnewmanux
 
Best Practices for Building WordPress Applications
Best Practices for Building WordPress ApplicationsBest Practices for Building WordPress Applications
Best Practices for Building WordPress ApplicationsTaylor Lovett
 
Plain english guide to drupal 8 criticals
Plain english guide to drupal 8 criticalsPlain english guide to drupal 8 criticals
Plain english guide to drupal 8 criticalsAngela Byron
 
Orlando DNN Usergroup Pres 12/06/11
Orlando DNN Usergroup Pres 12/06/11Orlando DNN Usergroup Pres 12/06/11
Orlando DNN Usergroup Pres 12/06/11Jess Coburn
 
Getting started with Emscripten – Transpiling C / C++ to JavaScript / HTML5
Getting started with Emscripten – Transpiling C / C++ to JavaScript / HTML5Getting started with Emscripten – Transpiling C / C++ to JavaScript / HTML5
Getting started with Emscripten – Transpiling C / C++ to JavaScript / HTML5David Voyles
 
C++ on the Web: Run your big 3D game in the browser
C++ on the Web: Run your big 3D game in the browserC++ on the Web: Run your big 3D game in the browser
C++ on the Web: Run your big 3D game in the browserAndre Weissflog
 
Where Django Caching Bust at the Seams
Where Django Caching Bust at the SeamsWhere Django Caching Bust at the Seams
Where Django Caching Bust at the SeamsConcentric Sky
 
Experience with jemalloc
Experience with jemallocExperience with jemalloc
Experience with jemallocKit Chan
 
Training presentation.pptx
Training presentation.pptxTraining presentation.pptx
Training presentation.pptxNishchaiyaBayla1
 
Should you use HTML5 to build your product? The pros & cons of using current ...
Should you use HTML5 to build your product? The pros & cons of using current ...Should you use HTML5 to build your product? The pros & cons of using current ...
Should you use HTML5 to build your product? The pros & cons of using current ...boxuno
 
Web, Native iOS and Native Android with One Ember.js App
Web, Native iOS and Native Android with One Ember.js AppWeb, Native iOS and Native Android with One Ember.js App
Web, Native iOS and Native Android with One Ember.js AppFITC
 
How to Build a Bespoke Page Builder in WordPress
How to Build a Bespoke Page Builder in WordPressHow to Build a Bespoke Page Builder in WordPress
How to Build a Bespoke Page Builder in WordPressGerald Glynn
 
Smooth Animations for Web & Hybrid
Smooth Animations for Web & HybridSmooth Animations for Web & Hybrid
Smooth Animations for Web & HybridFITC
 
Web Unleashed Toronto 2015: Hybrid Mobile Apps with Ember.js
Web Unleashed Toronto 2015: Hybrid Mobile Apps with Ember.jsWeb Unleashed Toronto 2015: Hybrid Mobile Apps with Ember.js
Web Unleashed Toronto 2015: Hybrid Mobile Apps with Ember.jsAlex Blom
 
Nsc 2013 06-17 - random rants on 2013
Nsc 2013 06-17 - random rants on 2013Nsc 2013 06-17 - random rants on 2013
Nsc 2013 06-17 - random rants on 2013Mikael Svenson
 
Performant Django - Ara Anjargolian
Performant Django - Ara AnjargolianPerformant Django - Ara Anjargolian
Performant Django - Ara AnjargolianHakka Labs
 
Make Cross-platform Mobile Apps Quickly - SIGGRAPH 2014
Make Cross-platform Mobile Apps Quickly - SIGGRAPH 2014Make Cross-platform Mobile Apps Quickly - SIGGRAPH 2014
Make Cross-platform Mobile Apps Quickly - SIGGRAPH 2014Gil Irizarry
 

Similar to Browser Internals for JS Devs: WebU Toronto 2016 by Alex Blom (20)

Designing True Cross-Platform Apps
Designing True Cross-Platform AppsDesigning True Cross-Platform Apps
Designing True Cross-Platform Apps
 
Killing the Angle Bracket
Killing the Angle BracketKilling the Angle Bracket
Killing the Angle Bracket
 
Best Practices for Building WordPress Applications
Best Practices for Building WordPress ApplicationsBest Practices for Building WordPress Applications
Best Practices for Building WordPress Applications
 
Plain english guide to drupal 8 criticals
Plain english guide to drupal 8 criticalsPlain english guide to drupal 8 criticals
Plain english guide to drupal 8 criticals
 
Orlando DNN Usergroup Pres 12/06/11
Orlando DNN Usergroup Pres 12/06/11Orlando DNN Usergroup Pres 12/06/11
Orlando DNN Usergroup Pres 12/06/11
 
Getting started with Emscripten – Transpiling C / C++ to JavaScript / HTML5
Getting started with Emscripten – Transpiling C / C++ to JavaScript / HTML5Getting started with Emscripten – Transpiling C / C++ to JavaScript / HTML5
Getting started with Emscripten – Transpiling C / C++ to JavaScript / HTML5
 
C++ on the Web: Run your big 3D game in the browser
C++ on the Web: Run your big 3D game in the browserC++ on the Web: Run your big 3D game in the browser
C++ on the Web: Run your big 3D game in the browser
 
Where Django Caching Bust at the Seams
Where Django Caching Bust at the SeamsWhere Django Caching Bust at the Seams
Where Django Caching Bust at the Seams
 
Experience with jemalloc
Experience with jemallocExperience with jemalloc
Experience with jemalloc
 
Training presentation.pptx
Training presentation.pptxTraining presentation.pptx
Training presentation.pptx
 
Should you use HTML5 to build your product? The pros & cons of using current ...
Should you use HTML5 to build your product? The pros & cons of using current ...Should you use HTML5 to build your product? The pros & cons of using current ...
Should you use HTML5 to build your product? The pros & cons of using current ...
 
Web, Native iOS and Native Android with One Ember.js App
Web, Native iOS and Native Android with One Ember.js AppWeb, Native iOS and Native Android with One Ember.js App
Web, Native iOS and Native Android with One Ember.js App
 
How to Build a Bespoke Page Builder in WordPress
How to Build a Bespoke Page Builder in WordPressHow to Build a Bespoke Page Builder in WordPress
How to Build a Bespoke Page Builder in WordPress
 
Apache Drill (ver. 0.2)
Apache Drill (ver. 0.2)Apache Drill (ver. 0.2)
Apache Drill (ver. 0.2)
 
Smooth Animations for Web & Hybrid
Smooth Animations for Web & HybridSmooth Animations for Web & Hybrid
Smooth Animations for Web & Hybrid
 
Web Unleashed Toronto 2015: Hybrid Mobile Apps with Ember.js
Web Unleashed Toronto 2015: Hybrid Mobile Apps with Ember.jsWeb Unleashed Toronto 2015: Hybrid Mobile Apps with Ember.js
Web Unleashed Toronto 2015: Hybrid Mobile Apps with Ember.js
 
Nsc 2013 06-17 - random rants on 2013
Nsc 2013 06-17 - random rants on 2013Nsc 2013 06-17 - random rants on 2013
Nsc 2013 06-17 - random rants on 2013
 
Angular js
Angular jsAngular js
Angular js
 
Performant Django - Ara Anjargolian
Performant Django - Ara AnjargolianPerformant Django - Ara Anjargolian
Performant Django - Ara Anjargolian
 
Make Cross-platform Mobile Apps Quickly - SIGGRAPH 2014
Make Cross-platform Mobile Apps Quickly - SIGGRAPH 2014Make Cross-platform Mobile Apps Quickly - SIGGRAPH 2014
Make Cross-platform Mobile Apps Quickly - SIGGRAPH 2014
 

More from Alex Blom

PG Day Us: Animations for Web & Hybrid
PG Day Us: Animations for Web & HybridPG Day Us: Animations for Web & Hybrid
PG Day Us: Animations for Web & HybridAlex Blom
 
PhoneGap Day EU 2017: Hybrid Ember Apps
PhoneGap Day EU 2017: Hybrid Ember AppsPhoneGap Day EU 2017: Hybrid Ember Apps
PhoneGap Day EU 2017: Hybrid Ember AppsAlex Blom
 
Building Browser Extensions with Ember
Building Browser Extensions with EmberBuilding Browser Extensions with Ember
Building Browser Extensions with EmberAlex Blom
 
Build email apps with morse.io
Build email apps with morse.ioBuild email apps with morse.io
Build email apps with morse.ioAlex Blom
 
Innovation Growth Strategies for Small Business
Innovation Growth Strategies for Small BusinessInnovation Growth Strategies for Small Business
Innovation Growth Strategies for Small BusinessAlex Blom
 
Freelance Camp Toronto: How to sell to Enterprise by Dr Cindy Gordon
Freelance Camp Toronto: How to sell to Enterprise by Dr Cindy GordonFreelance Camp Toronto: How to sell to Enterprise by Dr Cindy Gordon
Freelance Camp Toronto: How to sell to Enterprise by Dr Cindy GordonAlex Blom
 
Freelance Camp Toronto: Social is not new and the 7 biggest social mistakes
Freelance Camp Toronto: Social is not new and the 7 biggest social mistakesFreelance Camp Toronto: Social is not new and the 7 biggest social mistakes
Freelance Camp Toronto: Social is not new and the 7 biggest social mistakesAlex Blom
 
Ryerson 6th August
Ryerson 6th AugustRyerson 6th August
Ryerson 6th AugustAlex Blom
 

More from Alex Blom (8)

PG Day Us: Animations for Web & Hybrid
PG Day Us: Animations for Web & HybridPG Day Us: Animations for Web & Hybrid
PG Day Us: Animations for Web & Hybrid
 
PhoneGap Day EU 2017: Hybrid Ember Apps
PhoneGap Day EU 2017: Hybrid Ember AppsPhoneGap Day EU 2017: Hybrid Ember Apps
PhoneGap Day EU 2017: Hybrid Ember Apps
 
Building Browser Extensions with Ember
Building Browser Extensions with EmberBuilding Browser Extensions with Ember
Building Browser Extensions with Ember
 
Build email apps with morse.io
Build email apps with morse.ioBuild email apps with morse.io
Build email apps with morse.io
 
Innovation Growth Strategies for Small Business
Innovation Growth Strategies for Small BusinessInnovation Growth Strategies for Small Business
Innovation Growth Strategies for Small Business
 
Freelance Camp Toronto: How to sell to Enterprise by Dr Cindy Gordon
Freelance Camp Toronto: How to sell to Enterprise by Dr Cindy GordonFreelance Camp Toronto: How to sell to Enterprise by Dr Cindy Gordon
Freelance Camp Toronto: How to sell to Enterprise by Dr Cindy Gordon
 
Freelance Camp Toronto: Social is not new and the 7 biggest social mistakes
Freelance Camp Toronto: Social is not new and the 7 biggest social mistakesFreelance Camp Toronto: Social is not new and the 7 biggest social mistakes
Freelance Camp Toronto: Social is not new and the 7 biggest social mistakes
 
Ryerson 6th August
Ryerson 6th AugustRyerson 6th August
Ryerson 6th August
 

Recently uploaded

Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Natan Silnitsky
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...OnePlan Solutions
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureDinusha Kumarasiri
 
Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprisepreethippts
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEEVICTOR MAESTRE RAMIREZ
 
Xen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdfXen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdfStefano Stabellini
 
How to Track Employee Performance A Comprehensive Guide.pdf
How to Track Employee Performance A Comprehensive Guide.pdfHow to Track Employee Performance A Comprehensive Guide.pdf
How to Track Employee Performance A Comprehensive Guide.pdfLivetecs LLC
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...OnePlan Solutions
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Andreas Granig
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanyChristoph Pohl
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Angel Borroy López
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsAhmed Mohamed
 
Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Mater
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样umasea
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Velvetech LLC
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEOrtus Solutions, Corp
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmSujith Sukumaran
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Matt Ray
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesŁukasz Chruściel
 

Recently uploaded (20)

Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with Azure
 
Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprise
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEE
 
Xen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdfXen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdf
 
How to Track Employee Performance A Comprehensive Guide.pdf
How to Track Employee Performance A Comprehensive Guide.pdfHow to Track Employee Performance A Comprehensive Guide.pdf
How to Track Employee Performance A Comprehensive Guide.pdf
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML Diagrams
 
Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...
 
2.pdf Ejercicios de programación competitiva
2.pdf Ejercicios de programación competitiva2.pdf Ejercicios de programación competitiva
2.pdf Ejercicios de programación competitiva
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalm
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New Features
 

Browser Internals for JS Devs: WebU Toronto 2016 by Alex Blom

Editor's Notes

  1. If other messages are in the queue, it is likely to be delayed.
  2. Example is a transition of height from 100px to 200px of a div; orange items are harder, blue items are fast;
  3. Using an accelerated property