Top Banner
Web Apps and more mockee@douban http://bit.ly/IAhFE5
79

Web Apps and more

Jan 15, 2015

Download

Technology

Yan Shi

QCon Beijing 2012
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Web Apps and more

Web Apps and moremockee@douban

http://bit.ly/IAhFE5

Page 2: Web Apps and more

HTML5Once again...

Page 3: Web Apps and more

http://blog.whatwg.org/html-is-the-new-html5

Standard ?!

http://burningbird.net/node/156

http://www.w3.org/2011/02/htmlwg-pr.html

Page 4: Web Apps and more

"New open standards created in the mobile era, such as HTML5, will win on mobile devices. "

http://www.apple.com/hotnews/thoughts-on-flash/

Steve JobsApril, 2010

Page 5: Web Apps and more

"HTML5 is now universally supportedon major mobile devices.  This makes HTML5 the best solution for creating and deploying content in the browser across mobile platforms."

http://blogs.adobe.com/conversations/2011/11/flash-focus.html

Danny WinokurNovember 9, 2011

Page 6: Web Apps and more

http://gs.statcounter.com/press/mobile-internet-usage-is-doubling-year-on-year

Page 7: Web Apps and more

KeywordsIdentifying Web Apps

Page 8: Web Apps and more

Self Contained   

Functional

Immersive

Interactive

Work Offline

Device Aware

Ajaxcellent

New Navigable

http://www.html5rocks.com/webappfieldguide/know-your-apps/app-checklist/

Page 9: Web Apps and more

Conceptsdamned...

Page 10: Web Apps and more

Mobile App Web

Desktop

Native

Hybrid

Page 11: Web Apps and more

Worry aboutBrowsers & Devices

Page 12: Web Apps and more

Top 9 Mobile Browsers in China

Page 13: Web Apps and more

Top 12 Browser Versions in China

Page 14: Web Apps and more

RangeComic

Page 15: Web Apps and more

Top 10 Browsers in Douban

Google Analytics

Page 16: Web Apps and more

Top 10 Mobile Devices in Douban

Google Analytics

Page 17: Web Apps and more

Real WorldDouban Read

http://read.douban.com

Page 18: Web Apps and more

Submission System

Author Editor

WYSIWYG

Page 19: Web Apps and more
Page 20: Web Apps and more

legend

dimensionsalign

upload

Page 21: Web Apps and more

<figure> <img src="figure.png" alt="" /> <figcaption> <p>figure caption</p> </figcaption></figure>

<div class="figure"> <img src="figure.png" alt="" /> <div class="legend"> <p>figure caption</p> </div></div>

Semantics Elements

Page 22: Web Apps and more

Semantically highlight parts of text

<mark>

Page 23: Web Apps and more

Web Reader

Page 24: Web Apps and more
Page 25: Web Apps and more

ContentAdaptation

main techniques

Page 26: Web Apps and more

Responsive Web Design

Mobile First

Progressive Enhancement

Server-side Adaptation

Page 27: Web Apps and more

http://www.alistapart.com/articles/responsive-web-design/

Responsive Web Designby ETHAN MARCOTTE

Page 28: Web Apps and more

Layout

Grids

Media Queries

Responsive

http://www.lukew.com/ff/entry.asp?1514

Page 29: Web Apps and more

Bootstraphttp://markdotto.com/bs2/docs/

Framelesshttp://framelessgrid.com/

1140 Grid

Less Framework 4

http://cssgrid.net/

http://markdotto.com/bs2/docs/

Golden Grid Systemhttp://goldengridsystem.com/

Page 30: Web Apps and more

Media Queries

Page 31: Web Apps and more

Syntaxmedia_query_list : S* [media_query [ ',' S* media_query ]* ]? ;media_query : [ONLY | NOT]? S* media_type S* [ AND S* expression ]* | expression [ AND S* expression ]* ;expression : '(' S* media_feature S* [ ':' S* expr ]? ')' S* ;

http://www.w3.org/TR/css3-mediaqueries

Page 32: Web Apps and more

@media only screenand (max-device-width: 1024px)and (orientation: portrait), (-webkit-min-device-pixel-ratio: 2) and (max-device-width: 640px) { ... }

Page 33: Web Apps and more

window.matchMedia

// get MediaQueryListvar mql = window.matchMedia( 'screen and (orientation: portrait)'); mql.addListener(function(mql){ if (mql.matches) { console.log('portrait'); } else { console.log('landscape'); }});

Page 34: Web Apps and more

matchMedia() polyfill

http://www.nczonline.net/blog/2012/01/03/css-media-queries-in-javascript-part-1/

document.createElement('div');

make sure it's hidden

create a <style> node with a media attribute

set a CSS rule applied to a <div>

check to see if the style has been applied

return { matches: bool, media: ma }

Page 35: Web Apps and more

orientation: landscape

Page 36: Web Apps and more
Page 37: Web Apps and more

New Navigable

Paneltable of contents

Progress

Page 38: Web Apps and more
Page 39: Web Apps and more
Page 40: Web Apps and more
Page 41: Web Apps and more
Page 42: Web Apps and more
Page 43: Web Apps and more
Page 44: Web Apps and more

Original

Large

Medium

Small

Retina ?

Media Queries

Page 45: Web Apps and more

Mobile First

Bryan Rieger

Desktop

Mobile First

Page 46: Web Apps and more

Fixed-Layout Reflowable

Format

Adobe PDF

PostScript

Kindle Cloud Reader

Google Books

iBook Author(landscape)

Plain Text

Page 47: Web Apps and more

Reflowing & Paging

text block

page break

image block

type page

Page 48: Web Apps and more

Blank or Float

Zoom or Crop

Page 49: Web Apps and more

Web Workers

Inline WorkersWebKitBlobBuilderMozBlobBuilder

Handling Errors"message", "error"

Use CasesPrefetching Data

Processing large arrays, humungous JSON responses

http://www.html5rocks.com/en/tutorials/workers/basics/

Updating many rows of a local web database

Page 50: Web Apps and more

paging...

render

paging in background threads

render

Page 51: Web Apps and more

Prerender

Book Store

Reader

Reader

<link rel="prerender" href="http://read.douban.com/reader" />

http://prerender-test.appspot.com/https://developers.google.com/chrome/whitepapers/prerender

Page 52: Web Apps and more

Page Visibility API

document.addEventListener( 'visibilitychange', function(e) { // document.visibilityState;}, false);

visibilityState

visible hidden prerender

(webkit / moz)

Page 53: Web Apps and more

Store Reader

if (document.visibilityState === 'hidden' || document.visibilityState === 'prerender' || document.hidden === 'ture') { stopSyncReadingProgress();}

http://www.w3.org/TR/2011/WD-page-visibility-20110602/

Page 54: Web Apps and more

SVGConfigure Web Server MIME types

".svg" => "image/svg+xml"

Creating & Converting & Optimizing

SVG-editAviary Raven

ScourVector Magic

Page 55: Web Apps and more

// fallback for IE 6/7/8background: url(icons.png); // for modern browsersbackground: rgba(0,0,0,0) url(icons.svg);

SVG in CSS backgrounds

IE 6/7/8 don't support rgba color valueswill automatically ignore this rule

http://caniuse.com/#feat=svg-css

Page 56: Web Apps and more

Touch Events

touchstarttouchmovetouchend

touchcancel

touchInfo

init

update

use

clear

touches Array (1 or 11)

pageX, pageY

time

thresholds

Gestures

Page 57: Web Apps and more

Gesture

Swipeup, right, down, left

Tapsingle, double; hold

Pinchin, out; rotate

Page 58: Web Apps and more

Scrolling

iScroll 4

Scrollability

-webkit-overflow-scrolling: touch;

Native

Pinch / Zoom, Pull up/down to refresh,Customizable scrollbars

by Joe Hewitt

http://joehewitt.com/2011/10/05/fast-animation-with-ios-webkit

Page 59: Web Apps and more

FullscreenrequestFullscreen

exitFullscreen

fullscreenElement

webkitRequestFullScreen

mozRequestFullScreen

http://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html

webkitCancelFullScreen

mozCancelFullScreen

webkitCurrentFullScreenElement

mozFullScreenElement

fullscreenEnabled mozFullScreenEnabled

webkitIsFullscreenisFullscreen

Page 60: Web Apps and more

Events:fullscreenchange, fullscreenerror

Compatibility:

F11

webkitRequestFullScreen( Element.ALLOW_KEYBOARD_INPUT);

Page 61: Web Apps and more

http://code.google.com/p/chromium/issues/detail?id=95344

Issue 95344: webkitRequestFullScreen results in a black background

document.documentElement.webkitRequestFullScreen();

Page 62: Web Apps and more

Offline

manifest file 

● MIME type: text/cache-manifest● Same origin (domain & scheme) 

Handling Events 

checking, error, update, obsolete, cached,downloading, updateready

http://www.w3.org/TR/html5/offline.html

Page 63: Web Apps and more

CACHE MANIFEST# version 1.0.1

/ark/logo.png favicon.ico

app.html#reader

http://img3.douban.com/pics/cover.png

/ark/js/*

CACHE:

NETWORK:

# online whitelist

/j/reader/

#*

FALLBACK:fallback.html

Page 64: Web Apps and more

CACHE MANIFEST# version 1.0.1

/ark/logo.png favicon.ico

app.html#reader

http://img3.douban.com/pics/cover.png

/ark/js/*

CACHE:

NETWORK:

# online whitelist

/j/reader/

#*

FALLBACK:

fallback.html

Only one file per line.

A full file name is required, no wildcards allowed.

Can't include fragment identifiers.

Page 65: Web Apps and more

* Enhance Application Cache for better performance:

/ark/icon-reader.svg , ETag: ...app.html ETag: ... , Last-Modified: ...

Server Clientupdated manifest file

re-fetch each resoucenewer ? re-fetch : 304

with additional meta-data

only re-fetch definitely updated files 

Reduces network bandwidth & latency

Page 66: Web Apps and more

Compatibility

window.applicationCache

checking

noupdate

downloading updateready

swapCache()

cachedi

progress

Page 67: Web Apps and more

Detecting Connection

if (navigator.onLine) { // send data to server} else { // use Web Storage or Database}

window.addEventListener( 'online', function(e) { // sync data with server}, false); notes & comments

reading progress

Page 68: Web Apps and more

For iOS

Web clip icons

<link rel="apple-touch-icon" sizes="" href="" />

iPhone 57x57iPhone Retina 114x114iPad 72x72iPad Retina 144x144

http://developer.apple.com/library/ios/#documentation/userexperience/conceptual/mobilehig/IconsImages/IconsImages.html

Page 69: Web Apps and more

Specifying startup image

<link rel="apple-touch-startup-image" href="img/ipad-landscape.png" media="screen and (min-device-width: 481px) and (max-device-width: 1024px) and (orientation:landscape)" />... iPad - landscape (768-20)x1024iPad - portrait 768x(1024-20)iPad Retina ...iPhone ...iPhone Retina .........

Page 70: Web Apps and more

Viewport

Remove address (and button) bar

window.scrollTo(0, 1);

'load', 'orientationchange'

location.hash, setTimeout

<meta name="apple-mobile-web-app-capable" content="yes">

DEMO

Change status bar style

<meta name="apple-mobile-web-app-status-bar-style" content="black">

// default, black, or black-translucent

Page 71: Web Apps and more

Framework

Page 72: Web Apps and more

W3C Selectors API

Structuralization

Modules & Widgets

mini-framework

File & Module Loader

Backbone.js, micro-

RequireJS, Oz.js, Do.js

document.querySelector

Touch, Fx, Overlay

http://www.mindmeister.com/143758104/douban-read

Page 73: Web Apps and more
Page 74: Web Apps and more

Debugger

Page 75: Web Apps and more

WebkitDeveloper Tools

UA

Page 76: Web Apps and more

weinre

http://phonegap.github.com/weinre/

friends of

Page 77: Web Apps and more

Adobe Shadow

http://labs.adobe.com/downloads/shadow.html

Page 78: Web Apps and more

http://forums.adobe.com/docs/DOC-1674

Weinre Wrapper

must be connected to the Internet

need to use machine's public IP address

some updates in Chrome are not shown on devices

╮(╯_╰)╭

Page 79: Web Apps and more

Thx:)

douban.com/people/mockee/blog: mockee.com twitter: @mockee

[email protected]