Top Banner
Agenda 1) Preamble; 2) Cordova / Ember ecosystem; 3) ember-cordova; 4) Build an app together; 5) Performance & Optimization;
50

Agenda - Jazoonjazoon.com/autumn2016/wp-content/uploads/2016/10/Blom-Alex_How... · ember-cordova will warn you if this is not ‘hash’; config/environment.js

Jun 10, 2018

Download

Documents

hoangduong
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: Agenda - Jazoonjazoon.com/autumn2016/wp-content/uploads/2016/10/Blom-Alex_How... · ember-cordova will warn you if this is not ‘hash’; config/environment.js

Agenda

• 1) Preamble;

• 2) Cordova / Ember ecosystem;

• 3) ember-cordova;

• 4) Build an app together;

• 5) Performance & Optimization;

Page 2: Agenda - Jazoonjazoon.com/autumn2016/wp-content/uploads/2016/10/Blom-Alex_How... · ember-cordova will warn you if this is not ‘hash’; config/environment.js

whoami

Page 3: Agenda - Jazoonjazoon.com/autumn2016/wp-content/uploads/2016/10/Blom-Alex_How... · ember-cordova will warn you if this is not ‘hash’; config/environment.js

Isle of Code

• Toronto based;

• Focused on Ember, Cordova & Electron;

Page 4: Agenda - Jazoonjazoon.com/autumn2016/wp-content/uploads/2016/10/Blom-Alex_How... · ember-cordova will warn you if this is not ‘hash’; config/environment.js

Why Cordova & Ember

• Because Ember;

• Cost;

• Hiring;

• Developer sanity;

• Single source;

• Speed of development;

Page 5: Agenda - Jazoonjazoon.com/autumn2016/wp-content/uploads/2016/10/Blom-Alex_How... · ember-cordova will warn you if this is not ‘hash’; config/environment.js

Ember

• Framework for ambitious applications;

• We like it because it forces a very organized approach

to large applications;

• Glimmer2 can out benchmark React. Without having a

shit slinging contest, Ember is not ‘slower’;

• Items like Routing, Controllers, Components are all

first class. CLI is standardized and add ons are easy;

• We’ll tour an Ember app in the demo;

Page 8: Agenda - Jazoonjazoon.com/autumn2016/wp-content/uploads/2016/10/Blom-Alex_How... · ember-cordova will warn you if this is not ‘hash’; config/environment.js

Good Code === Good Hybrid

• Much of making effective mobile is simply writing

good code;

• Desktops let us be lazier;

• JS ecosystem is littered with bad/leaky code;

Page 9: Agenda - Jazoonjazoon.com/autumn2016/wp-content/uploads/2016/10/Blom-Alex_How... · ember-cordova will warn you if this is not ‘hash’; config/environment.js

Cordova v PhoneGap

• PhoneGap was initially started in ~2008;

• In 2011, Adobe punched Nitobi;

• The open-source version was then called

Cordova;

• PhoneGap describes a productized version of

Cordova;

Page 10: Agenda - Jazoonjazoon.com/autumn2016/wp-content/uploads/2016/10/Blom-Alex_How... · ember-cordova will warn you if this is not ‘hash’; config/environment.js
Page 11: Agenda - Jazoonjazoon.com/autumn2016/wp-content/uploads/2016/10/Blom-Alex_How... · ember-cordova will warn you if this is not ‘hash’; config/environment.js

What does Cordova do?

• Creates an app, which is a full screen WebView;

• Adds a relatively stable api to a window.cordova

object;

• Each platform is added manually (e.g. cordova-

ios, cordova-android);

Page 12: Agenda - Jazoonjazoon.com/autumn2016/wp-content/uploads/2016/10/Blom-Alex_How... · ember-cordova will warn you if this is not ‘hash’; config/environment.js

Platforms

• Handling its own build process;

• Creating a native application that is a WebView;

• Including cordova.js for the platform;

• Defining each window.cordova function as

required;

Page 13: Agenda - Jazoonjazoon.com/autumn2016/wp-content/uploads/2016/10/Blom-Alex_How... · ember-cordova will warn you if this is not ‘hash’; config/environment.js

Plugins

• Similar to platforms;

• Generally defined a window.foo API in common

JS, and bindings to each platform manallly;

• To find plugins:

https://cordova.apache.org/plugins/

Page 14: Agenda - Jazoonjazoon.com/autumn2016/wp-content/uploads/2016/10/Blom-Alex_How... · ember-cordova will warn you if this is not ‘hash’; config/environment.js

cordova-cli cordova-lib app

platform ios

platform android

plugin camera

plugin network

Page 15: Agenda - Jazoonjazoon.com/autumn2016/wp-content/uploads/2016/10/Blom-Alex_How... · ember-cordova will warn you if this is not ‘hash’; config/environment.js
Page 16: Agenda - Jazoonjazoon.com/autumn2016/wp-content/uploads/2016/10/Blom-Alex_How... · ember-cordova will warn you if this is not ‘hash’; config/environment.js

cordova-build

• Runs internal tasks like prepare & validations;

• Looks for the API path:

• platforms/$platformName/cordova/Api.js

• Triggers a platform specific build, and copies

your assets from www to

platforms/$platformName/platform_www;

Page 17: Agenda - Jazoonjazoon.com/autumn2016/wp-content/uploads/2016/10/Blom-Alex_How... · ember-cordova will warn you if this is not ‘hash’; config/environment.js

In the old days

Page 19: Agenda - Jazoonjazoon.com/autumn2016/wp-content/uploads/2016/10/Blom-Alex_How... · ember-cordova will warn you if this is not ‘hash’; config/environment.js

ember-cordova

• Library for packaging Ember/Cordova

applications together;

• Also includes support for:

• live reload;

• icon/splash generation;

• growing ecosystem of plugins;

Page 20: Agenda - Jazoonjazoon.com/autumn2016/wp-content/uploads/2016/10/Blom-Alex_How... · ember-cordova will warn you if this is not ‘hash’; config/environment.js

ember-cordova

• Is not a UI Library;

• Is not a component library;

• Currently has no opinions on which css

frameworks you should use;

• Does not protect you from bad performance (but

we do need to publish best practices);

Page 21: Agenda - Jazoonjazoon.com/autumn2016/wp-content/uploads/2016/10/Blom-Alex_How... · ember-cordova will warn you if this is not ‘hash’; config/environment.js

ember-cordova

cordova-lib app

platform ios

platform android

plugin camera

plugin network

ember-

cordova ember-cdv-plugin

Page 22: Agenda - Jazoonjazoon.com/autumn2016/wp-content/uploads/2016/10/Blom-Alex_How... · ember-cordova will warn you if this is not ‘hash’; config/environment.js

Improved WebViews

• On iOS, the default WebView is a UIWebView;

• ember-cordova will default to the newer and

more performant WKWebView;

• To disable this default, use the following flag:

• `ember cdv:platform add ios —default-

webview;

Page 23: Agenda - Jazoonjazoon.com/autumn2016/wp-content/uploads/2016/10/Blom-Alex_How... · ember-cordova will warn you if this is not ‘hash’; config/environment.js

Crosswalk

• https://crosswalk-project.org;

• For Android;

• Increases app size by ~20mb;

• ~5-10x speed improvement on older devices.

Especially 4.x;

• Consistent browser environment for stuff like css;

Page 24: Agenda - Jazoonjazoon.com/autumn2016/wp-content/uploads/2016/10/Blom-Alex_How... · ember-cordova will warn you if this is not ‘hash’; config/environment.js

Build Together

Page 25: Agenda - Jazoonjazoon.com/autumn2016/wp-content/uploads/2016/10/Blom-Alex_How... · ember-cordova will warn you if this is not ‘hash’; config/environment.js

Cordova serves from file urls

ember-cordova will warn you if this is not ‘hash’;

config/environment.js

Page 26: Agenda - Jazoonjazoon.com/autumn2016/wp-content/uploads/2016/10/Blom-Alex_How... · ember-cordova will warn you if this is not ‘hash’; config/environment.js

• App already has:

• A basic top menu;

• A big index of ‘users’;

• A button which re-shuffles to new users;

Build app together

Page 27: Agenda - Jazoonjazoon.com/autumn2016/wp-content/uploads/2016/10/Blom-Alex_How... · ember-cordova will warn you if this is not ‘hash’; config/environment.js

Hammer Example

Page 28: Agenda - Jazoonjazoon.com/autumn2016/wp-content/uploads/2016/10/Blom-Alex_How... · ember-cordova will warn you if this is not ‘hash’; config/environment.js

Ghost Clicks

Page 29: Agenda - Jazoonjazoon.com/autumn2016/wp-content/uploads/2016/10/Blom-Alex_How... · ember-cordova will warn you if this is not ‘hash’; config/environment.js
Page 30: Agenda - Jazoonjazoon.com/autumn2016/wp-content/uploads/2016/10/Blom-Alex_How... · ember-cordova will warn you if this is not ‘hash’; config/environment.js

A note on deviceready

• You probably need to use it for any custom

initializers;

• Has special handling. Even if you register the

handler after deviceready fires, it will still be

triggered.

Page 31: Agenda - Jazoonjazoon.com/autumn2016/wp-content/uploads/2016/10/Blom-Alex_How... · ember-cordova will warn you if this is not ‘hash’; config/environment.js

Manage Reflows

Page 32: Agenda - Jazoonjazoon.com/autumn2016/wp-content/uploads/2016/10/Blom-Alex_How... · ember-cordova will warn you if this is not ‘hash’; config/environment.js

What causes Reflow?

• Resizing the browser window;

• using JavaScript methods involving computed

styles;

• adding or removing elements from the DOM; and

• changing an element's classes.

• https://developers.google.com/speed/articles/reflo

w

Page 33: Agenda - Jazoonjazoon.com/autumn2016/wp-content/uploads/2016/10/Blom-Alex_How... · ember-cordova will warn you if this is not ‘hash’; config/environment.js

visibility:hidden

Page 34: Agenda - Jazoonjazoon.com/autumn2016/wp-content/uploads/2016/10/Blom-Alex_How... · ember-cordova will warn you if this is not ‘hash’; config/environment.js

Animation Frames

• ~15ms target;

• Taking longer will clog your thread;

• This 15ms target includes the work your browser

needs to do. Best to target ~10;

• Allows the browser to batch animation work;

Page 35: Agenda - Jazoonjazoon.com/autumn2016/wp-content/uploads/2016/10/Blom-Alex_How... · ember-cordova will warn you if this is not ‘hash’; config/environment.js

Other Commands

• ember cdv:prepare;

• ember cdv proxy;

Page 36: Agenda - Jazoonjazoon.com/autumn2016/wp-content/uploads/2016/10/Blom-Alex_How... · ember-cordova will warn you if this is not ‘hash’; config/environment.js

Hooks

• beforeBuild

• afterBuild

• beforePrepare

• afterPrepare

• Use hooks for any customization, warnings, etc;

• Hooks are just exported functions;

Page 37: Agenda - Jazoonjazoon.com/autumn2016/wp-content/uploads/2016/10/Blom-Alex_How... · ember-cordova will warn you if this is not ‘hash’; config/environment.js

Links will not appear as they have been clicked,

just like a native app.

styles/app.css

Page 38: Agenda - Jazoonjazoon.com/autumn2016/wp-content/uploads/2016/10/Blom-Alex_How... · ember-cordova will warn you if this is not ‘hash’; config/environment.js

• Mobile Safari raises touch vs click events on

anything but an a link;

Do this or action bindings will not work;

styles/app.css

Page 39: Agenda - Jazoonjazoon.com/autumn2016/wp-content/uploads/2016/10/Blom-Alex_How... · ember-cordova will warn you if this is not ‘hash’; config/environment.js

Understand Viewport

Page 40: Agenda - Jazoonjazoon.com/autumn2016/wp-content/uploads/2016/10/Blom-Alex_How... · ember-cordova will warn you if this is not ‘hash’; config/environment.js

Fix on Android

• <preference name="android-

windowSoftInputMode" value="adjustPan" />

• <preference name="android-configChanges"

value="orientation|keyboardHidden" />

Page 41: Agenda - Jazoonjazoon.com/autumn2016/wp-content/uploads/2016/10/Blom-Alex_How... · ember-cordova will warn you if this is not ‘hash’; config/environment.js

Keyboard

Page 42: Agenda - Jazoonjazoon.com/autumn2016/wp-content/uploads/2016/10/Blom-Alex_How... · ember-cordova will warn you if this is not ‘hash’; config/environment.js

Performance & Further

Optimization

Page 43: Agenda - Jazoonjazoon.com/autumn2016/wp-content/uploads/2016/10/Blom-Alex_How... · ember-cordova will warn you if this is not ‘hash’; config/environment.js

Further Optimization Tips

• Payload size matters (Glimmer2);

• Flat DOM matters;

Page 45: Agenda - Jazoonjazoon.com/autumn2016/wp-content/uploads/2016/10/Blom-Alex_How... · ember-cordova will warn you if this is not ‘hash’; config/environment.js

http://runspired.github.io/smoke-and-mirrors/#/examples/dbmon

Page 46: Agenda - Jazoonjazoon.com/autumn2016/wp-content/uploads/2016/10/Blom-Alex_How... · ember-cordova will warn you if this is not ‘hash’; config/environment.js

Using too much memory

has negative implications

Page 48: Agenda - Jazoonjazoon.com/autumn2016/wp-content/uploads/2016/10/Blom-Alex_How... · ember-cordova will warn you if this is not ‘hash’; config/environment.js

Memory Leaks

• Garbage Collection: 2 types:

• Young Generation & Old Generation

Page 49: Agenda - Jazoonjazoon.com/autumn2016/wp-content/uploads/2016/10/Blom-Alex_How... · ember-cordova will warn you if this is not ‘hash’; config/environment.js