Transcript
Page 1: Optimize URL for Performance

Optimize URL for Performance

Morgan Cheng, Apr 15th 2011@morgancheng

Page 2: Optimize URL for Performance

Gawker Outage After Redesign

http://blogs.wsj.com/digits/2011/02/07/gawker-outage-causing-twitter-stir/

Page 3: Optimize URL for Performance

What The Hell?

Page 4: Optimize URL for Performance

http://lifehacker.com/#!5785979

HashBang

Page 5: Optimize URL for Performance
Page 6: Optimize URL for Performance

Why HashBang?

Page 7: Optimize URL for Performance

It All Starts With Desire for Performance

Page 8: Optimize URL for Performance

Web 1.0

Page A Page CPage B

Server

Page 9: Optimize URL for Performance

AJAX Web

One Page

Server

Page 10: Optimize URL for Performance

Fast is Not Enough

Page 11: Optimize URL for Performance

Bookmark-able

Page 12: Optimize URL for Performance

Hash Fragment is Not Sent to Server

http://lifehacker.com/#!5785979

http://lifehacker.com/#!3141592

Same PageDifferentiated by JavaScript

Page 13: Optimize URL for Performance

Navigable

Forward

Backward

Page 14: Optimize URL for Performance

Bonus: AJAX Caching

Page 15: Optimize URL for Performance

Looks Hash is enoughWhy Bang?

Page 16: Optimize URL for Performance

Audience of Web Site

Human User Search Engine Crawler

Page 17: Optimize URL for Performance

Google’s HashBang Scheme

http://code.google.com/web/ajaxcrawling/docs/specification.html

Page 18: Optimize URL for Performance

Two URLs for Same Content

http://example.com/#!12345

http://example.com/?_escaped_fragment_=12345

Page 19: Optimize URL for Performance

Only Google officially claims to support HashBang

Page 20: Optimize URL for Performance

HashBang makes your content dependent on JavaScript

Page 21: Optimize URL for Performance

Don’t Abuse Tech You Cannot Handle

Page 22: Optimize URL for Performance

Hey, but Facebook and Twitter do similar trick

Page 23: Optimize URL for Performance

So, Red Pill or Blue Pill?

Page 24: Optimize URL for Performance

Web Site or Web Application

Page 25: Optimize URL for Performance

HTML5 to Help

Page 26: Optimize URL for Performance

HTML5 History API

• history.pushState(state, newTitle, newUrl)

• history.replaceState(state, newTitle, newUrl)

• popstate event

Page 27: Optimize URL for Performance

Update URL without HashBang

history.pushState(null, null,

“http://lifehacker.com/314159”)

Current Page Doesn’t Refresh

Page 28: Optimize URL for Performance

HTML5 History API Detection

function supportHTML5History() {return !!(window.history && history.pushState);

}

Page 29: Optimize URL for Performance

When can I use HTML5 History?

http://caniuse.com/#search=history

Page 30: Optimize URL for Performance

YUI History Module

Page 31: Optimize URL for Performance

Y.History

Y.HistoryHash Y.HistoryHTML5

Page 32: Optimize URL for Performance
Page 33: Optimize URL for Performance

Hijax = Hijack + AJAX

Page 34: Optimize URL for Performance

Step 1: Build Web 1.0

<a href=“/31415926”>page one</a><a href=“/31415927”>page two</a>

Page 35: Optimize URL for Performance

Step 2: Add JavaScript

<a href=“/31415926”>page one</a><a href=“/31415927”>page two</a>

Y.delegate(‘click’, onPageClick, ‘body’, ‘a’);

Page 36: Optimize URL for Performance

Step 3: Hijack and Do AJAX

function onPageClick(ev) { if (isInternalLink(ev.target.get(‘href’)) {

ev.preventDefault(); // do AJAX to update page // update URL with Hash or History API }}

Page 37: Optimize URL for Performance

More Tricks

Page 38: Optimize URL for Performance

http://example.com/12345

http://example.com/12345#56789

Navigate

Bookmark

What about this?

Page 39: Optimize URL for Performance

Flush Inline JavaScript to Redirect<script type=“text/javascript”> if (window.location.hash) { window.location = directUrl(window.location.hash); }</script><?php flush(); ?>

http://example.com/12345#56789

http://example.com/56789

Redirect

Page 40: Optimize URL for Performance

Use Event Delegate

Page 41: Optimize URL for Performance

Don’t Over Cache

Page 42: Optimize URL for Performance
Page 43: Optimize URL for Performance

{

http://mustache.github.com/

Page 44: Optimize URL for Performance

Graceful Degradation vs.

Progressive Enhancement

Page 45: Optimize URL for Performance

Thanks


Recommended