Putting Performance Best Practices Together for a SPA
-
Upload
chris-love -
Category
Technology
-
view
1.658 -
download
0
Transcript of Putting Performance Best Practices Together for a SPA
Putting Performance Best
Practices Together to Create the
Perfect SPA
Chris Love
@ChrisLove
Love2Dev.com
Who Am I
• ASP.NET MVP• ASP Insider• Internet Explorer User Agent• Author• Speaker• Tweaker, Lover of Web, JavaScript, CSS & HTML5• @ChrisLove• Love2Dev.com
High Performance Single Page Web Applications
• Responsive Design• Touch• Mobile First• SPA• Extensible, Scalable Architecture• Web Build and Workflow• Goes Really Fast!
• ~395 Pages• 20 Chapters• $9.99 http://amzn.to/1a55L89
BUY NOW!
Slide Deck & Source Code
• Slide Deck – http://slideshare.net/docluv• Source Code – http://github.com/docluv
Let Me Take You On A Journey
The jQueryUI Dialog
The jQueryUI Dialog Markup
The jQueryUI Dialog Markup
My First Big SPA Experience
0 to 400 Views
Modular & Extensible
4 Months
Nothing To Reference
Lessons Learned
Can’t Load Everything At Once
Mobile Matters
Test Over Sprint 3G
Let’s Call it A Single Page Application
A SPA Is All InclusiveViews/
Pages
CSS/Styles
JavaScriptJS
A SPA Leverages
AJAX/Sockets
Storage
Hash Fragment
#
Mobile Browsers
Aggressively Purge Cache
Weaker Processors
Less Memory
Cellular Connections
Slower
More Expensive
Unreliable
The Web Is Obese
99 Files Requests –
2+MB
18 JavaScript Files -
318KB
6.4 CSS Files – 61KB
53 Images – 1.3MB
38 TCP Connections
17 Domains
46% Cacheable
http://httpArchive.org
Cant Use Fast Food Frameworks
Cant Use Fast Food Frameworks
Dump jQuery & What it means
• Faster Load Times
• Master DOM APIs
• Alternatives
• Create DollarBill
• Learn to be Modular
• And Yes This Was
Painful
• But Was A Great
Experience
Fast Food Frameworks Are Bad
Full of Fat
Loaded With Preservatives
Syntactic Sugar
MicroJS Libraries
Small
Promote Modular Architecture
Single Focus
•Performance•Modularity•Small Footprint•Scalability•Maintainability•Long Lifespan
Arch
itectu
re G
oals
The Modern Web Hour Glass
HTML5JavaScriptCSS3
ASP.NET/IISExpress/Node
DB – SQL Server/ NoSQL
Application Loading Process
The 1st Time a User Visits They ‘Install’ the Application
•The Initial Request•Contains Critical Path Assets•Master Layout HTML + CSS Inline• Initial Possible Views• Initial View’s CSS• Core Application JavaScript + Initial View’s Controllers
Application Loading Process
•Deferred Request(s)•Contains Additional View HTML, CSS and JavaScript
Application Loading Process
SPA
PARTS
Routing
Caching
Data
Rendering
API
We b A p p l i c a t i o n
A J A X
S PA
C A C H E
D ATA A P P
V I E WV I E WV I E WV I E WV I E WC o n t r o l l e r
V i e w E n g i n e
Te m p l a t e E n g i n e
Markup Management
•Keep the DOM Lean•Leverage Browser Storage to Persist Markup• http://bit.ly/H2qhZ2
View Engine – Cache Markup
•Parses Markup For Views & Templates•Stores All Markup Related Concerns in Storage•Retrieves View Markup On Demand•Abstracts Templating or Binding Library
View Engine – Lazy Loading
•Reduces Initial Load•Enables 14kb Goal•View Engine Still Parses Markup & Caches•Also caches and injects CSS & Script References
Cutting the Mustard
• Feature Detection• Do Not Code to
Legacy Browsers• DO NOT USE Polyfils• Also Helps With SEO• Google’s Specification
for AJAX Applications• http://bit.ly/117sTgL
Above the Fold
• Determine Possible Initial Views• Usually 5-10 Views• Accessible from Initial
View Within 1 Click• Critical Task to Achieve 14kb
Initial Payload
Above the Fold
Data Management
• Cache Data in Storage• Assign Time To Live Value to
All Data• Eliminate Redundant HTTP
Requests• The Fastest HTTP Request is
the one you don’t make
Caching Data
• jQuery AJAX Pre-Filter• http://bit.ly/117p7E9
• Intercept AJAX GET Requests• Determine if Data is
Cached
Caching Data
Data Requested
Is In Cache?
Yes
No
Return Data
Make AJAX Request
Cache DataReturn Data
Responsive Images
Custom Fonts
• http://fontello.com/• Create Custom Font from
various Icon Fonts
Common Web Perf Best Practices
• Bundle & Minify• CSS @ Top• Scripts @ Bottom• Async• Use CDN• Optimize Images• HTTP Caching• Shard Assets, but not too much
Questions