Improving Perceived Performance

Estella González Madison

Web Architect at 

@chicagoing

We've spent the past year trying to improve blurb.com's page speed

 generous cache settings

Gzip

minification & concatenation

We were already using best practices

 

… but this wasn't enough

… clean up our CSS & JS

When we got started, our approach was to reduce the page weight

 unused CSS rules by 50%

page requests by up to 33%

 overall page weight by 50%

We reduced

… but using Webpagetest to measure performance, our page speed only improved slightly

Drupal

• included unused CSS & JS

• had excessive HTML elements

• was unreliable

• managed by an expensive third party

Then our allies in DevOps helped us

We replaced Drupal with

We used Google Page Speed Insights and WebPageTest.org for before and after tests

Our page speed scores got
worst

We ignored perceived performance

Perceived performance?

How quick a user thinks your site is

PageSpeed Insights & WebPagetest measure how quickly content appears to the user

PageSpeed Insights takes into account the speed at which above the fold content is rendered.

We stopped loading TypeKit fonts synchronously

Our designers & product team were fine with the flash of unstyled text (FOUT) once we showed them the improved page speed scores

We stopped loading our view-specific JavaScript asynchronously

Some of our UI components are visually set up with JavaScript

We inlined the CSS for our most used above the fold component

This had the biggest impact on our page speed scores

Before Hero banner at 1.38s

After Hero banner at 602ms

John Resig discussed inlining CSS to improve Khan Academy's performance

… at ManhattanJS in April 2016

We ran all of our images through lossless image compressors

And automated this for our sprites

We achieved our goals

• PageSpeed Insights: 80% for desktop

• Webpagetest: 2500 or less

We have more work to do

… and a ton more to learn

Improve our mobile performance

Optimize our critical rendering path

Divide our main stylesheet into three separate files based on media queries (mobile, tablet, desktop)

<link rel="stylesheet" href="mobile.css">
<link rel="stylesheet" href="tablet.css"
  media="(min-width:750px)">
<link rel="stylesheet" href="desktop.css"
  media="(min-width:960px)">

Use appropriate image sizes for device

Automatically size assets & incorporate better responsive images (Picturefill)

Hope that browsers extend CSS attr() support

… will facilitate working with responsive background images on reusable modules

<div class="hero-banner" 
  data-bg="http://assets.blurb.com/bg.png" 
  data-bg2x="http://assets.blurb.com/bg2x.png"></div>

.hero-banner { background: attr(data-bg url); }
@media ([...]) {
  .hero-banner { background: attr(data-bg2x url); }
}

Reduce our 3rd party marketing scripts

50% of our requests are 3rd party scripts used for marketing & tracking

Resources

Understanding UX and Hacking Perceived Performance

Tammy Everts at NY Web Performance Meetup

Time is Money

Tammy Everts

Designing for Performance

Lara Hogan

High Performance Browser Networking

Ilya Grigorik

Delivering the goods

Paul Irish

Jed Schmidt at TexasJS 2015

That's it!

Questions?

Improving Perceived Performance

By Estella Gonzalez Madison

Improving Perceived Performance

  • 1,793