98
A Day Building Fast, Responsive, Extensible Single Page Applications Chris Love @ChrisLove Love2Dev.com

A Day Building Fast, Responsive, Extensible Single Page Applications

Embed Size (px)

Citation preview

Page 1: A Day Building Fast, Responsive, Extensible Single Page Applications

A Day Building Fast, Responsive, Extensible

Single Page Applications

Chris Love

@ChrisLove

Love2Dev.com

Page 2: A Day Building Fast, Responsive, Extensible Single Page Applications

Who Am I

• Front-End Web Dev MVP

• ASP Insider

• Internet Explorer User Agent

• Author

• Speaker

• Tweaker, Lover of Web, JavaScript, CSS & HTML5

• @ChrisLove

• https://love2dev.com

Page 3: A Day Building Fast, Responsive, Extensible Single Page Applications

Slide Deck & Source Code

• Normal Slide Decks – http://slidesha.re/15YTrTT

• Today’s Slides - http://bit.ly/1m66Hu6

• Source Code – http://GitHub.com/docluv/movies

Page 4: A Day Building Fast, Responsive, Extensible Single Page Applications

What Does A Modern

Web App Look Like?

What is Changing the

Definition of the Web?

What Does the Developer

Experience Look Like?

Page 5: A Day Building Fast, Responsive, Extensible Single Page Applications

Defining the Modern Web Application

Page 6: A Day Building Fast, Responsive, Extensible Single Page Applications

Its Not This

Page 7: A Day Building Fast, Responsive, Extensible Single Page Applications
Page 8: A Day Building Fast, Responsive, Extensible Single Page Applications

Its Not This

326 Http Requests

23 Style Sheets 80kb

84 Images 587kb

101 External Scripts 806kb

229 Primed Http Requests

76 seconds to fully load

Multiple Unminimized Resources

Speed Index 5949

12+MB of Content

Multiple 404s

Mostly Uncached Content

Page 9: A Day Building Fast, Responsive, Extensible Single Page Applications

Performance

• Multiple Studies Show Correlation Between Conversions & Speed

• 57% Will Abandon a Slow Site After 3 Seconds

• We Have to Concentrate 50% Harder For Slow Sites

• 78% Have Felt Stress or Anger With Slow Sites

• 44% Say Slow Sites Make Them Anxious

• 4% Have Thrown Their Phone

Page 10: A Day Building Fast, Responsive, Extensible Single Page Applications

Matt Cutts

"Also take a step back for a minute and consider the intent of this change: a faster web is great for everyone, but especially for users. Lots of websites have demonstrated that speeding up the user experience results in more usage. So speeding up your website isn’t just something that can affect your search rankings–it’s a fantastic idea for your users.“

http://bit.ly/SPPB4k

Page 11: A Day Building Fast, Responsive, Extensible Single Page Applications

Time is Money

• Faster Sites Have Higher Conversion Rates

• WalMart - http://bit.ly/S1fHSZ

• Google – http://bit.ly/WajJbB

• Amazon – http://bit.ly/S3UoAj

• ShopZilla - http://bit.ly/RIQMDM

Page 12: A Day Building Fast, Responsive, Extensible Single Page Applications

WalMart

Folks at Walmart knew their pages were slow. As a for instance, initial measurement showed that an item page took about 24 seconds to load for the slowest 5% of users. Why? The usual culprits: too many page elements, slow third-party scripts, multiple hosts (25% of page content is served by partners, affiliates, and Marketplace), and various best practice no-nos

http://bit.ly/WajJbB

Page 13: A Day Building Fast, Responsive, Extensible Single Page Applications

Google’s ½ Second

Half a second delay caused a 20% drop in traffic. Half a second delay killed user satisfaction.

The lesson, Marissa said, is that speed matters. People do not like to wait. Do not make them.

http://bit.ly/TPPhUp

Page 14: A Day Building Fast, Responsive, Extensible Single Page Applications

http://bit.ly/16zFCXL

Page 15: A Day Building Fast, Responsive, Extensible Single Page Applications

Performance

• Performance Matters

• It Must Be a 1st Class Feature in Any Application

• Not an Afterthought Right Before Deployment

• 80% of Performance Is In the Client, Not the Server

• Cellular Networks Make Page Load Even Tougher• 500ms Inherent Delay

• Bandwidth Constraints

Page 16: A Day Building Fast, Responsive, Extensible Single Page Applications

Modern Web

Applications MUST Load

Fast and Respond Fast

Page 17: A Day Building Fast, Responsive, Extensible Single Page Applications

Mobile or Device Fragmentation

Page 18: A Day Building Fast, Responsive, Extensible Single Page Applications

Touch

Page 19: A Day Building Fast, Responsive, Extensible Single Page Applications

Web APIs

Page 20: A Day Building Fast, Responsive, Extensible Single Page Applications

HTML5 CSS3 JavaScript

Page 21: A Day Building Fast, Responsive, Extensible Single Page Applications

The Modern Web Hour Glass

HTML5

JavaScript

CSS3

ASP.NET.IIS

DB – SQL Server/NoSQL

Page 22: A Day Building Fast, Responsive, Extensible Single Page Applications

(API + HTML5 + CSS3 + JavaScript +

Standards Compliant Browser) *

(Touch + Mobility + Performance)

=== Great Single Page Application

Page 23: A Day Building Fast, Responsive, Extensible Single Page Applications

Let’s Code

Page 24: A Day Building Fast, Responsive, Extensible Single Page Applications

Introduction to Fluid Layouts

•Morph to Fill The ViewPort Space

•Rely on CSS• Absolute Positioning

Page 25: A Day Building Fast, Responsive, Extensible Single Page Applications
Page 26: A Day Building Fast, Responsive, Extensible Single Page Applications

DOCTYPE

Replace This:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

With This:

<!DOCTYPE html>

<html>

Page 27: A Day Building Fast, Responsive, Extensible Single Page Applications

DOCTYPE

"DOCTYPEs are required for legacy reasons. When omitted, browsers tend to use a different rendering mode that is incompatible with some specifications. Including the DOCTYPE in a document ensures that the browser makes a best-effort attempt at following the relevant specifications." http://www.w3.org/TR/html5/syntax.html#the-doctype

Page 28: A Day Building Fast, Responsive, Extensible Single Page Applications

Absolute Positioning

.site-header {position: absolute;top: 0;right: 0;left: 0;height: 80px;

}

Page 29: A Day Building Fast, Responsive, Extensible Single Page Applications

Let’s Code

Page 30: A Day Building Fast, Responsive, Extensible Single Page Applications

Responsive Web Design

• Introduced by Ethan Marcotte 2010 - bit.ly/178an9e

• Web Design Approach To Create An Optimal Viewing Experience Across All Browser ViewPorts

• Fluid Layouts

• Media Queries

• Minimal if any JavaScript Required

Page 31: A Day Building Fast, Responsive, Extensible Single Page Applications

“this unspoken agreement to pretend that we had a certain size. And that size changed over the years. For a while, we all sort of tacitly agreed that 640 by 480 was the right size, and then later than changed to 800:600, and 1024; we seem to have settled on this 960 pixel as being this like, default. It’s still unknown. We still don’t know the size of the browser; it’s just like this consensual hallucination that we’ve all agreed to participate in: “Let’s assume the browser has a browser width of at least 960 pixels.”

Jeremy Keith

bit.ly/1bhH6rw

Responsive Design

Page 32: A Day Building Fast, Responsive, Extensible Single Page Applications

“The emergence of ideas like “responsive design” and “future-friendly thinking” are in part a response to the collective realization that designing products that solve one problem in one context at a time is no longer sustainable. By refocusing our process on systems that are explicitly designed to adapt to a changing environment, we have an opportunity to develop durable, long-lasting designs that renew their usefulness and value over time.”

Wilson Miner

bit.ly/1fbq5lB

Responsive Design

Page 33: A Day Building Fast, Responsive, Extensible Single Page Applications

“Any attempt to draw a line around a particular device class has as much permanence as a literal line in the sand. Pause for a moment and the line blurs. Look away and it will be gone.

Let’s take the absolute best case scenario. You’re building a web app for internal users for whom you get to specify what computer is purchased and used. You can specify the browser, the monitor size, keyboard, etc.”

Jason Grigsby

bit.ly/KzJH9G

Responsive Design

Page 34: A Day Building Fast, Responsive, Extensible Single Page Applications

“How long do you think that hardware will be able to be found? Three years from now when a computer dies and has to be replaced, what are the chances that the new monitor will be a touchscreen?

By making a decision to design solely for a “desktop UI”, you are creating technical debt and limiting the longevity of the app you’re building. You’re designing to a collective hallucination. You don’t have to have a crystal ball to see where things are headed.

And once you start accepting the reality that the lines inside form factors are as blurry as the lines between them, then responsiveness becomes a necessity.”

Jason Grigsby

bit.ly/KzJH9G

Responsive Design

Page 35: A Day Building Fast, Responsive, Extensible Single Page Applications
Page 36: A Day Building Fast, Responsive, Extensible Single Page Applications
Page 37: A Day Building Fast, Responsive, Extensible Single Page Applications
Page 38: A Day Building Fast, Responsive, Extensible Single Page Applications

Mobile First

• Determine The Most Important Information

• Expand From There

• Start Responsive Design Mobile First

Page 39: A Day Building Fast, Responsive, Extensible Single Page Applications

Responsive Layout

Page 40: A Day Building Fast, Responsive, Extensible Single Page Applications

Responsive Layout

Page 41: A Day Building Fast, Responsive, Extensible Single Page Applications

Responsive Layout

Page 42: A Day Building Fast, Responsive, Extensible Single Page Applications

Media Queries

@media (min-width:600px) {/* Rules Here */}

@media (min-width:800px) {/* Rules Here */}

Page 43: A Day Building Fast, Responsive, Extensible Single Page Applications

Responsive Design Best Practices

•Start Small Screen First• Forces Most Important Data First

•Easier to Adjust CSS Rules

•Let Data Drive Media Queries First

• Its Ok to Use Some JavaScript•But Not Required

Page 44: A Day Building Fast, Responsive, Extensible Single Page Applications

Let’s Code

Page 45: A Day Building Fast, Responsive, Extensible Single Page Applications

Touch Your Application

Page 46: A Day Building Fast, Responsive, Extensible Single Page Applications

Touch Your Application

• Content Must Be Touchable

• Account for Fat Fingers

• Support APIs

• Mouse

• Touch (Apple)

• Pointer (MSFT & W3C)

Page 47: A Day Building Fast, Responsive, Extensible Single Page Applications

Touch Your Application

Page 48: A Day Building Fast, Responsive, Extensible Single Page Applications

Touch Your Application

• The Average Human Finger

is 11mm in Diameter

• Fingers Range from 8mm -

19mm

• Baby to Large Man

Page 49: A Day Building Fast, Responsive, Extensible Single Page Applications

Touch Your Application

• Touch Points Need Margin

• Or Separation From

Neighbors

Page 50: A Day Building Fast, Responsive, Extensible Single Page Applications

Touch Gestures

• Pan

• Pinch/Zoom

• Swipe

• Tap

• Tap + Hold

• Rotate

Page 51: A Day Building Fast, Responsive, Extensible Single Page Applications

Touch-action

• CSS Property to Help Determine How Touch is Handled

• Auto

• None

• Pan-x

• Pan-y

• Can disable Auto-zoom

• Enable Scrolling

Page 52: A Day Building Fast, Responsive, Extensible Single Page Applications

Scrolling Content

overflow: scroll;

-webkit-overflow-scrolling: touch;

-ms-overflow-style: -ms-autohiding-scrollbar;

-ms-scroll-chaining: none;

-ms-scroll-translation: vertical-to-horizontal;

Page 53: A Day Building Fast, Responsive, Extensible Single Page Applications

DeepTissue

• Abstracts Touch & Mouse APIs

• Abstracts Input Modality Gestures

• http://deeptissuejs.com

Page 54: A Day Building Fast, Responsive, Extensible Single Page Applications
Page 55: A Day Building Fast, Responsive, Extensible Single Page Applications

INPUT TYPE=XXXX

• New Input Types Drive On-Screen

Keyboards

• Drives Native Validation

• Tel, email, url, number, etc

Page 56: A Day Building Fast, Responsive, Extensible Single Page Applications

Let’s Code

Page 57: A Day Building Fast, Responsive, Extensible Single Page Applications

The Server-Side Story

• Provide Markup, CSS, JavaScript, Images

• API End Points

• Possible Legacy URL Redirects

• Deal with Search Engine Spiders and Legacy Browsers

Page 58: A Day Building Fast, Responsive, Extensible Single Page Applications

The Modern Web Hour Glass

HTML5

JavaScript

CSS3

ASP.NET.IIS

DB – SQL Server/NoSQL

Page 59: A Day Building Fast, Responsive, Extensible Single Page Applications

SPAHelper Library

• Extends ASP.NET MVC

• Custom SPAWebViewPage

• SPAModel

• SPAHelper

• http://bit.ly/1dUYLGJ

Page 60: A Day Building Fast, Responsive, Extensible Single Page Applications

SPAWebViewPage

• Must Use it as Base for MVC View

• Extends MVC’s WebViewPage• SPARenderPage

• Causes only Changed Content to be Sent to Client

• Works in Concert with Backpack to Cache Markup in localStorage

Page 61: A Day Building Fast, Responsive, Extensible Single Page Applications

SPAWebViewPage

• Must Configure View web.config file:

• <pages pageBaseType="SPAHelper.SPAWebViewPage">

Page 62: A Day Building Fast, Responsive, Extensible Single Page Applications

SPAWebViewPage

@if (!Html.HasEscapeFragment())

{

@SPARenderPage("views/home-view.cshtml")

@SPARenderPage("views/movies-view.cshtml")

@SPARenderPage("views/movie-view.cshtml")

@SPARenderPage("views/notfound-view.cshtml")

@SPARenderPage("templates/_templates.cshtml")

}

Page 63: A Day Building Fast, Responsive, Extensible Single Page Applications

SPAModel

• The SPAModel provides a base for an ASP.NET MVC single page application model

• The model has properties for the application's Title and Description

• The SetRoute function parses a SPA route to isolate the primary root

Page 64: A Day Building Fast, Responsive, Extensible Single Page Applications

SPAHelper

• The SPAHelper class is a collection of static and static ASP.NET MVC HTML Helper extension functions• SPALink

• LastUpdated

• HasEscapeFragment

• HasForceReload

Page 65: A Day Building Fast, Responsive, Extensible Single Page Applications

_escape_fragment_

• Google’s Specification for AJAX Applications

• http://bit.ly/117sTgL

• Allows Routes to be Sent to Server Via QueryString

• Server Sends Google Fully Rendered Markup

• Good Core Site Solution• Legacy Browser Version

• Andy Hume of the Guardian - http://vimeo.com/channels/smashingconf

Page 66: A Day Building Fast, Responsive, Extensible Single Page Applications

Cutting The Mustard

• Feature Detect to Determine Browser Capabilities• Never Browser Sniff

if (!('querySelector' in document) //at least IE8

|| !('localStorage' in window) //at least IE8

|| !('addEventListener' in window) //at least IE8

|| !('matchMedia' in window)) {//at least IE10

} else {

}

Page 67: A Day Building Fast, Responsive, Extensible Single Page Applications

Let’s Code

Page 68: A Day Building Fast, Responsive, Extensible Single Page Applications

The Client-Side Story

• Things You Used to Do On the Server Now Live In the Client• Routing

• Rendering

• Data Caching

• Need to be Conscience of How Browsers Work• Critical Rendering Path

• Memory Management

• Leverage HTML5 Features• Storage

• Animations

Page 69: A Day Building Fast, Responsive, Extensible Single Page Applications

Press # For More

• Routes Are Not Sent to Server

• No Request/Response Iniated

• Must Respond to Route in the Client

• #! Is the Defacto Standard

Page 70: A Day Building Fast, Responsive, Extensible Single Page Applications

Press # For More

window.addEventListener("hashchange", function (e) {

//swap the View Here

});

Page 71: A Day Building Fast, Responsive, Extensible Single Page Applications

What About These Guys?

•Angular

•Ember

•Backbone

•Durandal

Page 72: A Day Building Fast, Responsive, Extensible Single Page Applications

Common Problems

•Too Large•Try to be everything to everybody

•Memory Leaks

•Many Brittle Practices•Routing

•Virtualize Native Functionality

Page 73: A Day Building Fast, Responsive, Extensible Single Page Applications
Page 74: A Day Building Fast, Responsive, Extensible Single Page Applications

The Love2SPA Way

• SPAjs

• Backpack/Mud Bath *

• DollarBill**

• Caching AJAX Layer

• HTML Template Engine

• Deeptissue

• Toolbar, Panorama, Other Small UI Libraries

* Under Development ** jQuery Compatible

Page 75: A Day Building Fast, Responsive, Extensible Single Page Applications

The Love2SPA Way – Typical Stats

• 35-80kb minified, not gzipped JavaScript

• 20-35kb minified, not gzipped CSS

• 5-35kb minified, not gzipped HTML

• 3 Core Http Requests

• < 1 second Load Time

Page 76: A Day Building Fast, Responsive, Extensible Single Page Applications
Page 77: A Day Building Fast, Responsive, Extensible Single Page Applications

The Love2SPA Way

• Extensible• Scalable• Maintainable• Testable• Deployable• Have Tangible ROI

Page 78: A Day Building Fast, Responsive, Extensible Single Page Applications

SPAjs

• Responsible for Routing

• View Switching

• Executes Animations

• Relies on Animate.css - http://bit.ly/1hayo4s

• Executing View Onload and Unload Functions

Page 79: A Day Building Fast, Responsive, Extensible Single Page Applications

Backpack

• Stores View Markup & Templates in localStorage

• 1st Implemented by Google & Bing

• http://bit.ly/117puyn

• Implements an API expected by SPAjs

• MudBath a work in Progress

• Implements Same API

• Used IndexDB

Page 80: A Day Building Fast, Responsive, Extensible Single Page Applications

AjaxPrefilter

• Caches Data in localStorage with a TTL

• 1st Implement by Paul Irish

• http://bit.ly/117p7E9

• Can be Used with Any AJAX Implementation

• Eliminates Unnecessary HTTP Requests

Page 81: A Day Building Fast, Responsive, Extensible Single Page Applications

JavaScript Templating

• Merges JavaScript Objects with Markup

• Many Libraries

• Micro-Templating

• MUSTACHE

• Handlebars

• Generated Markup Appended to DOM

Page 82: A Day Building Fast, Responsive, Extensible Single Page Applications

JavaScript Templating

<script id="MoviePosterGridTemplate" type="text/x-mustache-template">

{{#movies}}

<div class="movie-target">

<a href="#!movie/{{id}}/{{title}}">

<img alt="{{title}}" src="{{poster}}" class="movie-grid-poster">

<figcaption class="demo-photo-caption">{{title}}</figcaption>

</a>

</div>

{{/movies}}

</script>

Page 83: A Day Building Fast, Responsive, Extensible Single Page Applications

Let’s Code

Page 84: A Day Building Fast, Responsive, Extensible Single Page Applications

Create Modular, Extensible JavaScript Application

• Functions 1st Class in JavaScript

• Functions are Objects

• var foo = {};

• All Objects have a Prototype

• new Keyword creates a new Object

• Many popular Patterns

Page 85: A Day Building Fast, Responsive, Extensible Single Page Applications

Extensible

Core

Module

Module

Module

Page 86: A Day Building Fast, Responsive, Extensible Single Page Applications

Think Like jQuery

• The jQuery Module Pattern is Familiar

• Not Hard to Implement

• Allows for Extensibility

Page 87: A Day Building Fast, Responsive, Extensible Single Page Applications

A SPA Application Module

App

View

View

View

Page 88: A Day Building Fast, Responsive, Extensible Single Page Applications

Let’s Code

Page 89: A Day Building Fast, Responsive, Extensible Single Page Applications

Building Web Applications

• Just Like C# Applications• Release

• Debug

• The Web Needs a Compiler

• 2 Great Options• Grunt

• Gulp

Page 90: A Day Building Fast, Responsive, Extensible Single Page Applications

Building Web Applications

• Grunt & Gulp Are Node Modules• http://gruntjs.com

• http://gulpjs.com

• Both have great eco-systems

• Add To package.json

• Run npm install

• Create gruntfile.js

• Grunt.cmd

Page 91: A Day Building Fast, Responsive, Extensible Single Page Applications

Let’s Code

Page 92: A Day Building Fast, Responsive, Extensible Single Page Applications

Going Offline

• Leverage the AppCache

• Create a Manifest File

• Don’t Let it be a Handicap

• http://bit.ly/117q27A

• Makes Sure Your App Will Work Without Connectivity

• Good for Caching Images and Resources

• Makes the Browser look Local Before Going to the Server

Page 93: A Day Building Fast, Responsive, Extensible Single Page Applications

Developing with AppCache is a PITA

@{if (HttpContext.Current.IsDebuggingEnabled)

{

@:<html lang="en">

}

else

{

@:<html lang="en" manifest="app.cache">

}

}

Page 94: A Day Building Fast, Responsive, Extensible Single Page Applications

Manifest File

• CACHE• lists all resources that should be downloaded for offline use

• NETWORK• identifies any URLs that require the device be connected to the network

• FALLBACK• lists replacement URLs for network URLs to be used when the device is

offline

Page 95: A Day Building Fast, Responsive, Extensible Single Page Applications

How AppCache Works

• When the browser reads the manifest file it downloads the specified resources locally

• Those resources are referred too instead of making a request to the server

• Resources are refreshed if the manifest file has been updated

Page 96: A Day Building Fast, Responsive, Extensible Single Page Applications

Let’s Code

Page 97: A Day Building Fast, Responsive, Extensible Single Page Applications

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.99http://amzn.to/1a55L89

Page 98: A Day Building Fast, Responsive, Extensible Single Page Applications

Questions