52
jQuery and Web Performance Dave Methvin President, jQuery Foundation Lead Developer, jQuery Core

jQuery Conference San Diego 2014 - Web Performance

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: jQuery Conference San Diego 2014 - Web Performance

jQuery and Web Performance

Dave Methvin

President, jQuery Foundation

Lead Developer, jQuery Core

Page 2: jQuery Conference San Diego 2014 - Web Performance

● Maintains jQuery code and docs

● Supports web developers and standards

● Participates in standards process

○ W3C web standards

○ ECMA 262 (JavaScript)

● Hosts conferences (like this one!)

jQuery Foundation

Page 3: jQuery Conference San Diego 2014 - Web Performance

jQuery Core 1.11 and 2.1

• Shipped last month

• We didn't break a lot of things!

• "jQuery Served Your Way" ™

o Support for IE 6/7/8 (1.11) or not (2.1)

o Custom builds for smaller size

o Use with node, browserify, or inside apps

Page 4: jQuery Conference San Diego 2014 - Web Performance

builtwith.com

Page 5: jQuery Conference San Diego 2014 - Web Performance

jQuery Team - World Wide

Page 6: jQuery Conference San Diego 2014 - Web Performance

http://contribute.jquery.org

Page 7: jQuery Conference San Diego 2014 - Web Performance

PERFORMANCE

Page 8: jQuery Conference San Diego 2014 - Web Performance

"JavaScript / jQuery /

browsers are a bad

developer environment!"

Page 9: jQuery Conference San Diego 2014 - Web Performance

A poor

workman

blames

his tools

Page 10: jQuery Conference San Diego 2014 - Web Performance

How the Programmer Sees It

JavaScript Browser

Page 11: jQuery Conference San Diego 2014 - Web Performance

Web Developer's Reality

Browser JavaScript

Mouse

CSS

HTMLContent caching

Keyboard

Touch

Screen paints

Layout calculationImage decoding

Focus management

Network requests

Page 12: jQuery Conference San Diego 2014 - Web Performance

Web Developer's Reality

Browser JavaScript

Mouse

CSS

HTMLContent caching

Keyboard

Touch

Screen paints

Layout calculationImage decoding

Focus management

Network requests

Optional

Page 13: jQuery Conference San Diego 2014 - Web Performance

How Do I Make My Page Fast?

1)Find slow stuff

2)Make it not slow

Page 14: jQuery Conference San Diego 2014 - Web Performance

What you can

measure using

tools today

How Do I Find the Slow Stuff?

Page 15: jQuery Conference San Diego 2014 - Web Performance

What you can

measure using

tools today

What you

should

measure

How Do I Find the Slow Stuff?

Page 16: jQuery Conference San Diego 2014 - Web Performance

JavaScript Loop Optimization

Page 17: jQuery Conference San Diego 2014 - Web Performance

JavaScript Loop Optimization

Slowest looping style still only

takes 140 microseconds to do

10 iterations of a loop

Page 18: jQuery Conference San Diego 2014 - Web Performance

“Programmers waste enormous amounts of

time thinking about, or worrying about, the

speed of noncritical parts of their programs,

and these attempts at efficiency actually

have a strong negative impact when

debugging and maintenance are considered.

We should forget about small efficiencies,

say about 97% of the time; premature

optimization is the root of all evil. Yet we

should not pass up our opportunities in that

critical 3%.”

--Donald Knuth

Page 19: jQuery Conference San Diego 2014 - Web Performance

“Programmers waste enormous amounts of

time thinking about, or worrying about, the

speed of noncritical parts of their programs,

and these attempts at efficiency actually

have a strong negative impact when

debugging and maintenance are considered.

We should forget about small efficiencies,

say about 97% of the time; premature

optimization is the root of all evil. Yet we

should not pass up our opportunities in that

critical 3%.”

--Donald Knuth

Page 20: jQuery Conference San Diego 2014 - Web Performance

This Should Be You, 97% of the

Time

Page 21: jQuery Conference San Diego 2014 - Web Performance

•• Client-side issues often can be solved by

"peephole" optimizations and don't require

massive architecture changes

• Many — most! — speedups can be done

near the end of the project (or even after

deployment, cough)

Finding and Fixing the 3 Percent

Page 22: jQuery Conference San Diego 2014 - Web Performance

Page Load Performance

Page 23: jQuery Conference San Diego 2014 - Web Performance

How the Browser Loads Pages

1) Browser fetches index.html

2) Pre-fetcher scans HTML for resources (images, CSS,

scripts) and requests them immediately

3) Browser loads / runs JavaScript when encountered

during parsing (since scripts can write out new HTML!)

4) When HTML is fully loaded and parsed, browser calls

DOMContentLoaded handlers (jQuery .ready())

5) Browser does initial rendering of the page (finally the

user sees something!)

Page 24: jQuery Conference San Diego 2014 - Web Performance

Now It May Seem Obvious, But...

• Resources not already in the HTML file can't

be prefetched, resulting in further delayso e.g. stuff injected by your JavaScript/jQuery

• JS frameworks or initial content rendered

from some client-side templates can make

the prefetcher useless

Page 25: jQuery Conference San Diego 2014 - Web Performance

Manual Prefetching

Lets you tell the browser get a running start on

template content or deeper pages in the site.

<link rel="dns-prefetch" href="media.mysite.com">

<link rel="prefetch" href="/img/kitten.jpg">

Page 26: jQuery Conference San Diego 2014 - Web Performance

YSlow

Page 27: jQuery Conference San Diego 2014 - Web Performance

Google PageSpeed

Page 28: jQuery Conference San Diego 2014 - Web Performance

modern.IE

Page 29: jQuery Conference San Diego 2014 - Web Performance

webpagetest.org

Page 30: jQuery Conference San Diego 2014 - Web Performance

Here Are Your Blocking Resources

Page 31: jQuery Conference San Diego 2014 - Web Performance

Here Are Your Blocking Resources

Advertising!

Page 32: jQuery Conference San Diego 2014 - Web Performance

You Have 16 Milliseconds … Begin

60 frames/second ~ 16 milliseconds/frame

• Long-running operations can make the page

appear "janky" rather than smooth

• Really long-running operations can make the

page appear unresponsive to the user

Page 33: jQuery Conference San Diego 2014 - Web Performance

It Happens in 16 Milliseconds?

From High Performance Browser Networking by Ilya Grigorik (O'Reilly)

Page 34: jQuery Conference San Diego 2014 - Web Performance

Adventures in Dirty Layout

:visible

:hidden

Page 35: jQuery Conference San Diego 2014 - Web Performance

"The Dot That Ate Performance"

console.time("init");

$("body").removeClass("activated");

$("p:visible").css("color", "blue");

console.timeEnd("init");

Page 36: jQuery Conference San Diego 2014 - Web Performance

"Hey Browser Can I Bug You?"

30 ms

Page 37: jQuery Conference San Diego 2014 - Web Performance

What If We Track Visibility?

console.time("init");

$("body").removeClass("activated");

$("p.visible").css("color", "blue");

console.timeEnd("init");

Page 38: jQuery Conference San Diego 2014 - Web Performance

"Never Mind Browser, I Know This"

8 ms

Page 39: jQuery Conference San Diego 2014 - Web Performance

Chrome's Yellow Triangle

Page 40: jQuery Conference San Diego 2014 - Web Performance

IE11: Layout after offsetWidth/Height

Page 41: jQuery Conference San Diego 2014 - Web Performance

●Look out for :visible or :hidden

● Minimize document-wide style/class

changes

○ Use data- attrs or jQuery `.data()` if non-stylistic

● Get JavaScript out of the path

○ CSS transitions

○ CSS animations

Avoiding Forced Layout

Page 42: jQuery Conference San Diego 2014 - Web Performance

Using Dev Tools Profilers

When JavaScript really is the

problem (or seems to be), a

profiler can find the hot spots.

Page 43: jQuery Conference San Diego 2014 - Web Performance

A Real Site: gimmickbook.com

Page 44: jQuery Conference San Diego 2014 - Web Performance

• Stutters during infinite scroll

• Seems to get worse as the page grows

• Using the jQuery Masonry plugin

What's Wrong?

Page 45: jQuery Conference San Diego 2014 - Web Performance

What's Wrong?

Faster!

Page 46: jQuery Conference San Diego 2014 - Web Performance

Forced Layout/Reflow

Chrome's Event tab shows JavaScript has forced layouts

Page 47: jQuery Conference San Diego 2014 - Web Performance

Chrome Profile ("Tree")

Page 48: jQuery Conference San Diego 2014 - Web Performance

IE 11 Profile ("Call Tree")

Page 49: jQuery Conference San Diego 2014 - Web Performance

What Does This Code Look Like?

Page 50: jQuery Conference San Diego 2014 - Web Performance

Moral of the Story

Infinite scroll should not be used with

full-page layout algorithms!

In this case, the plugin could be

changed to only lay out the new

items, since nothing above them

changed.

Page 51: jQuery Conference San Diego 2014 - Web Performance

You Have the Tools, Use Them!

Page 52: jQuery Conference San Diego 2014 - Web Performance

Twitter: @davemethvin

GitHub: @dmethvin

IRC (Freenode): DaveMethvin #jquery-dev

Email: [email protected]

$("#talk")

.find(".useful")

.append(contactInfo)

.end();