63
ArcGIS API for JavaScript Building Mobile Web Apps Andy Gup, @agup Lloyd Heberlie, @lheberlie March 8–11, 2016 | Palm Springs, CA Esri Developer Summit

ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

  • Upload
    others

  • View
    11

  • Download
    0

Embed Size (px)

Citation preview

Page 1: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

ArcGIS API for JavaScriptBuilding Mobile Web Apps

Andy Gup, @agupLloyd Heberlie, @lheberlie

March 8–11, 2016 | Palm Springs, CA

Esri Developer Summit

Page 2: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

• Introductions• Expectations• Agenda• Resources

Welcome

Page 3: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

Why are we here?

Page 4: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

Resources

• https://github.com/lheberlie/mobile-webapps-js• https://github.com/lheberlie/mobile-webapps-js/blob/develop/Resources.md

Page 5: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

Lloyd Heberlie

Mobile resources in the API

Page 6: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

Lloyd HeberlieDesigning for mobile

Page 7: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

Touch aware map

Page 8: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

HTML 5 input types

type=“email” type=“tel” type=“date”

Page 9: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

Geocoder, LocateButtonesri/dijit/Geocoder

esri/dijit/LocateButton

Page 10: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

Popup Mobile

esri/dijit/PopupMobile

Page 13: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

Custom components

Custom basemap switcher

Page 14: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

Lloyd HeberlieDesigning for mobile

Page 15: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

Lloyd Heberlie

Productivity and code management

Page 16: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

Setup a developer machine

Source Control

Code quality and verification

web server

Page 17: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

Code formatting and management

Page 18: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

Automation and continuous integration

Page 19: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

• JSLint• JSHint

Code validation

Page 20: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

CSS preprocessors

Page 21: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

Lloyd Heberlie

Productivity and code management

Page 22: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

Lloyd Heberlie

Debugging and testing for mobile

Page 23: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

Emulators / SimulatorsOpera Mobile Emulator iOS Simulator * Windows Phone Emulator * Android Emulator

Page 24: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

Physical devices

http://blog.adtile.me/2014/01/08/adtile-device-lab/

Page 25: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

Remote debugging

• Safari Web Inspector Remote• Google Chrome remote debugging• Adobe Edge Inspect

- Synchronized screen capture, device details- Node.js (weinre local)

• Web Inspector Remote (weinre)

Page 26: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

Enable Safari remote web inspection

Page 27: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

Safari remote debugging

Page 28: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

Safari remote debugging

Page 29: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

Chrome remote debugging

Page 30: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

Chrome remote debugging

Page 31: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

Adobe Edge Inspect

Page 32: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

Adobe Edge Inspect

Page 33: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

Adobe Edge Inspect

device_model = iPhonedevice_res = 1136x640orientation = portraitos_name = iOSos_version = 7.0.4pixel_density = 326 ppi

device_model = LGE Nexus 5device_res = 1080x1776orientation = portraitos_name = Androidos_version = 4.4.2pixel_density = 480 dpi

device_model = iPaddevice_res = 1024x768orientation = landscapeos_name = iOSos_version = 7.0.4pixel_density = 132 ppi

Page 34: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

Lloyd HeberlieDebugging mobile

Page 35: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

Many UI frameworks

BootstrapAngular.jsjQueryIonic…...?

Page 36: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

Frameworks on github.com/esri

github.com/Esri/bootstrap-map-js

github.com/Esri/angular-esri-map

Page 38: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

Add CSS

Page 39: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

Set up the div

Page 40: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

Load BootstrapMap

Page 41: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

Load Bootstrap + jQuery

Page 42: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

Mobile Popups

Page 43: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

Popups

Tablets Smartphones

InfoWindow Yes No

MobilePopup Yes Yes

Page 44: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

InfoWindow

Text may be hard to readNot touch friendlyNot centered on rotate

Page 45: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

MobilePopup

ReadableTouch friendlyRotate friendly

http://developers.arcgis.com/javascript/samples/mobile_arcgis/

Page 46: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

Custom Popups

Modal popup example

http://andygup.github.io/modal-popup-js/

Page 47: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

Mobile Performance

Page 48: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

Smartphone vs Your Laptop

App performance not the sameInternet speeds fluctuate/limitedPower limitations

Page 49: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

Reducing UI Jank (Jerkiness)

Interruptions in frame production (fps) and latency

CheckerboardingLong pausesScrolling latencyDelayed animation start

Page 50: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

Common causes of Jank

Slow internet response

Data processing overload

Excessive garbage collection

Page 51: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

HTTP response times

Minimize, concatenate, optimizeMake sure server uses gzip compression!Use Query MODE_ONDEMANDLimit the Extent and use layer dependenciesGeneralize features

DEMO

Page 52: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

Using Web Workers

Move expensive tasks off main thread!

Parsing large number of featuresjson.parse() blocksSerialization/deserialization costsTimers

Page 53: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

Background threadMain UI thread

Page 54: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

Background threadMain UI thread

SER

IALI

ZE /

DE-

SER

IALI

ZE

CPU

Page 55: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

Using Web Workers

https://github.com/andygup/earthquake-heatmap-layer

Example:

Parsing GeoJSON

Page 56: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

Example: 7x Performance boost!

1MB of data with web workers

Without web workers

Page 57: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

Garbage collection

De-reference any variables no longer in use

var feature = { feature: { … }};feature = null;

Page 58: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

Managing memory in loops

Re-use objects where possibleVersus new Object();

Reset arrays: myArray.length = 0;Versus this: myArray = [];

Page 59: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

Geolocation

Advanced Geolocation Session – 10a – 11a Friday

Outdoor geolocation – turn off WiFiNot very accurate – 3 – 10 meters

Page 60: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

Hybrid – PhoneGap/Cordova

Wednesday 10:30am, Mesquite B

github.com/Esri/quickstart-map-phonegap

Page 61: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator

Resources

• https://github.com/lheberlie/mobile-webapps-js• https://github.com/lheberlie/mobile-webapps-js/blob/develop/Resources.md

Page 63: ArcGIS API for JavaScript Building Mobile Web Appsproceedings.esri.com/library/userconf/devsummit16/papers/dev_int_180.pdf · Emulators / Simulators. Opera Mobile Emulator. iOS Simulator