SlideShare ist ein Scribd-Unternehmen logo
1 von 141
Downloaden Sie, um offline zu lesen
Performanceā€Ø
as User Experience
Aaron Gustafson
@AaronGustafson
slideshare.net/AaronGustafson
/dəĖˆzÄ«n/
JEFF VEEN
ā€œIā€™ve been amazed at how often those
outside the discipline of design assume
that what designers do is decorationā€”
likely because so much bad designā€Ø
simply is decoration. Good design isnā€™t.ā€Ø
Good design is problem solving.ā€
/ĖˆfrikSH(ə)n/
PERFORMANCE AS USER EXPERIENCE
Hallmarks of Good UX
ą¹ Streamlined flow
ą¹ Clear, concise copy
ą¹ Low cognitive load
ą¹ Fast performance
5
Poor performanceā€Ø
is friction
Source: eMarketer
A 1s delay in pageā€Ø
load can reduceā€Ø
conversions by 7%
Source: Kissmetrics
For an online shop earning
$100k/day, thatā€™s about
$2.5m in lost sales
Source: Kissmetrics
For Amazon, 1s is worthā€Ø
about $1.6b in sales
Source: HubSpot
Source: eMarketer
53% abandonā€Ø
websites that takeā€Ø
more than 3s to load
Source: Google
By shaving 7s off load,
Edmunds increasedā€Ø
page views by 17%ā€Ø
& ad revenue by 3%
Source: HubSpot
Mozilla reduced page load
by 2.2s and saw a 15.4%
increase in downloads
Source: HubSpot
Performanceā€Ø
matters
PERFORMANCE AS USER EXPERIENCE
What we were looking for
ą¹ Usable pages are delivered in 10kB or less
ą¹ Pages are accessible via screen readers, the keyboard, etc.
ą¹ Entries follow the philosophy of progressive enhancement
ą¹ Users can do what they need to without JavaScript
18
/dĆ“É”ĖˆfoĶžodiNG/
Letā€™s talk (briefly)ā€Ø
about page load
time
Your Device The Web
Where can I find a-k-apart.com?
DNS Lookup
Ā Icons by Mahmure Alp
time
Your Device The Web
Where can I find a-k-apart.com?
Itā€™s at 40.77.56.174
DNS Lookup
Ā Icons by Mahmure Alp
time
Your Device The Web
Where can I find a-k-apart.com?
Itā€™s at 40.77.56.174
TCP Handshake
Hello 40.77.56.174
Ā Icons by Mahmure Alp
time
Your Device The Web
Where can I find a-k-apart.com?
Itā€™s at 40.77.56.174
TCP Handshake
Hello 40.77.56.174
Howdy!
Ā Icons by Mahmure Alp
time
Your Device The Web
Where can I find a-k-apart.com?
Itā€™s at 40.77.56.174
Request
Hello 40.77.56.174
Howdy!
Iā€™d like /index.html
Ā Icons by Mahmure Alp
time
Your Device The Web
Where can I find a-k-apart.com?
Itā€™s at 40.77.56.174
Server Processing
Hello 40.77.56.174
Howdy!
Iā€™d like /index.html
Ā Icons by Mahmure Alp
time
Your Device The Web
Where can I find a-k-apart.com?
Itā€™s at 40.77.56.174
Response
Hello 40.77.56.174
Howdy!
Iā€™d like /index.html
Ok, here it is.
Ā Icons by Mahmure Alp
Ā Icons by Mahmure Alp
Ā Icons by Mahmure Alp
Response
Load
Paint
Layout
RenderTree
CSS
DOM
Ā Icons by Mahmure Alp
Response
Load
Paint
Layout
RenderTree
CSS
DOM
CSS & JavaScript can
delay rendering or cause
these to be run again
PERFORMANCE AS USER EXPERIENCE
DOM Parsing
<html>	
	<head>	
		<title>Silly	example</title>		
		<script	src="head.js"></script>	
		<link	rel="stylesheet"	href="main.css">	
		<style>h2	{	font-wight:	bold;	}</style>	
		<script>console.log('hi');</script>	
	</head>	
	<body>	
				<img	src="my.png"	alt="">	
				<script	src="body.js"></script>	
	</body>	
</html>	
wait while the browserā€Ø
fetches & parses the script
PERFORMANCE AS USER EXPERIENCE
DOM Parsing
<html>	
	<head>	
		<title>Silly	example</title>		
		<script	src="head.js"></script>	
		<link	rel="stylesheet"	href="main.css">	
		<style>h2	{	font-wight:	bold;	}</style>	
		<script>console.log('hi');</script>	
	</head>	
	<body>	
				<img	src="my.png"	alt="">	
				<script	src="body.js"></script>	
	</body>	
</html>	
wait while the browserā€Ø
fetches & parses the CSS
PERFORMANCE AS USER EXPERIENCE
DOM Parsing
<html>	
	<head>	
		<title>Silly	example</title>	
		<script	src="head.js"></script>	
		<link	rel="stylesheet"	href="main.css">	
		<style>h2	{	font-wight:	bold;	}</style>	
		<script>console.log('hi');</script>	
	</head>	
	<body>	
				<img	src="my.png"	alt="">	
				<script	src="body.js"></script>	
	</body>	
</html>	
kicks off downloadingā€Ø
the image
PERFORMANCE AS USER EXPERIENCE
DOM Parsing
<html>	
	<head>	
		<title>Silly	example</title>		
		<script	src="head.js"></script>	
		<link	rel="stylesheet"	href="main.css">	
		<style>h2	{	font-wight:	bold;	}</style>	
		<script>console.log('hi');</script>	
	</head>	
	<body>	
				<img	src="my.png"	alt="">	
				<script	src="body.js"></script>	
	</body>	
</html>	 wait while the browserā€Ø
fetches & parses the script
PERFORMANCE AS USER EXPERIENCE
Steps for better performance
1. Use native features whenever possible
2. Only include assets you actually need
3. Optimize everything
4. Think about when you load assets
5. Consider how you load assets
6. Only load assets when they add value
43
Step 1:ā€Ø
Use native featuresā€Ø
whenever possible
(theyā€™re effectively free)
PERFORMANCE AS USER EXPERIENCE
Por exemplo
<header>	
		Header	contentā€¦	
</header> not only shorter thanā€Ø
<div id=ā€œheader">, butā€Ø
semantic too
depending on its locationā€Øin the document, could alsoā€Øprovide a landmarkā€Øfor navigation
PERFORMANCE AS USER EXPERIENCE
Por exemplo
<input	id="n"	name="n"	
							required	aria-required="true"			
							autocorrect="off"ā€Ø
							autocapitalize="words"			
							placeholder="Sir	Tim	Berners	Lee"	
							autocomplete="name"	
							>
modern browsers requireā€Ø
users to enter content
browser can informā€Ø
assistive tech thatā€Ø
the ļ¬eld is required
donā€™t let the browserā€Øtry to correctā€Øsomeoneā€™s name
auto-disappearing suggestionā€Øwithout JavaScript
if the browser alreadyā€Ø
knows the userā€™s name,ā€Ø
by all means, let it ļ¬ll it in
PERFORMANCE AS USER EXPERIENCE
Por exemplo
<input	type="email"ā€Ø
							id="e"	name="e"ā€Ø
							required	aria-required="true"ā€Ø
							autocorrect="off"ā€Ø
							autocapitalize="off"ā€Ø
							autocomplete="email"ā€Ø
							placeholder="you@yourdomain.tld"ā€Ø
							>
modern browsers validateā€Ø
the email addressā€Ø
and may supply aā€Ø
custom keyboard layout
let the browser suggestā€Ø
an email address if it has one
PERFORMANCE AS USER EXPERIENCE
Por exemplo
@media	(min-width:600px)	{ā€Ø
		.layout-container	{	
				display:	flex;	
		}	
		.primary	{ā€Ø
				width:	68%;ā€Ø
		}ā€Ø
		.secondary	{ā€Ø
				width:	32%;ā€Ø
		}ā€Ø
}	
So much better than ļ¬‚oats
PERFORMANCE AS USER EXPERIENCE
Por exemplo
var	$radios	=	document.querySelectorAll(	
																'input[type=radio]'	
														);
CSS selector-basedā€Ø
DOM traversalā€Ø
without a JS library
PERFORMANCE AS USER EXPERIENCE
Por exemplo
font-family:	Georgia,	Times,ā€Ø
													"Times	New	Roman",	serif
font-family:	"Segoe	UI",	Frutiger,ā€Ø
													"Frutiger	Linotype",ā€Ø
													"Dejavu	Sans",	"Helvetica	Neue",ā€Ø
													Arial,	sans-serif;
Serif
Sans Serif
If you needā€Ø
a custom font:ā€Ø
subset, subset, subset
PERFORMANCE AS USER EXPERIENCE
Proceed with caution
Source: Bran Stein
Step 2:ā€Ø
Only include assetsā€Ø
you actually need
Great tools,
possibly overkill
PERFORMANCE AS USER EXPERIENCE
Every tool has a cost
Framework Size (Compressed)
Bootstrap 2 149 kB
Bootstrap 3 103 kB
Angular 1.4 51 kB
Ember 2.2.0 111 kB
Foundation 4 266 kB
jQuery 32 kB
UI Kit 86 kB
React 16 + React DOM 35 kB
Vue 2.4.2 20 kB
Chances are, yourā€Ø
library of choiceā€Ø
is on a CDN
time
Your Device The Web
Where can I find cdn.foo.com?
Itā€™s at 123.45.67.89
Hello 123.45.67.89
Howdy!
Iā€™d like /jquery.min.js
Ok, here it is.
Ā Icons by Mahmure Alp
time
Your Device The Web
Where can I find cdn.foo.com?
Itā€™s at 123.45.67.89
Ā Icons by Mahmure Alp
You can optimize this
PERFORMANCE AS USER EXPERIENCE
Find the server early
<link	rel="dns-prefetch"ā€Ø
						href="https://cdn.foo.com">
Drop this in theā€Ø
head of your pages
time
Your Device The Web
Where can I find cdn.foo.com?
Itā€™s at 123.45.67.89
Hello 123.45.67.89
Howdy!
Ā Icons by Mahmure Alp
You can optimize this
PERFORMANCE AS USER EXPERIENCE
Go for the handshake
<link	rel="preconnect"ā€Ø
						href="https://cdn.foo.com">
time
Your Device The Web
Iā€™d like /jquery.min.js
Ok, here it is.
Ā Icons by Mahmure Alp
You can even optimize this
PERFORMANCE AS USER EXPERIENCE
Grab that resource
<link	rel="preload"ā€Ø
						href="https://cdn.foo.com/jquery.min.js"ā€Ø
						as="script">
Helps optimize the process
PERFORMANCE AS USER EXPERIENCE
Download isnā€™t everything
Source: The Filament Group
PERFORMANCE AS USER EXPERIENCE
Download isnā€™t everything
Framework Method/function operations/s
Vanilla JS document.getElementById() 12,137,211
Dojo dojo.byId(); 5,443,343
Prototype $() 2,940,734
Ext JS Ext.get() 997,562
jQuery $() 350,557
YUI YAHOO.util.Dom.get() 326,534
MooTools document.id() 78,802
Source: VanillaJS
100% library free
PERFORMANCE AS USER EXPERIENCE
We used some hints though
<link	rel="preconnect"ā€Ø
						href="//10kapart.blob.core.windows.net">	
<link	rel="preconnect"ā€Ø
						href="//cdnjs.cloudflare.com">	
<link	rel="preconnect"ā€Ø
						href="//www.google-analytics.com">
Step 3:ā€Ø
Optimize
everything
PERFORMANCE AS USER EXPERIENCE
Our approach to CSS (Gulp)
1. Write modular CSS in Sass (+ Breakup for MQ management)
2. Compile CSS with a precision of 4 decimal places (gulp-sass)
3. Fallbacks for the last 2 browser versions (gulp-autoprefixer)
4. CSS shorthand declarations if possible (gulp-shorthand)
5. Remove any unused declarations/rule sets (gulp-uncss)
6. Optimize the files (gulp-csso)
7. Minify (gulp-clean-css)
8. Gzip (gulp-zopfli)
9. Brotli (gulp-brotli)
71
PERFORMANCE AS USER EXPERIENCE
Before
PERFORMANCE AS USER EXPERIENCE
After
PERFORMANCE AS USER EXPERIENCE
After
everyone elseā€Ø
8 kB
browsers that supportā€Ø
brotli compressionā€Ø
2 kB
browsers that supportā€Øgzip compressionā€Ø3 kB
PERFORMANCE AS USER EXPERIENCE
Our approach to JS (Gulp)
1. Write modular JavaScript, grouped as appropriate
2. Combine files based on folder structure (gulp-folders, gulp-concat)
3. Create an wrapping closure to isolate from other JS (gulp-insert)
4. Minify (gulp-uglify)
5. Gzip (gulp-zopfli)
6. Brotli (gulp-brotli)
74
PERFORMANCE AS USER EXPERIENCE
Results
about 8 kB all-up
4 kB
1 kB
2 kB
PERFORMANCE AS USER EXPERIENCE
Interesting side note
indexes last
indexes ļ¬rst
We also minifiedā€Ø
& pre-compressedā€Ø
our HTML
Step 4:ā€Ø
Think about whenā€Ø
you load assets
PERFORMANCE AS USER EXPERIENCE
We had 10 JS files
ą¹ Global
ā€£ main.js - the siteā€™s library
ā€£ serviceworker.js - The siteā€™s service worker
ą¹ Browser-specific
ā€£ html5shiv.js - local copy of the HTML5 Shiv for < IE9
79
PERFORMANCE AS USER EXPERIENCE
We had 10 JS files
ą¹ Page-specific
ā€£ enter.js - Entry form-related code
ā€£ form-saver.js - Used to save form entries locally until submitted
ā€£ hero.js - Runs the SVG animation on the homepage
ā€£ home.js - Handles homepage-specific tasks
ā€£ project.js - Used on project pages during voting
ā€£ update.js - Handles the winner update form
80
PERFORMANCE AS USER EXPERIENCE
Per the common wisdom
				<script	src="/j/main.min.js"></script>ā€Ø
		</body>ā€Ø
</html>
PERFORMANCE AS USER EXPERIENCE
No need to run immediately
				<script	src="/j/main.min.js"></script>ā€Ø
				<script	src="/j/home.min.js"ā€Ø
												deferā€Ø
												></script>ā€Ø
		</body>ā€Ø
</html>
run after the DOM is loaded
PERFORMANCE AS USER EXPERIENCE
Run whenever you can
				<script	src="/j/main.min.js"></script>ā€Ø
				<script	src="/j/home.min.js"ā€Ø
												asyncā€Ø
												></script>ā€Ø
		</body>ā€Ø
</html>
run whenever it becomesā€Ø
available, but donā€™tā€Ø
delay page load
PERFORMANCE AS USER EXPERIENCE
Consider dependencies
<script	src="/j/main.min.js"></script>ā€Ø
<script	src="/j/home.min.js"	async></script>
PERFORMANCE AS USER EXPERIENCE
Consider dependencies
<script	src="/j/main.min.js"	async></script>ā€Ø
<script	src="/j/home.min.js"	async></script>
what if this calls a functionā€Ø
in main.min.js?
ā€œrace conditionā€
PERFORMANCE AS USER EXPERIENCE
Avoid race conditions
<script	src="/j/main.min.js"></script>ā€Ø
<script	src="/j/home.min.js"	async></script>
Why so manyā€Ø
separate files?
PERFORMANCE AS USER EXPERIENCE
Connections in HTTP/1.1
Browser Per host Overall
IE 9 6 35
IE 10 8 17
IE 11 13 17
Firefox 4+ 6 17
Opera 11+ 6 user defined
Chrome 4+ 6 10
Safari 7+ 6 17
time
Your Device The Web
HTTP/1.1
Ā Icons by Mahmure Alp
Iā€™d like /c/main.css
Iā€™d like /j/main.min.js
Iā€™d like /i/o.svg
Iā€™d like /j/home.min.js
Iā€™d like /i/edge.svg
Iā€™d like /i/aea.svg
HTTP/2 createsā€Ø
a single connection and
contents stream in
time
Your Device The Web
HTTP/2
Ā Icons by Mahmure Alp
Iā€™d like /c/main.css
Iā€™d like /i/o.svg
Iā€™d like /i/edge.svg
Source: A List Apart
Source: A List Apart
Step 5:ā€Ø
Consider howā€Ø
you load assets
PERFORMANCE AS USER EXPERIENCE
Start simple
<link	rel="stylesheet"	href="/c/d.min.css">		
<link	rel="stylesheet"	href="/c/a.min.css"ā€Ø
						media="only	screen">		
default stylesā€Ø(all browsers)
advanced stylesā€Ø
(modern browsers)
PERFORMANCE AS USER EXPERIENCE
Fault tolerance FTW!
<link	rel="stylesheet"	href="/c/d.min.css">		
<link	rel="stylesheet"	href="/c/a.min.css"ā€Ø
						media="only	screen">		
browsers that donā€™t grokā€Ø
media queries ignore this ļ¬le
PERFORMANCE AS USER EXPERIENCE
Conditional scripting
<!--[if	lt	IE	9]>		
		<script	src="/j/html5shiv.min.js"></script>		
<![endif]-->	
delivers this scriptā€Ø
to <= IE 8
PERFORMANCE AS USER EXPERIENCE
Conditional scripting
				<!--[if	gt	IE	8]><!-->ā€Ø
						<script	src="/j/main.min.js"></script>ā€Ø
						<script	src="/j/home.min.js"	asyncā€Ø
														></script>ā€Ø
				<!--<![endif]-->ā€Ø
		</body>ā€Ø
</html>
hides scripts from <= IE8ā€Ø(no need to test!)
PERFORMANCE AS USER EXPERIENCE
Conditional imagery
PERFORMANCE AS USER EXPERIENCE
Conditional images
@media	(min-width:	36.375em)	{	
		.presented-by	[href*=microsoft]::before	{	
				background-image:	url(/i/c/edge.png);	
				background-image:	url(/i/c/edge.svg),ā€Ø
																						none;ā€Ø
				ā€¦	
		}	
}
PERFORMANCE AS USER EXPERIENCE
Conditional images
@media	(min-width:	36.375em)	{	
		.presented-by	[href*=microsoft]::before	{	
				background-image:	url(/i/c/edge.png);	
				background-image:	url(/i/c/edge.svg),ā€Ø
																						none;ā€Ø
				ā€¦	
		}	
}
PERFORMANCE AS USER EXPERIENCE
Conditional images
@media	(min-width:	36.375em)	{	
		.presented-by	[href*=microsoft]::before	{	
				background-image:	url(/i/c/edge.png);	
				background-image:	url(/i/c/edge.svg),ā€Ø
																						none;ā€Ø
				ā€¦	
		}	
}
browsers that supportā€Ømultiple backgroundsā€Øalso support SVG
PERFORMANCE AS USER EXPERIENCE
Conditional animation
PERFORMANCE AS USER EXPERIENCE
How do we get there?
JS?
No
No imageLoad
Yes
<>
SVG support?
Yes
SVG
Ajax request SVGā€Ø
Yank out script & add to document
No
picture
Save the markup forā€Ø
next page load
NoYes
Verify browser
width condition
Step 6:ā€Ø
Only load assets
when they add value
PERFORMANCE AS USER EXPERIENCE
Evaluate images case-by-case
ą¹ Does the image reiterate information found in the surrounding text?
ą¹ Is the image necessary to understand the surrounding content?
ą¹ Does the image contain text?
ą¹ Is the image a graph, chart, or table?
ą¹ Could the content of the image be presented in a different format
that would not require an image?
ą¹ Is the image purely presentational?
111
PERFORMANCE AS USER EXPERIENCE
53% of the average web page
Source: Internet Archive
PERFORMANCE AS USER EXPERIENCE
And they donā€™t always fit
Source: The Outline
If you can avoidā€Ø
using an image, do it
If you need an image,
choose the best format
PERFORMANCE AS USER EXPERIENCE
Quick format recap
ą¹ GIF
ā€£ for images with large swaths of solid colors
ā€£ Binary transparency
ą¹ JPG
ā€£ For photographs and images with gradations of color
ā€£ Can be compressed (introduces artifacts)
117
PERFORMANCE AS USER EXPERIENCE
Quick format recap
ą¹ PNG (8-Bit)
ā€£ Alternative to GIF
ā€£ Can support alpha transparency (with the right creation software)
ą¹ PNG (24-bit)
ā€£ Alternative to JPG
ā€£ Usually larger than JPGs
ā€£ Supports alpha tranparency
118
PERFORMANCE AS USER EXPERIENCE
Quick format recap
ą¹ WebP
ā€£ Newer format, not universally supported
ā€£ Smaller than JPGs and 24-bit PNGs
ā€£ Support alpha transparency
ā€£ and so much moreā€¦
119
Sometimes imagesā€Ø
are ā€œnice to haveā€
thatā€™s 29 kB of images
PERFORMANCE AS USER EXPERIENCE
How it works
<li	class="gallery__item	h-card"ā€Ø
				data-img="/i/j/r.jpg||y"ā€Ø
				>	
		<a	href="https://twitter.com/rachelandrew">ā€Ø
				<b>Rachel	Andrew</b>ā€Ø
		</a>	
</li>
PERFORMANCE AS USER EXPERIENCE
How it works
<li	class="gallery__item	h-card"ā€Ø
				data-img="/i/j/r.jpg||y"ā€Ø
				>	
		<a	href="https://twitter.com/rachelandrew">ā€Ø
				<b>Rachel	Andrew</b>ā€Ø
		</a>	
</li>
image path
no alt necessary
prepend toā€Ø
this list item
PERFORMANCE AS USER EXPERIENCE
Getting CSS & JS in sync
var	$watcher	=	document.createElement('div'),	
				re	=	/['"]/g;	
$watcher.setAttribute(	'id',	'getActiveMQ-watcher'	);	
$watcher.style.display	=	'none';	
document.body.appendChild(	$watcher	);	
window.getActiveMQ	=	function()	{	
		return	window.getComputedStyle(	$watcher,	null	)	
															.getPropertyValue(	'font-family'	)	
															.replace(	re,	''	);	
};
PERFORMANCE AS USER EXPERIENCE
Getting CSS & JS in sync
#getActiveMQ-watcher	{	font-family:	global;	}	
@media	(min-width:	15em)	{	
		#getActiveMQ-watcher	{	font-family:	tiny;	}	
}	
@media	(min-width:	20em)	{	
		#getActiveMQ-watcher	{	font-family:	small;	}	
}	
@media	(min-width:	30em)	{	
		#getActiveMQ-watcher	{	font-family:	medium;	}	
}	
@media	(min-width:	40em)	{	
		#getActiveMQ-watcher	{	font-family:	large;	}	
}	
@media	(min-width:	48.75em)	{	
		#getActiveMQ-watcher	{	font-family:	larger;	}	
}	
@media	(min-width:	60em)	{	
		#getActiveMQ-watcher	{	font-family:	full;	}	
}
PERFORMANCE AS USER EXPERIENCE
Getting CSS & JS in sync
#getActiveMQ-watcher	{	font-family:	global;	}	
@media	(min-width:	15em)	{	
		#getActiveMQ-watcher	{	font-family:	tiny;	}	
}	
@media	(min-width:	20em)	{	
		#getActiveMQ-watcher	{	font-family:	small;	}	
}	
@media	(min-width:	30em)	{	
		#getActiveMQ-watcher	{	font-family:	medium;	}	
}	
@media	(min-width:	40em)	{	
		#getActiveMQ-watcher	{	font-family:	large;	}	
}	
@media	(min-width:	48.75em)	{	
		#getActiveMQ-watcher	{	font-family:	larger;	}	
}	
@media	(min-width:	60em)	{	
		#getActiveMQ-watcher	{	font-family:	full;	}	
}
PERFORMANCE AS USER EXPERIENCE
Getting CSS & JS in sync
var	$watcher	=	document.createElement('div'),	
				re	=	/['"]/g;	
$watcher.setAttribute(	'id',	'getActiveMQ-watcher'	);	
$watcher.style.display	=	'none';	
document.body.appendChild(	$watcher	);	
window.getActiveMQ	=	function()	{	
		return	window.getComputedStyle(	$watcher,	null	)	
															.getPropertyValue(	'font-family'	)	
															.replace(	re,	''	);	
};
PERFORMANCE AS USER EXPERIENCE
Getting CSS & JS in sync
var	MQ	=	getActiveMQ();	
if	(	MQ	==	'larger'	||	MQ	==	'full'	)	{	
		lazyLoadImages();	
}
PERFORMANCE AS USER EXPERIENCE
How it works
<li	class="gallery__item	h-card"ā€Ø
				data-img="/i/j/r.jpg||y"ā€Ø
				>	
		<a	href="https://twitter.com/rachelandrew">ā€Ø
				<b>Rachel	Andrew</b>ā€Ø
		</a>	
</li>
PERFORMANCE AS USER EXPERIENCE
Indicating alternate formats
<li	class="gallery__item	h-card"ā€Ø
				data-img="/i/j/r.jpg||y"ā€Ø
				data-imaged="true"ā€Ø
				>ā€Ø
		<img	src="/i/j/r.jpg"	alt="">ā€Ø
		<a	href="https://twitter.com/rachelandrew">ā€Ø
				<b>Rachel	Andrew</b>ā€Ø
		</a>	
</li>
Oh waitā€¦
optimize everything
Source: 38 kB JPG
B&W: 35 kB JPG (-7%)
Crop & Resize: 12 kB JPG (-68%)
Blur & optimize: 9 kB JPG (-76%)
blurred everythingā€Ø
but their faces
WebP: 4 kB (-89%)JPG: 9 kB (-76%)
!ā€Ø
Not every browserā€Ø
supports WebP
PERFORMANCE AS USER EXPERIENCE
Indicating alternate formats
<picture>	
		<source	type="image/webp"	srcset="my.webp">ā€Ø
		<img	src="my.jpg"	alt="Alt	text	goes	here">	
</picture>
first choice ifā€ØWebP is supported fallback imageā€Ø
if it isnā€™t
PERFORMANCE AS USER EXPERIENCE
Indicating alternate formats
<picture>	
		<source	type="image/svg+xml"ā€Ø
										srcset="my.svg">	
		<source	type="image/webp"	srcset="my.webp">ā€Ø
		<img	src="my.jpg"	alt="Alt	text	goes	here">	
</picture>
PERFORMANCE AS USER EXPERIENCE
Indicating alternate formats
<li	class="gallery__item	h-card"ā€Ø
				data-img="/i/j/r.jpg||y"ā€Ø
				data-imaged="true"ā€Ø
				>ā€Ø
		<img	src="/i/j/r.jpg"	alt="">ā€Ø
		<a	href="https://twitter.com/rachelandrew">ā€Ø
				<b>Rachel	Andrew</b>ā€Ø
		</a>	
</li>
PERFORMANCE AS USER EXPERIENCE
Indicating alternate formats
<li	class="gallery__item	h-card"ā€Ø
				data-img="/i/j/r.jpg||y"ā€Ø
				data-imaged="true"ā€Ø
				>ā€Ø
		<picture>ā€Ø
				<source	type="image/webp"ā€Ø
												srcset="/i/j/r.webp">ā€Ø
				<img	src="/i/j/r.jpg"	alt="">ā€Ø
		</picture>	
		<a	href="https://twitter.com/rachelandrew">ā€Ø
				<b>Rachel	Andrew</b>ā€Ø
		</a>	
</li>
PERFORMANCE AS USER EXPERIENCE
Steps for better performance
1. Use native features whenever possible
2. Only include assets you actually need
3. Optimize everything
4. Think about when you load assets
5. Consider how you load assets
6. Only load assets when they add value
146
Every choice weā€Ø
make affects ourā€Ø
usersā€™ experiences
Letā€™s spend our time toā€Ø
save it for our users
Speedy performance isā€Ø
a great user experience
Thank you!
@AaronGustafson
aaron-gustafson.com	
slideshare.net/AaronGustafson

Weitere Ƥhnliche Inhalte

Was ist angesagt?

Bruce Lawson: Progressive Web Apps: the future of Apps
Bruce Lawson: Progressive Web Apps: the future of AppsBruce Lawson: Progressive Web Apps: the future of Apps
Bruce Lawson: Progressive Web Apps: the future of Appsbrucelawson
Ā 
Extreme Web Performance for Mobile Devices - Velocity NY
Extreme Web Performance for Mobile Devices - Velocity NYExtreme Web Performance for Mobile Devices - Velocity NY
Extreme Web Performance for Mobile Devices - Velocity NYMaximiliano Firtman
Ā 
Template tuning for high performance
Template tuning for high performanceTemplate tuning for high performance
Template tuning for high performanceChris Davenport
Ā 
High Performance Web Design
High Performance Web DesignHigh Performance Web Design
High Performance Web DesignKoji Ishimoto
Ā 
Belgrade when its just too slow
Belgrade when its just too slowBelgrade when its just too slow
Belgrade when its just too slowDoug Sillars
Ā 
Using Wireframes
Using WireframesUsing Wireframes
Using WireframesMark Calkins
Ā 
Seven deadly theming sins
Seven deadly theming sinsSeven deadly theming sins
Seven deadly theming sinsGeorge Stephanis
Ā 
More Than You Ever Wanted to Know About Resource Hints - Harry Roberts (CSS W...
More Than You Ever Wanted to Know About Resource Hints - Harry Roberts (CSS W...More Than You Ever Wanted to Know About Resource Hints - Harry Roberts (CSS W...
More Than You Ever Wanted to Know About Resource Hints - Harry Roberts (CSS W...Shift Conference
Ā 
Front end performance tip
Front end performance tipFront end performance tip
Front end performance tipSteve Yu
Ā 
Optimizing wp
Optimizing wpOptimizing wp
Optimizing wpMark Kelnar
Ā 
Front end performance optimization
Front end performance optimizationFront end performance optimization
Front end performance optimizationStevie T
Ā 
Nl when its just too slow
Nl when its just too slowNl when its just too slow
Nl when its just too slowDoug Sillars
Ā 
Performance Best Practices - Part 1 - Client Side [JS, CSS, HTML, jQuery]
Performance Best Practices - Part 1 - Client Side [JS, CSS, HTML, jQuery]Performance Best Practices - Part 1 - Client Side [JS, CSS, HTML, jQuery]
Performance Best Practices - Part 1 - Client Side [JS, CSS, HTML, jQuery]Mindfire Solutions
Ā 
Responsive Responsive Design
Responsive Responsive DesignResponsive Responsive Design
Responsive Responsive DesignTim Kadlec
Ā 
Modelling Web Performance Optimization - FFSUx
Modelling  Web Performance Optimization - FFSUxModelling  Web Performance Optimization - FFSUx
Modelling Web Performance Optimization - FFSUxHaribabu Nandyal Padmanaban
Ā 
Qa fest kiev_when its just too slow
Qa fest kiev_when its just too slowQa fest kiev_when its just too slow
Qa fest kiev_when its just too slowDoug Sillars
Ā 
Web Development for UX Designers
Web Development for UX DesignersWeb Development for UX Designers
Web Development for UX DesignersAshlimarie
Ā 

Was ist angesagt? (19)

Bruce Lawson: Progressive Web Apps: the future of Apps
Bruce Lawson: Progressive Web Apps: the future of AppsBruce Lawson: Progressive Web Apps: the future of Apps
Bruce Lawson: Progressive Web Apps: the future of Apps
Ā 
Extreme Web Performance for Mobile Devices - Velocity NY
Extreme Web Performance for Mobile Devices - Velocity NYExtreme Web Performance for Mobile Devices - Velocity NY
Extreme Web Performance for Mobile Devices - Velocity NY
Ā 
Template tuning for high performance
Template tuning for high performanceTemplate tuning for high performance
Template tuning for high performance
Ā 
High Performance Web Design
High Performance Web DesignHigh Performance Web Design
High Performance Web Design
Ā 
Belgrade when its just too slow
Belgrade when its just too slowBelgrade when its just too slow
Belgrade when its just too slow
Ā 
Using Wireframes
Using WireframesUsing Wireframes
Using Wireframes
Ā 
Seven deadly theming sins
Seven deadly theming sinsSeven deadly theming sins
Seven deadly theming sins
Ā 
More Than You Ever Wanted to Know About Resource Hints - Harry Roberts (CSS W...
More Than You Ever Wanted to Know About Resource Hints - Harry Roberts (CSS W...More Than You Ever Wanted to Know About Resource Hints - Harry Roberts (CSS W...
More Than You Ever Wanted to Know About Resource Hints - Harry Roberts (CSS W...
Ā 
Site optimization
Site optimizationSite optimization
Site optimization
Ā 
Front end performance tip
Front end performance tipFront end performance tip
Front end performance tip
Ā 
Optimizing wp
Optimizing wpOptimizing wp
Optimizing wp
Ā 
Front end performance optimization
Front end performance optimizationFront end performance optimization
Front end performance optimization
Ā 
Nl when its just too slow
Nl when its just too slowNl when its just too slow
Nl when its just too slow
Ā 
Performance Best Practices - Part 1 - Client Side [JS, CSS, HTML, jQuery]
Performance Best Practices - Part 1 - Client Side [JS, CSS, HTML, jQuery]Performance Best Practices - Part 1 - Client Side [JS, CSS, HTML, jQuery]
Performance Best Practices - Part 1 - Client Side [JS, CSS, HTML, jQuery]
Ā 
Front End Performance
Front End PerformanceFront End Performance
Front End Performance
Ā 
Responsive Responsive Design
Responsive Responsive DesignResponsive Responsive Design
Responsive Responsive Design
Ā 
Modelling Web Performance Optimization - FFSUx
Modelling  Web Performance Optimization - FFSUxModelling  Web Performance Optimization - FFSUx
Modelling Web Performance Optimization - FFSUx
Ā 
Qa fest kiev_when its just too slow
Qa fest kiev_when its just too slowQa fest kiev_when its just too slow
Qa fest kiev_when its just too slow
Ā 
Web Development for UX Designers
Web Development for UX DesignersWeb Development for UX Designers
Web Development for UX Designers
Ā 

Ƅhnlich wie Performance as User Experience: Optimize Assets for Speed

Ajax to the Moon
Ajax to the MoonAjax to the Moon
Ajax to the Moondavejohnson
Ā 
[convergese] Adaptive Images in Responsive Web Design
[convergese] Adaptive Images in Responsive Web Design[convergese] Adaptive Images in Responsive Web Design
[convergese] Adaptive Images in Responsive Web DesignChristopher Schmitt
Ā 
It's a Mod World - A Practical Guide to Rocking Modernizr
It's a Mod World - A Practical Guide to Rocking ModernizrIt's a Mod World - A Practical Guide to Rocking Modernizr
It's a Mod World - A Practical Guide to Rocking ModernizrMichael Enslow
Ā 
Five Pound App talk: hereit.is, Web app architecture, REST, CSS3
Five Pound App talk: hereit.is, Web app architecture, REST, CSS3Five Pound App talk: hereit.is, Web app architecture, REST, CSS3
Five Pound App talk: hereit.is, Web app architecture, REST, CSS3Jamie Matthews
Ā 
Plugins on OnDemand with Remote Apps - Atlassian Summit 2012
Plugins on OnDemand with Remote Apps - Atlassian Summit 2012 Plugins on OnDemand with Remote Apps - Atlassian Summit 2012
Plugins on OnDemand with Remote Apps - Atlassian Summit 2012 Atlassian
Ā 
Socket applications
Socket applicationsSocket applications
Socket applicationsJoĆ£o Moura
Ā 
3 Tips to Deliver Fast Performance Across Mobile Web
3 Tips to Deliver Fast Performance Across Mobile Web3 Tips to Deliver Fast Performance Across Mobile Web
3 Tips to Deliver Fast Performance Across Mobile WebDynatrace
Ā 
Faster web pages
Faster web pagesFaster web pages
Faster web pagesDavid Rodenas
Ā 
SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2...
SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2...SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2...
SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2...Alessandro Nadalin
Ā 
jAPS 2 0 - Presentation Layer Comparison
jAPS 2 0 - Presentation Layer ComparisonjAPS 2 0 - Presentation Layer Comparison
jAPS 2 0 - Presentation Layer ComparisonWilliam Ghelfi
Ā 
Testable client side_mvc_apps_in_javascript
Testable client side_mvc_apps_in_javascriptTestable client side_mvc_apps_in_javascript
Testable client side_mvc_apps_in_javascriptTimothy Oxley
Ā 
[cssdevconf] Adaptive Images in Responsive Web Design
[cssdevconf] Adaptive Images in Responsive Web Design[cssdevconf] Adaptive Images in Responsive Web Design
[cssdevconf] Adaptive Images in Responsive Web DesignChristopher Schmitt
Ā 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...tdc-globalcode
Ā 
Introduction to Client Side Dev in SharePoint Workshop
Introduction to Client Side Dev in SharePoint WorkshopIntroduction to Client Side Dev in SharePoint Workshop
Introduction to Client Side Dev in SharePoint WorkshopMark Rackley
Ā 
Developing High Performance Web Apps
Developing High Performance Web AppsDeveloping High Performance Web Apps
Developing High Performance Web AppsTimothy Fisher
Ā 
Web Performance, Scalability, and Testing Techniques - Boston PHP Meetup
Web Performance, Scalability, and Testing Techniques - Boston PHP MeetupWeb Performance, Scalability, and Testing Techniques - Boston PHP Meetup
Web Performance, Scalability, and Testing Techniques - Boston PHP MeetupJonathan Klein
Ā 
[refreshaustin] Adaptive Images in Responsive Web Design
[refreshaustin] Adaptive Images in Responsive Web Design[refreshaustin] Adaptive Images in Responsive Web Design
[refreshaustin] Adaptive Images in Responsive Web DesignChristopher Schmitt
Ā 
[HEWEBAR 2012] Adaptive Images in Responsive Web Design
[HEWEBAR 2012] Adaptive Images in Responsive Web Design[HEWEBAR 2012] Adaptive Images in Responsive Web Design
[HEWEBAR 2012] Adaptive Images in Responsive Web DesignChristopher Schmitt
Ā 

Ƅhnlich wie Performance as User Experience: Optimize Assets for Speed (20)

Ajax to the Moon
Ajax to the MoonAjax to the Moon
Ajax to the Moon
Ā 
[convergese] Adaptive Images in Responsive Web Design
[convergese] Adaptive Images in Responsive Web Design[convergese] Adaptive Images in Responsive Web Design
[convergese] Adaptive Images in Responsive Web Design
Ā 
It's a Mod World - A Practical Guide to Rocking Modernizr
It's a Mod World - A Practical Guide to Rocking ModernizrIt's a Mod World - A Practical Guide to Rocking Modernizr
It's a Mod World - A Practical Guide to Rocking Modernizr
Ā 
Five Pound App talk: hereit.is, Web app architecture, REST, CSS3
Five Pound App talk: hereit.is, Web app architecture, REST, CSS3Five Pound App talk: hereit.is, Web app architecture, REST, CSS3
Five Pound App talk: hereit.is, Web app architecture, REST, CSS3
Ā 
Plugins on OnDemand with Remote Apps - Atlassian Summit 2012
Plugins on OnDemand with Remote Apps - Atlassian Summit 2012 Plugins on OnDemand with Remote Apps - Atlassian Summit 2012
Plugins on OnDemand with Remote Apps - Atlassian Summit 2012
Ā 
Socket applications
Socket applicationsSocket applications
Socket applications
Ā 
3 Tips to Deliver Fast Performance Across Mobile Web
3 Tips to Deliver Fast Performance Across Mobile Web3 Tips to Deliver Fast Performance Across Mobile Web
3 Tips to Deliver Fast Performance Across Mobile Web
Ā 
Faster web pages
Faster web pagesFaster web pages
Faster web pages
Ā 
SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2...
SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2...SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2...
SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2...
Ā 
jAPS 2 0 - Presentation Layer Comparison
jAPS 2 0 - Presentation Layer ComparisonjAPS 2 0 - Presentation Layer Comparison
jAPS 2 0 - Presentation Layer Comparison
Ā 
Testable client side_mvc_apps_in_javascript
Testable client side_mvc_apps_in_javascriptTestable client side_mvc_apps_in_javascript
Testable client side_mvc_apps_in_javascript
Ā 
[cssdevconf] Adaptive Images in Responsive Web Design
[cssdevconf] Adaptive Images in Responsive Web Design[cssdevconf] Adaptive Images in Responsive Web Design
[cssdevconf] Adaptive Images in Responsive Web Design
Ā 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
Ā 
Introduction to Client Side Dev in SharePoint Workshop
Introduction to Client Side Dev in SharePoint WorkshopIntroduction to Client Side Dev in SharePoint Workshop
Introduction to Client Side Dev in SharePoint Workshop
Ā 
Oscon 20080724
Oscon 20080724Oscon 20080724
Oscon 20080724
Ā 
Developing High Performance Web Apps
Developing High Performance Web AppsDeveloping High Performance Web Apps
Developing High Performance Web Apps
Ā 
Microformats
MicroformatsMicroformats
Microformats
Ā 
Web Performance, Scalability, and Testing Techniques - Boston PHP Meetup
Web Performance, Scalability, and Testing Techniques - Boston PHP MeetupWeb Performance, Scalability, and Testing Techniques - Boston PHP Meetup
Web Performance, Scalability, and Testing Techniques - Boston PHP Meetup
Ā 
[refreshaustin] Adaptive Images in Responsive Web Design
[refreshaustin] Adaptive Images in Responsive Web Design[refreshaustin] Adaptive Images in Responsive Web Design
[refreshaustin] Adaptive Images in Responsive Web Design
Ā 
[HEWEBAR 2012] Adaptive Images in Responsive Web Design
[HEWEBAR 2012] Adaptive Images in Responsive Web Design[HEWEBAR 2012] Adaptive Images in Responsive Web Design
[HEWEBAR 2012] Adaptive Images in Responsive Web Design
Ā 

Mehr von Aaron Gustafson

Delivering Critical Information and Services [JavaScript & Friends 2021]
Delivering Critical Information and Services [JavaScript & Friends 2021]Delivering Critical Information and Services [JavaScript & Friends 2021]
Delivering Critical Information and Services [JavaScript & Friends 2021]Aaron Gustafson
Ā 
Adapting to Reality [Guest Lecture, March 2021]
Adapting to Reality [Guest Lecture, March 2021]Adapting to Reality [Guest Lecture, March 2021]
Adapting to Reality [Guest Lecture, March 2021]Aaron Gustafson
Ā 
Designing the Conversation [Beyond Tellerrand 2019]
Designing the Conversation [Beyond Tellerrand 2019]Designing the Conversation [Beyond Tellerrand 2019]
Designing the Conversation [Beyond Tellerrand 2019]Aaron Gustafson
Ā 
Getting Started with Progressive Web Apps [Beyond Tellerrand 2019]
Getting Started with Progressive Web Apps [Beyond Tellerrand 2019]Getting Started with Progressive Web Apps [Beyond Tellerrand 2019]
Getting Started with Progressive Web Apps [Beyond Tellerrand 2019]Aaron Gustafson
Ā 
Progressive Web Apps: Where Do I Begin?
Progressive Web Apps: Where Do I Begin?Progressive Web Apps: Where Do I Begin?
Progressive Web Apps: Where Do I Begin?Aaron Gustafson
Ā 
Media in the Age of PWAs [ImageCon 2019]
Media in the Age of PWAs [ImageCon 2019]Media in the Age of PWAs [ImageCon 2019]
Media in the Age of PWAs [ImageCon 2019]Aaron Gustafson
Ā 
Adapting to Reality [Starbucks Lunch & Learn]
Adapting to Reality [Starbucks Lunch & Learn]Adapting to Reality [Starbucks Lunch & Learn]
Adapting to Reality [Starbucks Lunch & Learn]Aaron Gustafson
Ā 
Conversational Semantics for the Web [CascadiaJS 2018]
Conversational Semantics for the Web [CascadiaJS 2018]Conversational Semantics for the Web [CascadiaJS 2018]
Conversational Semantics for the Web [CascadiaJS 2018]Aaron Gustafson
Ā 
PWA: Where Do I Begin? [Microsoft Ignite 2018]
PWA: Where Do I Begin? [Microsoft Ignite 2018]PWA: Where Do I Begin? [Microsoft Ignite 2018]
PWA: Where Do I Begin? [Microsoft Ignite 2018]Aaron Gustafson
Ā 
Designing the Conversation [Concatenate 2018]
Designing the Conversation [Concatenate 2018]Designing the Conversation [Concatenate 2018]
Designing the Conversation [Concatenate 2018]Aaron Gustafson
Ā 
Designing the Conversation [Accessibility DC 2018]
Designing the Conversation [Accessibility DC 2018]Designing the Conversation [Accessibility DC 2018]
Designing the Conversation [Accessibility DC 2018]Aaron Gustafson
Ā 
The Web Should Just Work for Everyone
The Web Should Just Work for EveryoneThe Web Should Just Work for Everyone
The Web Should Just Work for EveryoneAaron Gustafson
Ā 
Performance as User Experience [AEA SEA 2018]
Performance as User Experience [AEA SEA 2018]Performance as User Experience [AEA SEA 2018]
Performance as User Experience [AEA SEA 2018]Aaron Gustafson
Ā 
Advanced Design Methods 1, Day 2
Advanced Design Methods 1, Day 2Advanced Design Methods 1, Day 2
Advanced Design Methods 1, Day 2Aaron Gustafson
Ā 
Advanced Design Methods 1, Day 1
Advanced Design Methods 1, Day 1Advanced Design Methods 1, Day 1
Advanced Design Methods 1, Day 1Aaron Gustafson
Ā 
Designing the Conversation [Paris Web 2017]
Designing the Conversation [Paris Web 2017]Designing the Conversation [Paris Web 2017]
Designing the Conversation [Paris Web 2017]Aaron Gustafson
Ā 
Exploring Adaptive Interfaces [Generate 2017]
Exploring Adaptive Interfaces [Generate 2017]Exploring Adaptive Interfaces [Generate 2017]
Exploring Adaptive Interfaces [Generate 2017]Aaron Gustafson
Ā 
Progressive Web Apps and the Windows Ecosystem [Build 2017]
Progressive Web Apps and the Windows Ecosystem [Build 2017]Progressive Web Apps and the Windows Ecosystem [Build 2017]
Progressive Web Apps and the Windows Ecosystem [Build 2017]Aaron Gustafson
Ā 
Writing for Engagement [TechReady 22]
Writing for Engagement [TechReady 22]Writing for Engagement [TechReady 22]
Writing for Engagement [TechReady 22]Aaron Gustafson
Ā 
Designing the Conversation [SmashingConf 2016]
Designing the Conversation [SmashingConf 2016]Designing the Conversation [SmashingConf 2016]
Designing the Conversation [SmashingConf 2016]Aaron Gustafson
Ā 

Mehr von Aaron Gustafson (20)

Delivering Critical Information and Services [JavaScript & Friends 2021]
Delivering Critical Information and Services [JavaScript & Friends 2021]Delivering Critical Information and Services [JavaScript & Friends 2021]
Delivering Critical Information and Services [JavaScript & Friends 2021]
Ā 
Adapting to Reality [Guest Lecture, March 2021]
Adapting to Reality [Guest Lecture, March 2021]Adapting to Reality [Guest Lecture, March 2021]
Adapting to Reality [Guest Lecture, March 2021]
Ā 
Designing the Conversation [Beyond Tellerrand 2019]
Designing the Conversation [Beyond Tellerrand 2019]Designing the Conversation [Beyond Tellerrand 2019]
Designing the Conversation [Beyond Tellerrand 2019]
Ā 
Getting Started with Progressive Web Apps [Beyond Tellerrand 2019]
Getting Started with Progressive Web Apps [Beyond Tellerrand 2019]Getting Started with Progressive Web Apps [Beyond Tellerrand 2019]
Getting Started with Progressive Web Apps [Beyond Tellerrand 2019]
Ā 
Progressive Web Apps: Where Do I Begin?
Progressive Web Apps: Where Do I Begin?Progressive Web Apps: Where Do I Begin?
Progressive Web Apps: Where Do I Begin?
Ā 
Media in the Age of PWAs [ImageCon 2019]
Media in the Age of PWAs [ImageCon 2019]Media in the Age of PWAs [ImageCon 2019]
Media in the Age of PWAs [ImageCon 2019]
Ā 
Adapting to Reality [Starbucks Lunch & Learn]
Adapting to Reality [Starbucks Lunch & Learn]Adapting to Reality [Starbucks Lunch & Learn]
Adapting to Reality [Starbucks Lunch & Learn]
Ā 
Conversational Semantics for the Web [CascadiaJS 2018]
Conversational Semantics for the Web [CascadiaJS 2018]Conversational Semantics for the Web [CascadiaJS 2018]
Conversational Semantics for the Web [CascadiaJS 2018]
Ā 
PWA: Where Do I Begin? [Microsoft Ignite 2018]
PWA: Where Do I Begin? [Microsoft Ignite 2018]PWA: Where Do I Begin? [Microsoft Ignite 2018]
PWA: Where Do I Begin? [Microsoft Ignite 2018]
Ā 
Designing the Conversation [Concatenate 2018]
Designing the Conversation [Concatenate 2018]Designing the Conversation [Concatenate 2018]
Designing the Conversation [Concatenate 2018]
Ā 
Designing the Conversation [Accessibility DC 2018]
Designing the Conversation [Accessibility DC 2018]Designing the Conversation [Accessibility DC 2018]
Designing the Conversation [Accessibility DC 2018]
Ā 
The Web Should Just Work for Everyone
The Web Should Just Work for EveryoneThe Web Should Just Work for Everyone
The Web Should Just Work for Everyone
Ā 
Performance as User Experience [AEA SEA 2018]
Performance as User Experience [AEA SEA 2018]Performance as User Experience [AEA SEA 2018]
Performance as User Experience [AEA SEA 2018]
Ā 
Advanced Design Methods 1, Day 2
Advanced Design Methods 1, Day 2Advanced Design Methods 1, Day 2
Advanced Design Methods 1, Day 2
Ā 
Advanced Design Methods 1, Day 1
Advanced Design Methods 1, Day 1Advanced Design Methods 1, Day 1
Advanced Design Methods 1, Day 1
Ā 
Designing the Conversation [Paris Web 2017]
Designing the Conversation [Paris Web 2017]Designing the Conversation [Paris Web 2017]
Designing the Conversation [Paris Web 2017]
Ā 
Exploring Adaptive Interfaces [Generate 2017]
Exploring Adaptive Interfaces [Generate 2017]Exploring Adaptive Interfaces [Generate 2017]
Exploring Adaptive Interfaces [Generate 2017]
Ā 
Progressive Web Apps and the Windows Ecosystem [Build 2017]
Progressive Web Apps and the Windows Ecosystem [Build 2017]Progressive Web Apps and the Windows Ecosystem [Build 2017]
Progressive Web Apps and the Windows Ecosystem [Build 2017]
Ā 
Writing for Engagement [TechReady 22]
Writing for Engagement [TechReady 22]Writing for Engagement [TechReady 22]
Writing for Engagement [TechReady 22]
Ā 
Designing the Conversation [SmashingConf 2016]
Designing the Conversation [SmashingConf 2016]Designing the Conversation [SmashingConf 2016]
Designing the Conversation [SmashingConf 2016]
Ā 

KĆ¼rzlich hochgeladen

Pharmaceutical Packaging for the elderly.pdf
Pharmaceutical Packaging for the elderly.pdfPharmaceutical Packaging for the elderly.pdf
Pharmaceutical Packaging for the elderly.pdfAayushChavan5
Ā 
NO1 Famous Amil Baba In Karachi Kala Jadu In Karachi Amil baba In Karachi Add...
NO1 Famous Amil Baba In Karachi Kala Jadu In Karachi Amil baba In Karachi Add...NO1 Famous Amil Baba In Karachi Kala Jadu In Karachi Amil baba In Karachi Add...
NO1 Famous Amil Baba In Karachi Kala Jadu In Karachi Amil baba In Karachi Add...Amil baba
Ā 
Call Girls in Ashok Nagar Delhi āœ”ļø9711147426āœ”ļø Escorts Service
Call Girls in Ashok Nagar Delhi āœ”ļø9711147426āœ”ļø Escorts ServiceCall Girls in Ashok Nagar Delhi āœ”ļø9711147426āœ”ļø Escorts Service
Call Girls in Ashok Nagar Delhi āœ”ļø9711147426āœ”ļø Escorts Servicejennyeacort
Ā 
Cosumer Willingness to Pay for Sustainable Bricks
Cosumer Willingness to Pay for Sustainable BricksCosumer Willingness to Pay for Sustainable Bricks
Cosumer Willingness to Pay for Sustainable Bricksabhishekparmar618
Ā 
办ē†(宾州州ē«‹ęƕäøščƁ书)ē¾Žå›½å®¾å¤•ę³•å°¼äŗšå·žē«‹å¤§å­¦ęƕäøščÆęˆē»©å•åŽŸē‰ˆäø€ęƔäø€
办ē†(宾州州ē«‹ęƕäøščƁ书)ē¾Žå›½å®¾å¤•ę³•å°¼äŗšå·žē«‹å¤§å­¦ęƕäøščÆęˆē»©å•åŽŸē‰ˆäø€ęƔäø€åŠžē†(宾州州ē«‹ęƕäøščƁ书)ē¾Žå›½å®¾å¤•ę³•å°¼äŗšå·žē«‹å¤§å­¦ęƕäøščÆęˆē»©å•åŽŸē‰ˆäø€ęƔäø€
办ē†(宾州州ē«‹ęƕäøščƁ书)ē¾Žå›½å®¾å¤•ę³•å°¼äŗšå·žē«‹å¤§å­¦ęƕäøščÆęˆē»©å•åŽŸē‰ˆäø€ęƔäø€F La
Ā 
办ē†(USYDęƕäøščƁ书)ę¾³ę“²ę‚‰å°¼å¤§å­¦ęƕäøščÆęˆē»©å•åŽŸē‰ˆäø€ęƔäø€
办ē†(USYDęƕäøščƁ书)ę¾³ę“²ę‚‰å°¼å¤§å­¦ęƕäøščÆęˆē»©å•åŽŸē‰ˆäø€ęƔäø€åŠžē†(USYDęƕäøščƁ书)ę¾³ę“²ę‚‰å°¼å¤§å­¦ęƕäøščÆęˆē»©å•åŽŸē‰ˆäø€ęƔäø€
办ē†(USYDęƕäøščƁ书)ę¾³ę“²ę‚‰å°¼å¤§å­¦ęƕäøščÆęˆē»©å•åŽŸē‰ˆäø€ęƔäø€diploma 1
Ā 
Call Girls in Okhla Delhi šŸ’ÆCall Us šŸ”8264348440šŸ”
Call Girls in Okhla Delhi šŸ’ÆCall Us šŸ”8264348440šŸ”Call Girls in Okhla Delhi šŸ’ÆCall Us šŸ”8264348440šŸ”
Call Girls in Okhla Delhi šŸ’ÆCall Us šŸ”8264348440šŸ”soniya singh
Ā 
äø“äøšäø€ęƔäø€ē¾Žå›½äŗšåˆ©ę”‘那大学ęƕäøščÆęˆē»©å•pdfē”µå­ē‰ˆåˆ¶ä½œäæ®ę”¹#ēœŸå®žå·„č‰ŗ展ē¤ŗ#ēœŸå®žé˜²ä¼Ŗ#diploma#degree
äø“äøšäø€ęƔäø€ē¾Žå›½äŗšåˆ©ę”‘那大学ęƕäøščÆęˆē»©å•pdfē”µå­ē‰ˆåˆ¶ä½œäæ®ę”¹#ēœŸå®žå·„č‰ŗ展ē¤ŗ#ēœŸå®žé˜²ä¼Ŗ#diploma#degreeäø“äøšäø€ęƔäø€ē¾Žå›½äŗšåˆ©ę”‘那大学ęƕäøščÆęˆē»©å•pdfē”µå­ē‰ˆåˆ¶ä½œäæ®ę”¹#ēœŸå®žå·„č‰ŗ展ē¤ŗ#ēœŸå®žé˜²ä¼Ŗ#diploma#degree
äø“äøšäø€ęƔäø€ē¾Žå›½äŗšåˆ©ę”‘那大学ęƕäøščÆęˆē»©å•pdfē”µå­ē‰ˆåˆ¶ä½œäæ®ę”¹#ēœŸå®žå·„č‰ŗ展ē¤ŗ#ēœŸå®žé˜²ä¼Ŗ#diploma#degreeyuu sss
Ā 
č„æ北大学ęƕäøščƁ学位čÆęˆē»©å•-ę€Žä¹ˆę ·åŠžä¼Ŗ造
č„æ北大学ęƕäøščƁ学位čÆęˆē»©å•-ę€Žä¹ˆę ·åŠžä¼Ŗ造č„æ北大学ęƕäøščƁ学位čÆęˆē»©å•-ę€Žä¹ˆę ·åŠžä¼Ŗ造
č„æ北大学ęƕäøščƁ学位čÆęˆē»©å•-ę€Žä¹ˆę ·åŠžä¼Ŗ造kbdhl05e
Ā 
Call Girls Satellite 7397865700 Ridhima Hire Me Full Night
Call Girls Satellite 7397865700 Ridhima Hire Me Full NightCall Girls Satellite 7397865700 Ridhima Hire Me Full Night
Call Girls Satellite 7397865700 Ridhima Hire Me Full Nightssuser7cb4ff
Ā 
Top 10 Modern Web Design Trends for 2025
Top 10 Modern Web Design Trends for 2025Top 10 Modern Web Design Trends for 2025
Top 10 Modern Web Design Trends for 2025Rndexperts
Ā 
办ē†å­¦ä½čƁ(TheAucklandčƁ书)ꖰč„æ兰億克兰大学ęƕäøščÆęˆē»©å•åŽŸē‰ˆäø€ęƔäø€
办ē†å­¦ä½čƁ(TheAucklandčƁ书)ꖰč„æ兰億克兰大学ęƕäøščÆęˆē»©å•åŽŸē‰ˆäø€ęƔäø€åŠžē†å­¦ä½čƁ(TheAucklandčƁ书)ꖰč„æ兰億克兰大学ęƕäøščÆęˆē»©å•åŽŸē‰ˆäø€ęƔäø€
办ē†å­¦ä½čƁ(TheAucklandčƁ书)ꖰč„æ兰億克兰大学ęƕäøščÆęˆē»©å•åŽŸē‰ˆäø€ęƔäø€Fi L
Ā 
'CASE STUDY OF INDIRA PARYAVARAN BHAVAN DELHI ,
'CASE STUDY OF INDIRA PARYAVARAN BHAVAN DELHI ,'CASE STUDY OF INDIRA PARYAVARAN BHAVAN DELHI ,
'CASE STUDY OF INDIRA PARYAVARAN BHAVAN DELHI ,Aginakm1
Ā 
原ē‰ˆ1:1定制å ŖåŸ¹ę‹‰å¤§å­¦ęƕäøščƁļ¼ˆUCęƕäøščƁļ¼‰#ę–‡å‡­ęˆē»©å•#ēœŸå®žē•™äæ”å­¦åŽ†č®¤čƁę°øä¹…å­˜ę”£
原ē‰ˆ1:1定制å ŖåŸ¹ę‹‰å¤§å­¦ęƕäøščƁļ¼ˆUCęƕäøščƁļ¼‰#ę–‡å‡­ęˆē»©å•#ēœŸå®žē•™äæ”å­¦åŽ†č®¤čƁę°øä¹…å­˜ę”£åŽŸē‰ˆ1:1定制å ŖåŸ¹ę‹‰å¤§å­¦ęƕäøščƁļ¼ˆUCęƕäøščƁļ¼‰#ę–‡å‡­ęˆē»©å•#ēœŸå®žē•™äæ”å­¦åŽ†č®¤čƁę°øä¹…å­˜ę”£
原ē‰ˆ1:1定制å ŖåŸ¹ę‹‰å¤§å­¦ęƕäøščƁļ¼ˆUCęƕäøščƁļ¼‰#ę–‡å‡­ęˆē»©å•#ēœŸå®žē•™äæ”å­¦åŽ†č®¤čƁę°øä¹…å­˜ę”£208367051
Ā 
Abu Dhabi Call Girls O58993O4O2 Call Girls in Abu Dhabi`
Abu Dhabi Call Girls O58993O4O2 Call Girls in Abu Dhabi`Abu Dhabi Call Girls O58993O4O2 Call Girls in Abu Dhabi`
Abu Dhabi Call Girls O58993O4O2 Call Girls in Abu Dhabi`dajasot375
Ā 
Design Portfolio - 2024 - William Vickery
Design Portfolio - 2024 - William VickeryDesign Portfolio - 2024 - William Vickery
Design Portfolio - 2024 - William VickeryWilliamVickery6
Ā 
How to Be Famous in your Field just visit our Site
How to Be Famous in your Field just visit our SiteHow to Be Famous in your Field just visit our Site
How to Be Famous in your Field just visit our Sitegalleryaagency
Ā 
ęƕäøšę–‡å‡­åˆ¶ä½œ#å›žå›½å…„čŒ#diploma#degreeę¾³ę“²å¼—ęž—å¾·ę–Æ大学ęƕäøščÆęˆē»©å•pdfē”µå­ē‰ˆåˆ¶ä½œäæ®ę”¹#ęƕäøšę–‡å‡­åˆ¶ä½œ#å›žå›½å…„čŒ#diploma#degree
ęƕäøšę–‡å‡­åˆ¶ä½œ#å›žå›½å…„čŒ#diploma#degreeę¾³ę“²å¼—ęž—å¾·ę–Æ大学ęƕäøščÆęˆē»©å•pdfē”µå­ē‰ˆåˆ¶ä½œäæ®ę”¹#ęƕäøšę–‡å‡­åˆ¶ä½œ#å›žå›½å…„čŒ#diploma#degree ęƕäøšę–‡å‡­åˆ¶ä½œ#å›žå›½å…„čŒ#diploma#degreeę¾³ę“²å¼—ęž—å¾·ę–Æ大学ęƕäøščÆęˆē»©å•pdfē”µå­ē‰ˆåˆ¶ä½œäæ®ę”¹#ęƕäøšę–‡å‡­åˆ¶ä½œ#å›žå›½å…„čŒ#diploma#degree
ęƕäøšę–‡å‡­åˆ¶ä½œ#å›žå›½å…„čŒ#diploma#degreeę¾³ę“²å¼—ęž—å¾·ę–Æ大学ęƕäøščÆęˆē»©å•pdfē”µå­ē‰ˆåˆ¶ä½œäæ®ę”¹#ęƕäøšę–‡å‡­åˆ¶ä½œ#å›žå›½å…„čŒ#diploma#degree ttt fff
Ā 
Call In girls Bhikaji Cama Place šŸ” ā‡›8377877756 FULL Enjoy Delhi NCR
Call In girls Bhikaji Cama Place šŸ” ā‡›8377877756 FULL Enjoy Delhi NCRCall In girls Bhikaji Cama Place šŸ” ā‡›8377877756 FULL Enjoy Delhi NCR
Call In girls Bhikaji Cama Place šŸ” ā‡›8377877756 FULL Enjoy Delhi NCRdollysharma2066
Ā 
Passbook project document_april_21__.pdf
Passbook project document_april_21__.pdfPassbook project document_april_21__.pdf
Passbook project document_april_21__.pdfvaibhavkanaujia
Ā 

KĆ¼rzlich hochgeladen (20)

Pharmaceutical Packaging for the elderly.pdf
Pharmaceutical Packaging for the elderly.pdfPharmaceutical Packaging for the elderly.pdf
Pharmaceutical Packaging for the elderly.pdf
Ā 
NO1 Famous Amil Baba In Karachi Kala Jadu In Karachi Amil baba In Karachi Add...
NO1 Famous Amil Baba In Karachi Kala Jadu In Karachi Amil baba In Karachi Add...NO1 Famous Amil Baba In Karachi Kala Jadu In Karachi Amil baba In Karachi Add...
NO1 Famous Amil Baba In Karachi Kala Jadu In Karachi Amil baba In Karachi Add...
Ā 
Call Girls in Ashok Nagar Delhi āœ”ļø9711147426āœ”ļø Escorts Service
Call Girls in Ashok Nagar Delhi āœ”ļø9711147426āœ”ļø Escorts ServiceCall Girls in Ashok Nagar Delhi āœ”ļø9711147426āœ”ļø Escorts Service
Call Girls in Ashok Nagar Delhi āœ”ļø9711147426āœ”ļø Escorts Service
Ā 
Cosumer Willingness to Pay for Sustainable Bricks
Cosumer Willingness to Pay for Sustainable BricksCosumer Willingness to Pay for Sustainable Bricks
Cosumer Willingness to Pay for Sustainable Bricks
Ā 
办ē†(宾州州ē«‹ęƕäøščƁ书)ē¾Žå›½å®¾å¤•ę³•å°¼äŗšå·žē«‹å¤§å­¦ęƕäøščÆęˆē»©å•åŽŸē‰ˆäø€ęƔäø€
办ē†(宾州州ē«‹ęƕäøščƁ书)ē¾Žå›½å®¾å¤•ę³•å°¼äŗšå·žē«‹å¤§å­¦ęƕäøščÆęˆē»©å•åŽŸē‰ˆäø€ęƔäø€åŠžē†(宾州州ē«‹ęƕäøščƁ书)ē¾Žå›½å®¾å¤•ę³•å°¼äŗšå·žē«‹å¤§å­¦ęƕäøščÆęˆē»©å•åŽŸē‰ˆäø€ęƔäø€
办ē†(宾州州ē«‹ęƕäøščƁ书)ē¾Žå›½å®¾å¤•ę³•å°¼äŗšå·žē«‹å¤§å­¦ęƕäøščÆęˆē»©å•åŽŸē‰ˆäø€ęƔäø€
Ā 
办ē†(USYDęƕäøščƁ书)ę¾³ę“²ę‚‰å°¼å¤§å­¦ęƕäøščÆęˆē»©å•åŽŸē‰ˆäø€ęƔäø€
办ē†(USYDęƕäøščƁ书)ę¾³ę“²ę‚‰å°¼å¤§å­¦ęƕäøščÆęˆē»©å•åŽŸē‰ˆäø€ęƔäø€åŠžē†(USYDęƕäøščƁ书)ę¾³ę“²ę‚‰å°¼å¤§å­¦ęƕäøščÆęˆē»©å•åŽŸē‰ˆäø€ęƔäø€
办ē†(USYDęƕäøščƁ书)ę¾³ę“²ę‚‰å°¼å¤§å­¦ęƕäøščÆęˆē»©å•åŽŸē‰ˆäø€ęƔäø€
Ā 
Call Girls in Okhla Delhi šŸ’ÆCall Us šŸ”8264348440šŸ”
Call Girls in Okhla Delhi šŸ’ÆCall Us šŸ”8264348440šŸ”Call Girls in Okhla Delhi šŸ’ÆCall Us šŸ”8264348440šŸ”
Call Girls in Okhla Delhi šŸ’ÆCall Us šŸ”8264348440šŸ”
Ā 
äø“äøšäø€ęƔäø€ē¾Žå›½äŗšåˆ©ę”‘那大学ęƕäøščÆęˆē»©å•pdfē”µå­ē‰ˆåˆ¶ä½œäæ®ę”¹#ēœŸå®žå·„č‰ŗ展ē¤ŗ#ēœŸå®žé˜²ä¼Ŗ#diploma#degree
äø“äøšäø€ęƔäø€ē¾Žå›½äŗšåˆ©ę”‘那大学ęƕäøščÆęˆē»©å•pdfē”µå­ē‰ˆåˆ¶ä½œäæ®ę”¹#ēœŸå®žå·„č‰ŗ展ē¤ŗ#ēœŸå®žé˜²ä¼Ŗ#diploma#degreeäø“äøšäø€ęƔäø€ē¾Žå›½äŗšåˆ©ę”‘那大学ęƕäøščÆęˆē»©å•pdfē”µå­ē‰ˆåˆ¶ä½œäæ®ę”¹#ēœŸå®žå·„č‰ŗ展ē¤ŗ#ēœŸå®žé˜²ä¼Ŗ#diploma#degree
äø“äøšäø€ęƔäø€ē¾Žå›½äŗšåˆ©ę”‘那大学ęƕäøščÆęˆē»©å•pdfē”µå­ē‰ˆåˆ¶ä½œäæ®ę”¹#ēœŸå®žå·„č‰ŗ展ē¤ŗ#ēœŸå®žé˜²ä¼Ŗ#diploma#degree
Ā 
č„æ北大学ęƕäøščƁ学位čÆęˆē»©å•-ę€Žä¹ˆę ·åŠžä¼Ŗ造
č„æ北大学ęƕäøščƁ学位čÆęˆē»©å•-ę€Žä¹ˆę ·åŠžä¼Ŗ造č„æ北大学ęƕäøščƁ学位čÆęˆē»©å•-ę€Žä¹ˆę ·åŠžä¼Ŗ造
č„æ北大学ęƕäøščƁ学位čÆęˆē»©å•-ę€Žä¹ˆę ·åŠžä¼Ŗ造
Ā 
Call Girls Satellite 7397865700 Ridhima Hire Me Full Night
Call Girls Satellite 7397865700 Ridhima Hire Me Full NightCall Girls Satellite 7397865700 Ridhima Hire Me Full Night
Call Girls Satellite 7397865700 Ridhima Hire Me Full Night
Ā 
Top 10 Modern Web Design Trends for 2025
Top 10 Modern Web Design Trends for 2025Top 10 Modern Web Design Trends for 2025
Top 10 Modern Web Design Trends for 2025
Ā 
办ē†å­¦ä½čƁ(TheAucklandčƁ书)ꖰč„æ兰億克兰大学ęƕäøščÆęˆē»©å•åŽŸē‰ˆäø€ęƔäø€
办ē†å­¦ä½čƁ(TheAucklandčƁ书)ꖰč„æ兰億克兰大学ęƕäøščÆęˆē»©å•åŽŸē‰ˆäø€ęƔäø€åŠžē†å­¦ä½čƁ(TheAucklandčƁ书)ꖰč„æ兰億克兰大学ęƕäøščÆęˆē»©å•åŽŸē‰ˆäø€ęƔäø€
办ē†å­¦ä½čƁ(TheAucklandčƁ书)ꖰč„æ兰億克兰大学ęƕäøščÆęˆē»©å•åŽŸē‰ˆäø€ęƔäø€
Ā 
'CASE STUDY OF INDIRA PARYAVARAN BHAVAN DELHI ,
'CASE STUDY OF INDIRA PARYAVARAN BHAVAN DELHI ,'CASE STUDY OF INDIRA PARYAVARAN BHAVAN DELHI ,
'CASE STUDY OF INDIRA PARYAVARAN BHAVAN DELHI ,
Ā 
原ē‰ˆ1:1定制å ŖåŸ¹ę‹‰å¤§å­¦ęƕäøščƁļ¼ˆUCęƕäøščƁļ¼‰#ę–‡å‡­ęˆē»©å•#ēœŸå®žē•™äæ”å­¦åŽ†č®¤čƁę°øä¹…å­˜ę”£
原ē‰ˆ1:1定制å ŖåŸ¹ę‹‰å¤§å­¦ęƕäøščƁļ¼ˆUCęƕäøščƁļ¼‰#ę–‡å‡­ęˆē»©å•#ēœŸå®žē•™äæ”å­¦åŽ†č®¤čƁę°øä¹…å­˜ę”£åŽŸē‰ˆ1:1定制å ŖåŸ¹ę‹‰å¤§å­¦ęƕäøščƁļ¼ˆUCęƕäøščƁļ¼‰#ę–‡å‡­ęˆē»©å•#ēœŸå®žē•™äæ”å­¦åŽ†č®¤čƁę°øä¹…å­˜ę”£
原ē‰ˆ1:1定制å ŖåŸ¹ę‹‰å¤§å­¦ęƕäøščƁļ¼ˆUCęƕäøščƁļ¼‰#ę–‡å‡­ęˆē»©å•#ēœŸå®žē•™äæ”å­¦åŽ†č®¤čƁę°øä¹…å­˜ę”£
Ā 
Abu Dhabi Call Girls O58993O4O2 Call Girls in Abu Dhabi`
Abu Dhabi Call Girls O58993O4O2 Call Girls in Abu Dhabi`Abu Dhabi Call Girls O58993O4O2 Call Girls in Abu Dhabi`
Abu Dhabi Call Girls O58993O4O2 Call Girls in Abu Dhabi`
Ā 
Design Portfolio - 2024 - William Vickery
Design Portfolio - 2024 - William VickeryDesign Portfolio - 2024 - William Vickery
Design Portfolio - 2024 - William Vickery
Ā 
How to Be Famous in your Field just visit our Site
How to Be Famous in your Field just visit our SiteHow to Be Famous in your Field just visit our Site
How to Be Famous in your Field just visit our Site
Ā 
ęƕäøšę–‡å‡­åˆ¶ä½œ#å›žå›½å…„čŒ#diploma#degreeę¾³ę“²å¼—ęž—å¾·ę–Æ大学ęƕäøščÆęˆē»©å•pdfē”µå­ē‰ˆåˆ¶ä½œäæ®ę”¹#ęƕäøšę–‡å‡­åˆ¶ä½œ#å›žå›½å…„čŒ#diploma#degree
ęƕäøšę–‡å‡­åˆ¶ä½œ#å›žå›½å…„čŒ#diploma#degreeę¾³ę“²å¼—ęž—å¾·ę–Æ大学ęƕäøščÆęˆē»©å•pdfē”µå­ē‰ˆåˆ¶ä½œäæ®ę”¹#ęƕäøšę–‡å‡­åˆ¶ä½œ#å›žå›½å…„čŒ#diploma#degree ęƕäøšę–‡å‡­åˆ¶ä½œ#å›žå›½å…„čŒ#diploma#degreeę¾³ę“²å¼—ęž—å¾·ę–Æ大学ęƕäøščÆęˆē»©å•pdfē”µå­ē‰ˆåˆ¶ä½œäæ®ę”¹#ęƕäøšę–‡å‡­åˆ¶ä½œ#å›žå›½å…„čŒ#diploma#degree
ęƕäøšę–‡å‡­åˆ¶ä½œ#å›žå›½å…„čŒ#diploma#degreeę¾³ę“²å¼—ęž—å¾·ę–Æ大学ęƕäøščÆęˆē»©å•pdfē”µå­ē‰ˆåˆ¶ä½œäæ®ę”¹#ęƕäøšę–‡å‡­åˆ¶ä½œ#å›žå›½å…„čŒ#diploma#degree
Ā 
Call In girls Bhikaji Cama Place šŸ” ā‡›8377877756 FULL Enjoy Delhi NCR
Call In girls Bhikaji Cama Place šŸ” ā‡›8377877756 FULL Enjoy Delhi NCRCall In girls Bhikaji Cama Place šŸ” ā‡›8377877756 FULL Enjoy Delhi NCR
Call In girls Bhikaji Cama Place šŸ” ā‡›8377877756 FULL Enjoy Delhi NCR
Ā 
Passbook project document_april_21__.pdf
Passbook project document_april_21__.pdfPassbook project document_april_21__.pdf
Passbook project document_april_21__.pdf
Ā 

Performance as User Experience: Optimize Assets for Speed

  • 1. Performanceā€Ø as User Experience Aaron Gustafson @AaronGustafson slideshare.net/AaronGustafson
  • 3. JEFF VEEN ā€œIā€™ve been amazed at how often those outside the discipline of design assume that what designers do is decorationā€” likely because so much bad designā€Ø simply is decoration. Good design isnā€™t.ā€Ø Good design is problem solving.ā€
  • 5. PERFORMANCE AS USER EXPERIENCE Hallmarks of Good UX ą¹ Streamlined flow ą¹ Clear, concise copy ą¹ Low cognitive load ą¹ Fast performance 5
  • 6.
  • 9. A 1s delay in pageā€Ø load can reduceā€Ø conversions by 7% Source: Kissmetrics
  • 10. For an online shop earning $100k/day, thatā€™s about $2.5m in lost sales Source: Kissmetrics
  • 11. For Amazon, 1s is worthā€Ø about $1.6b in sales Source: HubSpot
  • 13. 53% abandonā€Ø websites that takeā€Ø more than 3s to load Source: Google
  • 14. By shaving 7s off load, Edmunds increasedā€Ø page views by 17%ā€Ø & ad revenue by 3% Source: HubSpot
  • 15. Mozilla reduced page load by 2.2s and saw a 15.4% increase in downloads Source: HubSpot
  • 17.
  • 18. PERFORMANCE AS USER EXPERIENCE What we were looking for ą¹ Usable pages are delivered in 10kB or less ą¹ Pages are accessible via screen readers, the keyboard, etc. ą¹ Entries follow the philosophy of progressive enhancement ą¹ Users can do what they need to without JavaScript 18
  • 21. time Your Device The Web Where can I find a-k-apart.com? DNS Lookup Ā Icons by Mahmure Alp
  • 22. time Your Device The Web Where can I find a-k-apart.com? Itā€™s at 40.77.56.174 DNS Lookup Ā Icons by Mahmure Alp
  • 23. time Your Device The Web Where can I find a-k-apart.com? Itā€™s at 40.77.56.174 TCP Handshake Hello 40.77.56.174 Ā Icons by Mahmure Alp
  • 24. time Your Device The Web Where can I find a-k-apart.com? Itā€™s at 40.77.56.174 TCP Handshake Hello 40.77.56.174 Howdy! Ā Icons by Mahmure Alp
  • 25. time Your Device The Web Where can I find a-k-apart.com? Itā€™s at 40.77.56.174 Request Hello 40.77.56.174 Howdy! Iā€™d like /index.html Ā Icons by Mahmure Alp
  • 26. time Your Device The Web Where can I find a-k-apart.com? Itā€™s at 40.77.56.174 Server Processing Hello 40.77.56.174 Howdy! Iā€™d like /index.html Ā Icons by Mahmure Alp
  • 27. time Your Device The Web Where can I find a-k-apart.com? Itā€™s at 40.77.56.174 Response Hello 40.77.56.174 Howdy! Iā€™d like /index.html Ok, here it is. Ā Icons by Mahmure Alp
  • 29. Ā Icons by Mahmure Alp Response Load Paint Layout RenderTree CSS DOM
  • 30. Ā Icons by Mahmure Alp Response Load Paint Layout RenderTree CSS DOM CSS & JavaScript can delay rendering or cause these to be run again
  • 31. PERFORMANCE AS USER EXPERIENCE DOM Parsing <html> <head> <title>Silly example</title> <script src="head.js"></script> <link rel="stylesheet" href="main.css"> <style>h2 { font-wight: bold; }</style> <script>console.log('hi');</script> </head> <body> <img src="my.png" alt=""> <script src="body.js"></script> </body> </html> wait while the browserā€Ø fetches & parses the script
  • 32. PERFORMANCE AS USER EXPERIENCE DOM Parsing <html> <head> <title>Silly example</title> <script src="head.js"></script> <link rel="stylesheet" href="main.css"> <style>h2 { font-wight: bold; }</style> <script>console.log('hi');</script> </head> <body> <img src="my.png" alt=""> <script src="body.js"></script> </body> </html> wait while the browserā€Ø fetches & parses the CSS
  • 33. PERFORMANCE AS USER EXPERIENCE DOM Parsing <html> <head> <title>Silly example</title> <script src="head.js"></script> <link rel="stylesheet" href="main.css"> <style>h2 { font-wight: bold; }</style> <script>console.log('hi');</script> </head> <body> <img src="my.png" alt=""> <script src="body.js"></script> </body> </html> kicks off downloadingā€Ø the image
  • 34. PERFORMANCE AS USER EXPERIENCE DOM Parsing <html> <head> <title>Silly example</title> <script src="head.js"></script> <link rel="stylesheet" href="main.css"> <style>h2 { font-wight: bold; }</style> <script>console.log('hi');</script> </head> <body> <img src="my.png" alt=""> <script src="body.js"></script> </body> </html> wait while the browserā€Ø fetches & parses the script
  • 35. PERFORMANCE AS USER EXPERIENCE Steps for better performance 1. Use native features whenever possible 2. Only include assets you actually need 3. Optimize everything 4. Think about when you load assets 5. Consider how you load assets 6. Only load assets when they add value 43
  • 36. Step 1:ā€Ø Use native featuresā€Ø whenever possible
  • 38. PERFORMANCE AS USER EXPERIENCE Por exemplo <header> Header contentā€¦ </header> not only shorter thanā€Ø <div id=ā€œheader">, butā€Ø semantic too depending on its locationā€Øin the document, could alsoā€Øprovide a landmarkā€Øfor navigation
  • 39. PERFORMANCE AS USER EXPERIENCE Por exemplo <input id="n" name="n" required aria-required="true" autocorrect="off"ā€Ø autocapitalize="words" placeholder="Sir Tim Berners Lee" autocomplete="name" > modern browsers requireā€Ø users to enter content browser can informā€Ø assistive tech thatā€Ø the ļ¬eld is required donā€™t let the browserā€Øtry to correctā€Øsomeoneā€™s name auto-disappearing suggestionā€Øwithout JavaScript if the browser alreadyā€Ø knows the userā€™s name,ā€Ø by all means, let it ļ¬ll it in
  • 40. PERFORMANCE AS USER EXPERIENCE Por exemplo <input type="email"ā€Ø id="e" name="e"ā€Ø required aria-required="true"ā€Ø autocorrect="off"ā€Ø autocapitalize="off"ā€Ø autocomplete="email"ā€Ø placeholder="you@yourdomain.tld"ā€Ø > modern browsers validateā€Ø the email addressā€Ø and may supply aā€Ø custom keyboard layout let the browser suggestā€Ø an email address if it has one
  • 41. PERFORMANCE AS USER EXPERIENCE Por exemplo @media (min-width:600px) {ā€Ø .layout-container { display: flex; } .primary {ā€Ø width: 68%;ā€Ø }ā€Ø .secondary {ā€Ø width: 32%;ā€Ø }ā€Ø } So much better than ļ¬‚oats
  • 42. PERFORMANCE AS USER EXPERIENCE Por exemplo var $radios = document.querySelectorAll( 'input[type=radio]' ); CSS selector-basedā€Ø DOM traversalā€Ø without a JS library
  • 43. PERFORMANCE AS USER EXPERIENCE Por exemplo font-family: Georgia, Times,ā€Ø "Times New Roman", serif font-family: "Segoe UI", Frutiger,ā€Ø "Frutiger Linotype",ā€Ø "Dejavu Sans", "Helvetica Neue",ā€Ø Arial, sans-serif; Serif Sans Serif
  • 44.
  • 45. If you needā€Ø a custom font:ā€Ø subset, subset, subset
  • 46. PERFORMANCE AS USER EXPERIENCE Proceed with caution Source: Bran Stein
  • 47. Step 2:ā€Ø Only include assetsā€Ø you actually need
  • 49. PERFORMANCE AS USER EXPERIENCE Every tool has a cost Framework Size (Compressed) Bootstrap 2 149 kB Bootstrap 3 103 kB Angular 1.4 51 kB Ember 2.2.0 111 kB Foundation 4 266 kB jQuery 32 kB UI Kit 86 kB React 16 + React DOM 35 kB Vue 2.4.2 20 kB
  • 50. Chances are, yourā€Ø library of choiceā€Ø is on a CDN
  • 51. time Your Device The Web Where can I find cdn.foo.com? Itā€™s at 123.45.67.89 Hello 123.45.67.89 Howdy! Iā€™d like /jquery.min.js Ok, here it is. Ā Icons by Mahmure Alp
  • 52. time Your Device The Web Where can I find cdn.foo.com? Itā€™s at 123.45.67.89 Ā Icons by Mahmure Alp You can optimize this
  • 53. PERFORMANCE AS USER EXPERIENCE Find the server early <link rel="dns-prefetch"ā€Ø href="https://cdn.foo.com"> Drop this in theā€Ø head of your pages
  • 54. time Your Device The Web Where can I find cdn.foo.com? Itā€™s at 123.45.67.89 Hello 123.45.67.89 Howdy! Ā Icons by Mahmure Alp You can optimize this
  • 55. PERFORMANCE AS USER EXPERIENCE Go for the handshake <link rel="preconnect"ā€Ø href="https://cdn.foo.com">
  • 56. time Your Device The Web Iā€™d like /jquery.min.js Ok, here it is. Ā Icons by Mahmure Alp You can even optimize this
  • 57. PERFORMANCE AS USER EXPERIENCE Grab that resource <link rel="preload"ā€Ø href="https://cdn.foo.com/jquery.min.js"ā€Ø as="script"> Helps optimize the process
  • 58. PERFORMANCE AS USER EXPERIENCE Download isnā€™t everything Source: The Filament Group
  • 59. PERFORMANCE AS USER EXPERIENCE Download isnā€™t everything Framework Method/function operations/s Vanilla JS document.getElementById() 12,137,211 Dojo dojo.byId(); 5,443,343 Prototype $() 2,940,734 Ext JS Ext.get() 997,562 jQuery $() 350,557 YUI YAHOO.util.Dom.get() 326,534 MooTools document.id() 78,802 Source: VanillaJS
  • 61. PERFORMANCE AS USER EXPERIENCE We used some hints though <link rel="preconnect"ā€Ø href="//10kapart.blob.core.windows.net"> <link rel="preconnect"ā€Ø href="//cdnjs.cloudflare.com"> <link rel="preconnect"ā€Ø href="//www.google-analytics.com">
  • 63. PERFORMANCE AS USER EXPERIENCE Our approach to CSS (Gulp) 1. Write modular CSS in Sass (+ Breakup for MQ management) 2. Compile CSS with a precision of 4 decimal places (gulp-sass) 3. Fallbacks for the last 2 browser versions (gulp-autoprefixer) 4. CSS shorthand declarations if possible (gulp-shorthand) 5. Remove any unused declarations/rule sets (gulp-uncss) 6. Optimize the files (gulp-csso) 7. Minify (gulp-clean-css) 8. Gzip (gulp-zopfli) 9. Brotli (gulp-brotli) 71
  • 64. PERFORMANCE AS USER EXPERIENCE Before
  • 65. PERFORMANCE AS USER EXPERIENCE After
  • 66. PERFORMANCE AS USER EXPERIENCE After everyone elseā€Ø 8 kB browsers that supportā€Ø brotli compressionā€Ø 2 kB browsers that supportā€Øgzip compressionā€Ø3 kB
  • 67. PERFORMANCE AS USER EXPERIENCE Our approach to JS (Gulp) 1. Write modular JavaScript, grouped as appropriate 2. Combine files based on folder structure (gulp-folders, gulp-concat) 3. Create an wrapping closure to isolate from other JS (gulp-insert) 4. Minify (gulp-uglify) 5. Gzip (gulp-zopfli) 6. Brotli (gulp-brotli) 74
  • 68. PERFORMANCE AS USER EXPERIENCE Results about 8 kB all-up 4 kB 1 kB 2 kB
  • 69. PERFORMANCE AS USER EXPERIENCE Interesting side note indexes last indexes ļ¬rst
  • 70. We also minifiedā€Ø & pre-compressedā€Ø our HTML
  • 71. Step 4:ā€Ø Think about whenā€Ø you load assets
  • 72. PERFORMANCE AS USER EXPERIENCE We had 10 JS files ą¹ Global ā€£ main.js - the siteā€™s library ā€£ serviceworker.js - The siteā€™s service worker ą¹ Browser-specific ā€£ html5shiv.js - local copy of the HTML5 Shiv for < IE9 79
  • 73. PERFORMANCE AS USER EXPERIENCE We had 10 JS files ą¹ Page-specific ā€£ enter.js - Entry form-related code ā€£ form-saver.js - Used to save form entries locally until submitted ā€£ hero.js - Runs the SVG animation on the homepage ā€£ home.js - Handles homepage-specific tasks ā€£ project.js - Used on project pages during voting ā€£ update.js - Handles the winner update form 80
  • 74. PERFORMANCE AS USER EXPERIENCE Per the common wisdom <script src="/j/main.min.js"></script>ā€Ø </body>ā€Ø </html>
  • 75. PERFORMANCE AS USER EXPERIENCE No need to run immediately <script src="/j/main.min.js"></script>ā€Ø <script src="/j/home.min.js"ā€Ø deferā€Ø ></script>ā€Ø </body>ā€Ø </html> run after the DOM is loaded
  • 76. PERFORMANCE AS USER EXPERIENCE Run whenever you can <script src="/j/main.min.js"></script>ā€Ø <script src="/j/home.min.js"ā€Ø asyncā€Ø ></script>ā€Ø </body>ā€Ø </html> run whenever it becomesā€Ø available, but donā€™tā€Ø delay page load
  • 77. PERFORMANCE AS USER EXPERIENCE Consider dependencies <script src="/j/main.min.js"></script>ā€Ø <script src="/j/home.min.js" async></script>
  • 78. PERFORMANCE AS USER EXPERIENCE Consider dependencies <script src="/j/main.min.js" async></script>ā€Ø <script src="/j/home.min.js" async></script> what if this calls a functionā€Ø in main.min.js?
  • 80. PERFORMANCE AS USER EXPERIENCE Avoid race conditions <script src="/j/main.min.js"></script>ā€Ø <script src="/j/home.min.js" async></script>
  • 82. PERFORMANCE AS USER EXPERIENCE Connections in HTTP/1.1 Browser Per host Overall IE 9 6 35 IE 10 8 17 IE 11 13 17 Firefox 4+ 6 17 Opera 11+ 6 user defined Chrome 4+ 6 10 Safari 7+ 6 17
  • 83. time Your Device The Web HTTP/1.1 Ā Icons by Mahmure Alp Iā€™d like /c/main.css Iā€™d like /j/main.min.js Iā€™d like /i/o.svg Iā€™d like /j/home.min.js Iā€™d like /i/edge.svg Iā€™d like /i/aea.svg
  • 84. HTTP/2 createsā€Ø a single connection and contents stream in
  • 85. time Your Device The Web HTTP/2 Ā Icons by Mahmure Alp Iā€™d like /c/main.css Iā€™d like /i/o.svg Iā€™d like /i/edge.svg
  • 86. Source: A List Apart
  • 87. Source: A List Apart
  • 89. PERFORMANCE AS USER EXPERIENCE Start simple <link rel="stylesheet" href="/c/d.min.css"> <link rel="stylesheet" href="/c/a.min.css"ā€Ø media="only screen"> default stylesā€Ø(all browsers) advanced stylesā€Ø (modern browsers)
  • 90. PERFORMANCE AS USER EXPERIENCE Fault tolerance FTW! <link rel="stylesheet" href="/c/d.min.css"> <link rel="stylesheet" href="/c/a.min.css"ā€Ø media="only screen"> browsers that donā€™t grokā€Ø media queries ignore this ļ¬le
  • 91. PERFORMANCE AS USER EXPERIENCE Conditional scripting <!--[if lt IE 9]> <script src="/j/html5shiv.min.js"></script> <![endif]--> delivers this scriptā€Ø to <= IE 8
  • 92. PERFORMANCE AS USER EXPERIENCE Conditional scripting <!--[if gt IE 8]><!-->ā€Ø <script src="/j/main.min.js"></script>ā€Ø <script src="/j/home.min.js" asyncā€Ø ></script>ā€Ø <!--<![endif]-->ā€Ø </body>ā€Ø </html> hides scripts from <= IE8ā€Ø(no need to test!)
  • 93. PERFORMANCE AS USER EXPERIENCE Conditional imagery
  • 94. PERFORMANCE AS USER EXPERIENCE Conditional images @media (min-width: 36.375em) { .presented-by [href*=microsoft]::before { background-image: url(/i/c/edge.png); background-image: url(/i/c/edge.svg),ā€Ø none;ā€Ø ā€¦ } }
  • 95. PERFORMANCE AS USER EXPERIENCE Conditional images @media (min-width: 36.375em) { .presented-by [href*=microsoft]::before { background-image: url(/i/c/edge.png); background-image: url(/i/c/edge.svg),ā€Ø none;ā€Ø ā€¦ } }
  • 96. PERFORMANCE AS USER EXPERIENCE Conditional images @media (min-width: 36.375em) { .presented-by [href*=microsoft]::before { background-image: url(/i/c/edge.png); background-image: url(/i/c/edge.svg),ā€Ø none;ā€Ø ā€¦ } } browsers that supportā€Ømultiple backgroundsā€Øalso support SVG
  • 97. PERFORMANCE AS USER EXPERIENCE Conditional animation
  • 98. PERFORMANCE AS USER EXPERIENCE How do we get there? JS? No No imageLoad Yes <> SVG support? Yes SVG Ajax request SVGā€Ø Yank out script & add to document No picture Save the markup forā€Ø next page load NoYes Verify browser width condition
  • 99. Step 6:ā€Ø Only load assets when they add value
  • 100.
  • 101.
  • 102. PERFORMANCE AS USER EXPERIENCE Evaluate images case-by-case ą¹ Does the image reiterate information found in the surrounding text? ą¹ Is the image necessary to understand the surrounding content? ą¹ Does the image contain text? ą¹ Is the image a graph, chart, or table? ą¹ Could the content of the image be presented in a different format that would not require an image? ą¹ Is the image purely presentational? 111
  • 103. PERFORMANCE AS USER EXPERIENCE 53% of the average web page Source: Internet Archive
  • 104. PERFORMANCE AS USER EXPERIENCE And they donā€™t always fit
  • 106. If you can avoidā€Ø using an image, do it
  • 107. If you need an image, choose the best format
  • 108. PERFORMANCE AS USER EXPERIENCE Quick format recap ą¹ GIF ā€£ for images with large swaths of solid colors ā€£ Binary transparency ą¹ JPG ā€£ For photographs and images with gradations of color ā€£ Can be compressed (introduces artifacts) 117
  • 109. PERFORMANCE AS USER EXPERIENCE Quick format recap ą¹ PNG (8-Bit) ā€£ Alternative to GIF ā€£ Can support alpha transparency (with the right creation software) ą¹ PNG (24-bit) ā€£ Alternative to JPG ā€£ Usually larger than JPGs ā€£ Supports alpha tranparency 118
  • 110. PERFORMANCE AS USER EXPERIENCE Quick format recap ą¹ WebP ā€£ Newer format, not universally supported ā€£ Smaller than JPGs and 24-bit PNGs ā€£ Support alpha transparency ā€£ and so much moreā€¦ 119
  • 112. thatā€™s 29 kB of images
  • 113.
  • 114. PERFORMANCE AS USER EXPERIENCE How it works <li class="gallery__item h-card"ā€Ø data-img="/i/j/r.jpg||y"ā€Ø > <a href="https://twitter.com/rachelandrew">ā€Ø <b>Rachel Andrew</b>ā€Ø </a> </li>
  • 115. PERFORMANCE AS USER EXPERIENCE How it works <li class="gallery__item h-card"ā€Ø data-img="/i/j/r.jpg||y"ā€Ø > <a href="https://twitter.com/rachelandrew">ā€Ø <b>Rachel Andrew</b>ā€Ø </a> </li> image path no alt necessary prepend toā€Ø this list item
  • 116. PERFORMANCE AS USER EXPERIENCE Getting CSS & JS in sync var $watcher = document.createElement('div'), re = /['"]/g; $watcher.setAttribute( 'id', 'getActiveMQ-watcher' ); $watcher.style.display = 'none'; document.body.appendChild( $watcher ); window.getActiveMQ = function() { return window.getComputedStyle( $watcher, null ) .getPropertyValue( 'font-family' ) .replace( re, '' ); };
  • 117. PERFORMANCE AS USER EXPERIENCE Getting CSS & JS in sync #getActiveMQ-watcher { font-family: global; } @media (min-width: 15em) { #getActiveMQ-watcher { font-family: tiny; } } @media (min-width: 20em) { #getActiveMQ-watcher { font-family: small; } } @media (min-width: 30em) { #getActiveMQ-watcher { font-family: medium; } } @media (min-width: 40em) { #getActiveMQ-watcher { font-family: large; } } @media (min-width: 48.75em) { #getActiveMQ-watcher { font-family: larger; } } @media (min-width: 60em) { #getActiveMQ-watcher { font-family: full; } }
  • 118. PERFORMANCE AS USER EXPERIENCE Getting CSS & JS in sync #getActiveMQ-watcher { font-family: global; } @media (min-width: 15em) { #getActiveMQ-watcher { font-family: tiny; } } @media (min-width: 20em) { #getActiveMQ-watcher { font-family: small; } } @media (min-width: 30em) { #getActiveMQ-watcher { font-family: medium; } } @media (min-width: 40em) { #getActiveMQ-watcher { font-family: large; } } @media (min-width: 48.75em) { #getActiveMQ-watcher { font-family: larger; } } @media (min-width: 60em) { #getActiveMQ-watcher { font-family: full; } }
  • 119. PERFORMANCE AS USER EXPERIENCE Getting CSS & JS in sync var $watcher = document.createElement('div'), re = /['"]/g; $watcher.setAttribute( 'id', 'getActiveMQ-watcher' ); $watcher.style.display = 'none'; document.body.appendChild( $watcher ); window.getActiveMQ = function() { return window.getComputedStyle( $watcher, null ) .getPropertyValue( 'font-family' ) .replace( re, '' ); };
  • 120. PERFORMANCE AS USER EXPERIENCE Getting CSS & JS in sync var MQ = getActiveMQ(); if ( MQ == 'larger' || MQ == 'full' ) { lazyLoadImages(); }
  • 121. PERFORMANCE AS USER EXPERIENCE How it works <li class="gallery__item h-card"ā€Ø data-img="/i/j/r.jpg||y"ā€Ø > <a href="https://twitter.com/rachelandrew">ā€Ø <b>Rachel Andrew</b>ā€Ø </a> </li>
  • 122. PERFORMANCE AS USER EXPERIENCE Indicating alternate formats <li class="gallery__item h-card"ā€Ø data-img="/i/j/r.jpg||y"ā€Ø data-imaged="true"ā€Ø >ā€Ø <img src="/i/j/r.jpg" alt="">ā€Ø <a href="https://twitter.com/rachelandrew">ā€Ø <b>Rachel Andrew</b>ā€Ø </a> </li>
  • 124.
  • 125.
  • 127. B&W: 35 kB JPG (-7%)
  • 128. Crop & Resize: 12 kB JPG (-68%)
  • 129. Blur & optimize: 9 kB JPG (-76%)
  • 131. WebP: 4 kB (-89%)JPG: 9 kB (-76%)
  • 133. PERFORMANCE AS USER EXPERIENCE Indicating alternate formats <picture> <source type="image/webp" srcset="my.webp">ā€Ø <img src="my.jpg" alt="Alt text goes here"> </picture> first choice ifā€ØWebP is supported fallback imageā€Ø if it isnā€™t
  • 134. PERFORMANCE AS USER EXPERIENCE Indicating alternate formats <picture> <source type="image/svg+xml"ā€Ø srcset="my.svg"> <source type="image/webp" srcset="my.webp">ā€Ø <img src="my.jpg" alt="Alt text goes here"> </picture>
  • 135. PERFORMANCE AS USER EXPERIENCE Indicating alternate formats <li class="gallery__item h-card"ā€Ø data-img="/i/j/r.jpg||y"ā€Ø data-imaged="true"ā€Ø >ā€Ø <img src="/i/j/r.jpg" alt="">ā€Ø <a href="https://twitter.com/rachelandrew">ā€Ø <b>Rachel Andrew</b>ā€Ø </a> </li>
  • 136. PERFORMANCE AS USER EXPERIENCE Indicating alternate formats <li class="gallery__item h-card"ā€Ø data-img="/i/j/r.jpg||y"ā€Ø data-imaged="true"ā€Ø >ā€Ø <picture>ā€Ø <source type="image/webp"ā€Ø srcset="/i/j/r.webp">ā€Ø <img src="/i/j/r.jpg" alt="">ā€Ø </picture> <a href="https://twitter.com/rachelandrew">ā€Ø <b>Rachel Andrew</b>ā€Ø </a> </li>
  • 137. PERFORMANCE AS USER EXPERIENCE Steps for better performance 1. Use native features whenever possible 2. Only include assets you actually need 3. Optimize everything 4. Think about when you load assets 5. Consider how you load assets 6. Only load assets when they add value 146
  • 138. Every choice weā€Ø make affects ourā€Ø usersā€™ experiences
  • 139. Letā€™s spend our time toā€Ø save it for our users
  • 140. Speedy performance isā€Ø a great user experience