sebastian burkhart — berlin.apps.js nov 2012 talk
TRANSCRIPT
CopilotCreating a mobile web app in 8 days: What we learned.
Friday, November 30, 12
Sebastian Burkhart
github: opyhtwitter: opyhapp.net: hypo
working at bitcrowd.net, Berlin
Friday, November 30, 12
Content: Technical & Design pitfalls to avoid
Friday, November 30, 12
= Checklist for your mobile projects
Friday, November 30, 12
Friday, November 30, 12
Friday, November 30, 12
Friday, November 30, 12
Friday, November 30, 12
Friday, November 30, 12
App specs
Friday, November 30, 12
Minimal Rails appBackbone.EventsBackbone.Router
Zepto
App specs
Friday, November 30, 12
Used for -like drill-down navigation
and -like side-bar menu
swipe.js
Friday, November 30, 12
Has touch event handlers +transform / transition CSS
swipe.js
Friday, November 30, 12
Remove display: table-row for speed!
swipe.js
Friday, November 30, 12
Micro MVC framework
Friday, November 30, 12
Inspired by iOS UIKit ViewController classes
Micro MVC framework
Friday, November 30, 12
UITabBarController + UINavigationControllers
Micro MVC framework
Friday, November 30, 12
Technical lessons
Friday, November 30, 12
Your desktop browser lies. :)
Friday, November 30, 12
Test every browser / device combination.
Friday, November 30, 12
Chrome/Nexus 4 ≠ Chrome/Galaxy S III ≠ built-in browser/Samsung S III
Test every browser / device combination.
Friday, November 30, 12
In our case: iPhone 3G faster than Galaxy S3
Test every browser / device combination.
WTF
Friday, November 30, 12
→ Don't develop with only one device type.
→ You will need to debug directly on your devices (see Emma's talk).
Friday, November 30, 12
iOS• Use Safari's Inspector via USB
• Enable debugging in your phone settings
• Enable Develop menu in desktop Safari preferences
• Connect phone via USB
• Open inspector via Develop menu item
Android• Download Android SDK
• Enable USB web debugging on phone (Settings > Advanced > Developer tools)
• Connect phone via USB
• Use adb forward tcp:9222 localabstract:chrome_devtools_remote on the command line to start a debugging server
• Get a remote inspector running inside your desktop browser by navigating to localhost:9222
• Often proposed on the web, but: adb logcat is not reliable for seeing console.log output
Friday, November 30, 12
Loading too many images will crash your browser
Friday, November 30, 12
overflow: scrollis working now.
What’s cool:
Friday, November 30, 12
overflow: scrollis working now (Almost.)
What’s cool:
Friday, November 30, 12
overflow: scrollAvoid more than one top element
Friday, November 30, 12
overflow: scrollUse it together with -webkit-overflow-
scrolling: touch to enable native scrolling with bounce and momentum
Friday, November 30, 12
overflow: scroll
Build a fallback solution if you need to support older devices
Friday, November 30, 12
scrollTop is broken on Android
https://code.google.com/p/android/issues/detail?id=19625
(You can’t set it via JS.)
Friday, November 30, 12
scrollTop is broken on AndroidNo good solutions available: Libs like iScroll-4 don’t work reliably Fallback to a non-single-page app? Ignore and wait for browser updates? Use transforms instead?
Friday, November 30, 12
scrollTop is broken mkII= Many Android browsers reset the scrollTop property to 0 when appending aDOM element.
Friday, November 30, 12
300ms lag on tap eventsMobile browsers wait for double-tap events.
If you want a native app-like feeling: create your own tap event handling.
Friday, November 30, 12
Expect weird bugsSome examples following…
Friday, November 30, 12
Expect weird bugsSwallowed events (many browsers)
Friday, November 30, 12
Expect weird bugs
A speci"c <div> had to wider than 355px to not break performance down completely
(iOS)
Friday, November 30, 12
Expect weird bugs
Touch events were delivered to wrong elements (Android, S III, built-in browser)
Friday, November 30, 12
Expect weird bugsFacebooks new mobile comment widget
seems not to work on mobile (the desktop version does, though)
Friday, November 30, 12
About performance…
Friday, November 30, 12
About performance…Don't forget your HTML/JS apps compete with native
apps.
Friday, November 30, 12
Requests may be very slow
Friday, November 30, 12
Requests may be very slowHave HTML content preloaded if possible.
HTML strings in a JS map worked well for us.
Friday, November 30, 12
Add caching on server-side
Friday, November 30, 12
Add caching on server-sideMake your served content state-independent.
Use caching services, e.g. fastly.
Friday, November 30, 12
Make rendering fast
Friday, November 30, 12
Make rendering fastPrefer native scrolling and positioning over transforms
Friday, November 30, 12
Make rendering fast
Friday, November 30, 12
Make rendering fastAvoid z-index
Friday, November 30, 12
Make rendering fast
Friday, November 30, 12
Make rendering fastAvoid big <div>s, their content may have to be cached in
graphics memory as bitmap
Friday, November 30, 12
Make rendering fast
Friday, November 30, 12
Make rendering fastAvoid jQuery/Zepto's DOM manipulation methods like
append() etc., as they traverse/copy whole DOM structures on JS level.
Friday, November 30, 12
Make rendering fast
Friday, November 30, 12
Make rendering fastUse exactly sized images for smoother scrolling (might
be much effort if you have to support many display sizes…)
Friday, November 30, 12
Make rendering fast
Friday, November 30, 12
Make rendering fastGood news: CSS box-shadows and gradients are fast on
most devices.
Friday, November 30, 12
Make rendering fast
Friday, November 30, 12
Make rendering fastGood news: CSS box-shadows and gradients are fast on
most devices.
(...but make them <10px wide. And use inset shadows sparingly, and not over images.)
Friday, November 30, 12
Design for small displays
Friday, November 30, 12
iOS Human Interface Guidelines
Friday, November 30, 12
“44 x 44 points is the comfortable minimum size of a tappable UI element.”
http://bit.ly/V6OmO9
Friday, November 30, 12
Touchable UI areasshould be big
Friday, November 30, 12
Responsive design
Friday, November 30, 12
Responsive designbackground-position: 50% 30%
background-size: cover
…"ts landscape and portrait images.
Friday, November 30, 12
Responsive design
Don’t forget to vary screen height when testing CSS media queries
Friday, November 30, 12
Responsive design
Don’t forget to vary screen height when testing CSS media queries
very low in landscape mode
Friday, November 30, 12
Responsive design
very low in Facebook app
Don’t forget to vary screen height when testing CSS media queries
Friday, November 30, 12
Responsive design
low because of toolbars :(
Don’t forget to vary screen height when testing CSS media queries
Friday, November 30, 12
Responsive designDon’t hide the address bar just because you can.
Friday, November 30, 12
Sebastian Burkhart
github: opyhtwitter: opyhapp.net: hypo
working at bitcrowd.net, Berlin
Friday, November 30, 12