SlideShare a Scribd company logo
1 of 36
Download to read offline
모바일 웹 성능 최적화 동향 및 사례:
Syrup Store 앱
임상석
SK 플래닛
Syrup Store
O2O Marketing Platform/Solution
Syrup Store App for SMB
HTML5 기반
안드로이드/iOS 앱 개발 삽질기
왜 HTML5!
Front-end 개발자 중심으로
Cross Platform 앱 내부 개발
타협 불가 최소 품질
Native 수준 Look/Motion by UX
(앱 UI 성능 지표 만족)
Be Acceptible otherwise Be Native
Android 4.03 Webview/Browser
HTML Layer HW 가속 시대 개막
그러나 구글의 배신 GPU Texture Upload 지연시간 1초...
Android 4.2 >=
도전적이지만 달성 가능한 환경으로 판단
HTML5 UI Framework 선택
자체 → Sencha,Onsen,famo.us → Ionic
React/React Native (차기 검토중)
Ionic
Angularjs 기반 HTML5 Framework
Android/iOS Native 느낌의 앱 개발 지원
Ionic UI component
Android/iOS Native-
like UI styling
(Theme, Style, Icon, Transition)
Ionic UI Component
헤더
버튼
리스트
그리드
폼
탭
...
$ionicActionSheet
$ionicBackDrop
slideBox
$ionicPopUp
...
SVG icon
→ viewport 밖에서
도 지속적으로
rendering
Ionic 기능/장점
SPA (View 단위 DOM lifecycle 관리)
Native-style UI component
grade에 따른 성능 제어
UI routing
Cordova Integration
Custom UI Animation 개발
GPU 가속
Declarative Animation
RenderLayer SW(CPU) Painting
● Stacking Context에서 낮은 z-index에 위치한 RenderLayer부터 순차적으로
CPU로 painting을 수행
● 다른 Layer와 겹쳐진 부분은
기 painting된 값을 읽어서 compositing
○ compositor는 window manager 기본 기능
● compositing 연산의 복잡도
○ READ SRC PIXEL on DRAM
○ READ DEST PIXEL on DRAM
○ ADD SRC PIXEL, DEST PIXEL
○ DIV RESULT
○ WRITE RESULT PIXEL
Graphics Layer 생성 조건
● 3D 또는 perspective transform CSS 속성
● video
● canvas 2D/3D
● CSS filter
● 투명도를 부여하는 CSS animation 수행
● z-index가 낮은 형제가 composition layer를 갖는 경우
GPU 기반 Layer 합성
● CPU로 생성된 graphics buffer는 해당 HTML의 속성이 변경되지 않는 한 계속
유지되어 다음 합성에 재활용됨
Declarative VS JavaScript 기반 animation
● Declarative animation
○ CSS로 animation 설정
○ Webkit 엔진 내에서 기본 최적화 수행
○ main thread overloaded되어도 수행이 됨 (HW timer에의한 동작)
● JavaScript animation (setTimeout/requestAnimationFrame)
○ 애니메이션 시작, 끝, 일시 중지등 복잡한 형태를 구현 가능
○ main thread가 overload될 경우 animation이 제대로 수행되지 않음
○ main thread 부하 증가
● Web animation 표준
○ Declarative/JavaScript 기반 애니메이션의 단점을 모두 해결해주는 표준
○ iOS 미지원 (webkit에 구현중)
○ Android 5.0이상 일부 지원
Declatrive Animation: keyframe
● 시작, 중간점들 및 끝점을 명기하면 중간 지점은 엔진이 내부적으로 생성해주
는 animation 방식
● 엔진 내부의 system timer를 기반으로 animation이 수행이 됨
● JS 개입이 없음 → 고속 수행 div {
width: 100px;
height: 100px;
background-color: red;
-webkit-animation-name: example; /* Chrome, Safari, Opera */
-webkit-animation-duration: 4s; /* Chrome, Safari, Opera */
animation-name: example;
animation-duration: 4s;
}
/* Chrome, Safari, Opera */
@-webkit-keyframes example {
0% {background-color: red;}
25% {background-color: yellow;}
50% {background-color: blue;}
100% {background-color: green;}
}
http://www.w3schools.com/cssref/tryit.asp?filename=trycss3_keyframes2
Declarative Animation: Transition
● keyframe과 개념은 동일하나 시작과 끝, 두 부분만 명시하면 나머지 부분은 엔
진에서 interpolation
http://www.w3schools.com/css/tryit.asp?filename=trycss3_transition2
div {
width: 100px;
height: 100px;
background: red;
-webkit-transition: width 2s, hegith 4s;
transition: width 2s, hegith 4s;
}
div:hover {
width: 300px;
height: 300px;
}
JavaScript Animation: setTimeout/RequestAniFrame
● setTimeout (0)로 animation 수행시 문제점
○ 실제 LCD buffer로 쓰여지는 주기 보다 훨씨 빠르게 painting을 하여 frame drop이 발생
○ CPU/Battery 낭비
http://www.html5rocks.com/en/tutorials/speed/rendering/?redirect_from_locale=ko
JavaScript Animation: vsync
● 현재 LCD buffer로 frame을 flush후 다음 frame을 보내주기 위해서 시스템단에
서 발생 시켜주는 signal
● webkit엔진은 vsync를 requesAnimationFrame에 통합하여 제공
Hybrid Application - Native 부분
Cordova plugin
Push
BLE
Splash screen
Cipherstorage
Camera
Image cropper
삽질기 공유
Scroll View
HTML5 App 개발 알파와 오메가
Ionic Scroll View
CSS 2D/3D scroll, Native browser scroll
간 프로그램적 선택 지원
<ion-content overflow-scroll="true" class="no-header homeContent" scrollbar-y="false" on-scroll="verticalScroll()>
$ionicConfigProvider.scrolling.jsScrolling(false);
Ionic Performant Infinite Scrolling
ng-repeat → collection-repeat로 변경
viewport 기준 DOM node 개수 상수 고정
<ion-item collection-repeat="product in products" item-render-buffer="8" ng-
click="checkAchievements( product )" item-height="70px" item-width="100%" class="
item-icon-right">
<h2>{{product.name}}</h2>
<p>{{product.period}}</p>
<i ng-class="product.status" class="item-status"></i>
</ion-item>
<ion-infinite-scroll icon="ion-loading-c" on-infinite="loadMore()" ng-if="loadRequired">
</ion-infinite-scroll>
Page Navigation Animation
CSS transform 기반-GPU 렌더링
iOS는 Native 수준, Android 단말별 최적화 불가피
Page Navigation Animation
성능 저하 요인 분석
DOM element load timing
-filter: blur
-border-radius
gradient
QHD 단말의 고해상도
DOM element load timing
$ionic.beforeEnter
- 최소한의 화면 구성, AJAX request, ng-repeat data binding
$ionic.afterEnter
- 이미지, SVG등 화면 적재, loading icon
$ionic.loaded
- DOM 적재시
$ionic.unloaded
- DOM 제거시
-filter: blur (5px)
Transition Element 포함시 성능 저하
Blur 적용된 정적 Image로 변경
- 서버단 filter
- client단 filter (<canvas>, native)
<cavas> tag를 활용한 filter 구현
- blur filter var canvas = document.getElementById("canvas");
var dataURL = canvas.toDataURL();
console.log(dataURL);
// "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNby
// blAAAADElEQVQImWNgoBMAAABpAAFEI8ARAAAAAElFTkSuQmCC"
gradient, box-shadow, border-radius
단말별로 제거하거나 Image로 대체
if ( ionic.Platform.isAndroid() ) {
if ( ionic.Platform.version() >= 5 ) {
//안드로이드 롤리팝 G4일 경우 grade를 b로 설정
if ( (/LG-F500/).test(window.navigator.userAgent) ) {
console.log("set to grade b device");
ionic.Platform.setGrade('b');
}
}
}
URL 기반 3rd party 솔루션 Plug-in
iFrame vs 별도 Webview
4.2 이상에서는 iFrame 가능
iOS 버전 상용 개발
Ionic UI 재활용 + swift 기반 plugin 개발
코드 재활용도 80% 수준
한줄 기술 교훈 요약
Android 4.2>, iOS 7.0> 앱 상용 개발 가
능
단 UI Layer의 복잡도 고려
Ionic 성능 Turning 필요
self.next() === undefined

More Related Content

What's hot

HTML5 & Hybrid App Trends
HTML5 & Hybrid App TrendsHTML5 & Hybrid App Trends
HTML5 & Hybrid App Trends욱래 김
 
NAVER 오픈세미나 대구 (2014.08.01) - 오픈소스 라이브러리를 활용한 네이티브 어플리케이션의 데이터 저장과 통신
NAVER 오픈세미나 대구 (2014.08.01) - 오픈소스 라이브러리를 활용한 네이티브 어플리케이션의 데이터 저장과 통신NAVER 오픈세미나 대구 (2014.08.01) - 오픈소스 라이브러리를 활용한 네이티브 어플리케이션의 데이터 저장과 통신
NAVER 오픈세미나 대구 (2014.08.01) - 오픈소스 라이브러리를 활용한 네이티브 어플리케이션의 데이터 저장과 통신Sungwoo Choo
 
The comprehensive guide for optimizing the performance of mobile HTML5 Web ap...
The comprehensive guide for optimizing the performance of mobile HTML5 Web ap...The comprehensive guide for optimizing the performance of mobile HTML5 Web ap...
The comprehensive guide for optimizing the performance of mobile HTML5 Web ap...Sang Seok Lim
 
원모먼트 Vue js 적용기
원모먼트 Vue js 적용기원모먼트 Vue js 적용기
원모먼트 Vue js 적용기우현 김
 
목적에 맞게 Angular, React, Vue
목적에 맞게 Angular, React, Vue목적에 맞게 Angular, React, Vue
목적에 맞게 Angular, React, VueGunhee Lee
 
PHP Slim Framework with Angular
PHP Slim Framework with AngularPHP Slim Framework with Angular
PHP Slim Framework with AngularJT Jintae Jung
 
Single-page Application
Single-page ApplicationSingle-page Application
Single-page ApplicationSangmin Yoon
 
[D2 오픈세미나]3.web view hybridapp
[D2 오픈세미나]3.web view hybridapp[D2 오픈세미나]3.web view hybridapp
[D2 오픈세미나]3.web view hybridappNAVER D2
 
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망Sang Seok Lim
 
NAVER의 웹/HTML5환경 대응 현황
NAVER의 웹/HTML5환경 대응 현황NAVER의 웹/HTML5환경 대응 현황
NAVER의 웹/HTML5환경 대응 현황NAVER Engineering
 
지도 서비스용 웹앱 개발환경 사용기
지도 서비스용 웹앱 개발환경 사용기지도 서비스용 웹앱 개발환경 사용기
지도 서비스용 웹앱 개발환경 사용기Q-Young Lee
 
Ionic으로 모바일앱 만들기 #1
Ionic으로 모바일앱 만들기 #1Ionic으로 모바일앱 만들기 #1
Ionic으로 모바일앱 만들기 #1성일 한
 
프로그레시브 웹앱(Pwa)
프로그레시브 웹앱(Pwa)프로그레시브 웹앱(Pwa)
프로그레시브 웹앱(Pwa)Woncheol Lee
 
프로그레시브 웹앱이란? - Progressive Web Apps
프로그레시브 웹앱이란? - Progressive Web Apps프로그레시브 웹앱이란? - Progressive Web Apps
프로그레시브 웹앱이란? - Progressive Web AppsGihyo Joshua Jang
 
위플래닛 발표자료 Meteor_js
위플래닛 발표자료 Meteor_js위플래닛 발표자료 Meteor_js
위플래닛 발표자료 Meteor_jsWebFrameworks
 
HTML5 관점에서 2015년 웹 앱 개발 동향과 사례 및 2016년 발전 방향 저...
HTML5 관점에서 2015년 웹 앱 개발 동향과 사례 및 2016년 발전 방향 저...HTML5 관점에서 2015년 웹 앱 개발 동향과 사례 및 2016년 발전 방향 저...
HTML5 관점에서 2015년 웹 앱 개발 동향과 사례 및 2016년 발전 방향 저...Sang Seok Lim
 
모바일 웹앱 프로그래밍 과정
모바일 웹앱 프로그래밍 과정모바일 웹앱 프로그래밍 과정
모바일 웹앱 프로그래밍 과정Kenu, GwangNam Heo
 
Ionic2로 Type script+Angular2.0 따라하기 1
Ionic2로 Type script+Angular2.0 따라하기 1Ionic2로 Type script+Angular2.0 따라하기 1
Ionic2로 Type script+Angular2.0 따라하기 1이경주 이경주
 
하이브리드 앱_개발_개요
하이브리드 앱_개발_개요하이브리드 앱_개발_개요
하이브리드 앱_개발_개요BongSoo Jang
 

What's hot (20)

HTML5 & Hybrid App Trends
HTML5 & Hybrid App TrendsHTML5 & Hybrid App Trends
HTML5 & Hybrid App Trends
 
NAVER 오픈세미나 대구 (2014.08.01) - 오픈소스 라이브러리를 활용한 네이티브 어플리케이션의 데이터 저장과 통신
NAVER 오픈세미나 대구 (2014.08.01) - 오픈소스 라이브러리를 활용한 네이티브 어플리케이션의 데이터 저장과 통신NAVER 오픈세미나 대구 (2014.08.01) - 오픈소스 라이브러리를 활용한 네이티브 어플리케이션의 데이터 저장과 통신
NAVER 오픈세미나 대구 (2014.08.01) - 오픈소스 라이브러리를 활용한 네이티브 어플리케이션의 데이터 저장과 통신
 
The comprehensive guide for optimizing the performance of mobile HTML5 Web ap...
The comprehensive guide for optimizing the performance of mobile HTML5 Web ap...The comprehensive guide for optimizing the performance of mobile HTML5 Web ap...
The comprehensive guide for optimizing the performance of mobile HTML5 Web ap...
 
원모먼트 Vue js 적용기
원모먼트 Vue js 적용기원모먼트 Vue js 적용기
원모먼트 Vue js 적용기
 
목적에 맞게 Angular, React, Vue
목적에 맞게 Angular, React, Vue목적에 맞게 Angular, React, Vue
목적에 맞게 Angular, React, Vue
 
PHP Slim Framework with Angular
PHP Slim Framework with AngularPHP Slim Framework with Angular
PHP Slim Framework with Angular
 
Single-page Application
Single-page ApplicationSingle-page Application
Single-page Application
 
[D2 오픈세미나]3.web view hybridapp
[D2 오픈세미나]3.web view hybridapp[D2 오픈세미나]3.web view hybridapp
[D2 오픈세미나]3.web view hybridapp
 
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망
 
NAVER의 웹/HTML5환경 대응 현황
NAVER의 웹/HTML5환경 대응 현황NAVER의 웹/HTML5환경 대응 현황
NAVER의 웹/HTML5환경 대응 현황
 
지도 서비스용 웹앱 개발환경 사용기
지도 서비스용 웹앱 개발환경 사용기지도 서비스용 웹앱 개발환경 사용기
지도 서비스용 웹앱 개발환경 사용기
 
Ionic으로 모바일앱 만들기 #1
Ionic으로 모바일앱 만들기 #1Ionic으로 모바일앱 만들기 #1
Ionic으로 모바일앱 만들기 #1
 
프로그레시브 웹앱(Pwa)
프로그레시브 웹앱(Pwa)프로그레시브 웹앱(Pwa)
프로그레시브 웹앱(Pwa)
 
프로그레시브 웹앱이란? - Progressive Web Apps
프로그레시브 웹앱이란? - Progressive Web Apps프로그레시브 웹앱이란? - Progressive Web Apps
프로그레시브 웹앱이란? - Progressive Web Apps
 
위플래닛 발표자료 Meteor_js
위플래닛 발표자료 Meteor_js위플래닛 발표자료 Meteor_js
위플래닛 발표자료 Meteor_js
 
HTML5 관점에서 2015년 웹 앱 개발 동향과 사례 및 2016년 발전 방향 저...
HTML5 관점에서 2015년 웹 앱 개발 동향과 사례 및 2016년 발전 방향 저...HTML5 관점에서 2015년 웹 앱 개발 동향과 사례 및 2016년 발전 방향 저...
HTML5 관점에서 2015년 웹 앱 개발 동향과 사례 및 2016년 발전 방향 저...
 
현실적 PWA
현실적 PWA현실적 PWA
현실적 PWA
 
모바일 웹앱 프로그래밍 과정
모바일 웹앱 프로그래밍 과정모바일 웹앱 프로그래밍 과정
모바일 웹앱 프로그래밍 과정
 
Ionic2로 Type script+Angular2.0 따라하기 1
Ionic2로 Type script+Angular2.0 따라하기 1Ionic2로 Type script+Angular2.0 따라하기 1
Ionic2로 Type script+Angular2.0 따라하기 1
 
하이브리드 앱_개발_개요
하이브리드 앱_개발_개요하이브리드 앱_개발_개요
하이브리드 앱_개발_개요
 

Viewers also liked

Command Line으로 분석하는 사용자 패턴
Command Line으로 분석하는 사용자 패턴Command Line으로 분석하는 사용자 패턴
Command Line으로 분석하는 사용자 패턴JeongMin Kwon
 
Baseball data with r (@tech ver.) 공개본
Baseball data with r (@tech ver.) 공개본Baseball data with r (@tech ver.) 공개본
Baseball data with r (@tech ver.) 공개본경민 김
 
Node.js를 사용한 Big Data 사례연구
Node.js를 사용한 Big Data 사례연구Node.js를 사용한 Big Data 사례연구
Node.js를 사용한 Big Data 사례연구ByungJoon Lee
 
11st Legacy Application의 Spring Cloud 기반 MicroServices로 전환 개발 사례
11st Legacy Application의 Spring Cloud 기반 MicroServices로 전환 개발 사례11st Legacy Application의 Spring Cloud 기반 MicroServices로 전환 개발 사례
11st Legacy Application의 Spring Cloud 기반 MicroServices로 전환 개발 사례YongSung Yoon
 
Front-End 개발의 괜찮은 선택 ES6 & React
Front-End 개발의 괜찮은 선택  ES6 & ReactFront-End 개발의 괜찮은 선택  ES6 & React
Front-End 개발의 괜찮은 선택 ES6 & React지수 윤
 
Syrup pay 인증 모듈 개발 사례
Syrup pay 인증 모듈 개발 사례Syrup pay 인증 모듈 개발 사례
Syrup pay 인증 모듈 개발 사례HyungTae Lim
 
Streaming platform Kafka in SK planet
Streaming platform Kafka in SK planetStreaming platform Kafka in SK planet
Streaming platform Kafka in SK planetByeongsu Kang
 
AB Test Platform - 우종호
AB Test Platform - 우종호AB Test Platform - 우종호
AB Test Platform - 우종호Jongho Woo
 
기술적 변화를 이끌어가기
기술적 변화를 이끌어가기기술적 변화를 이끌어가기
기술적 변화를 이끌어가기Jaewoo Ahn
 
SK플래닛_README_마이크로서비스 아키텍처로 개발하기
SK플래닛_README_마이크로서비스 아키텍처로 개발하기SK플래닛_README_마이크로서비스 아키텍처로 개발하기
SK플래닛_README_마이크로서비스 아키텍처로 개발하기Lee Ji Eun
 

Viewers also liked (10)

Command Line으로 분석하는 사용자 패턴
Command Line으로 분석하는 사용자 패턴Command Line으로 분석하는 사용자 패턴
Command Line으로 분석하는 사용자 패턴
 
Baseball data with r (@tech ver.) 공개본
Baseball data with r (@tech ver.) 공개본Baseball data with r (@tech ver.) 공개본
Baseball data with r (@tech ver.) 공개본
 
Node.js를 사용한 Big Data 사례연구
Node.js를 사용한 Big Data 사례연구Node.js를 사용한 Big Data 사례연구
Node.js를 사용한 Big Data 사례연구
 
11st Legacy Application의 Spring Cloud 기반 MicroServices로 전환 개발 사례
11st Legacy Application의 Spring Cloud 기반 MicroServices로 전환 개발 사례11st Legacy Application의 Spring Cloud 기반 MicroServices로 전환 개발 사례
11st Legacy Application의 Spring Cloud 기반 MicroServices로 전환 개발 사례
 
Front-End 개발의 괜찮은 선택 ES6 & React
Front-End 개발의 괜찮은 선택  ES6 & ReactFront-End 개발의 괜찮은 선택  ES6 & React
Front-End 개발의 괜찮은 선택 ES6 & React
 
Syrup pay 인증 모듈 개발 사례
Syrup pay 인증 모듈 개발 사례Syrup pay 인증 모듈 개발 사례
Syrup pay 인증 모듈 개발 사례
 
Streaming platform Kafka in SK planet
Streaming platform Kafka in SK planetStreaming platform Kafka in SK planet
Streaming platform Kafka in SK planet
 
AB Test Platform - 우종호
AB Test Platform - 우종호AB Test Platform - 우종호
AB Test Platform - 우종호
 
기술적 변화를 이끌어가기
기술적 변화를 이끌어가기기술적 변화를 이끌어가기
기술적 변화를 이끌어가기
 
SK플래닛_README_마이크로서비스 아키텍처로 개발하기
SK플래닛_README_마이크로서비스 아키텍처로 개발하기SK플래닛_README_마이크로서비스 아키텍처로 개발하기
SK플래닛_README_마이크로서비스 아키텍처로 개발하기
 

Similar to Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유

[124] 하이브리드 앱 개발기 김한솔
[124] 하이브리드 앱 개발기 김한솔[124] 하이브리드 앱 개발기 김한솔
[124] 하이브리드 앱 개발기 김한솔NAVER D2
 
웹:앱 기술 동향
웹:앱 기술 동향웹:앱 기술 동향
웹:앱 기술 동향ssuser0e53c8
 
하이브리드 앱(Hybrid App)
하이브리드 앱(Hybrid App)하이브리드 앱(Hybrid App)
하이브리드 앱(Hybrid App)Changhwan Yi
 
[121]네이버 효과툰 구현 이야기
[121]네이버 효과툰 구현 이야기[121]네이버 효과툰 구현 이야기
[121]네이버 효과툰 구현 이야기NAVER D2
 
네이티브 웹앱 기술 동향 및 전망
네이티브 웹앱 기술 동향 및 전망네이티브 웹앱 기술 동향 및 전망
네이티브 웹앱 기술 동향 및 전망Wonsuk Lee
 
네이티브 웹앱 기술 동향 및 전망
네이티브 웹앱 기술 동향 및 전망네이티브 웹앱 기술 동향 및 전망
네이티브 웹앱 기술 동향 및 전망Wonsuk Lee
 
20131217 html5
20131217 html520131217 html5
20131217 html5DK Lee
 
Progressive Web Apps
Progressive Web AppsProgressive Web Apps
Progressive Web Appsjungkees
 
알아봅시다, Polymer: Web Components & Web Animations
알아봅시다, Polymer: Web Components & Web Animations알아봅시다, Polymer: Web Components & Web Animations
알아봅시다, Polymer: Web Components & Web AnimationsChang W. Doh
 
Social Tutorial Platform: Webbles
Social Tutorial Platform: Webbles Social Tutorial Platform: Webbles
Social Tutorial Platform: Webbles Wonkyung Lyu
 
Mozilla 오픈 웹 모바일 플랫폼 (2012)
Mozilla 오픈 웹 모바일 플랫폼 (2012)Mozilla 오픈 웹 모바일 플랫폼 (2012)
Mozilla 오픈 웹 모바일 플랫폼 (2012)Channy Yun
 
Front end dev 2016 & beyond
Front end dev 2016 & beyondFront end dev 2016 & beyond
Front end dev 2016 & beyondJae Sung Park
 
01.모바일 프레임워크 이론
01.모바일 프레임워크 이론01.모바일 프레임워크 이론
01.모바일 프레임워크 이론Hankyo
 
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...JinKwon Lee
 
Dreamweaver CS5.5 를 이용한 jQueryMobile 개발
Dreamweaver CS5.5 를 이용한 jQueryMobile 개발Dreamweaver CS5.5 를 이용한 jQueryMobile 개발
Dreamweaver CS5.5 를 이용한 jQueryMobile 개발JongKwang Kim
 
WebKit at the Future Web Forum 2010
WebKit at the Future Web Forum 2010WebKit at the Future Web Forum 2010
WebKit at the Future Web Forum 2010Joone Hur
 
조은 - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]
조은 - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]조은 - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]
조은 - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]WSConf.
 
Hybrid App Platform - HyWAI 3.5
Hybrid App Platform - HyWAI 3.5Hybrid App Platform - HyWAI 3.5
Hybrid App Platform - HyWAI 3.5Jonathan Jeon
 
NAVER TECH CONCERT_FE2019_빠르게 훑어보는 웹 개발 트렌드
NAVER TECH CONCERT_FE2019_빠르게 훑어보는 웹 개발 트렌드NAVER TECH CONCERT_FE2019_빠르게 훑어보는 웹 개발 트렌드
NAVER TECH CONCERT_FE2019_빠르게 훑어보는 웹 개발 트렌드NAVER Engineering
 

Similar to Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유 (20)

[124] 하이브리드 앱 개발기 김한솔
[124] 하이브리드 앱 개발기 김한솔[124] 하이브리드 앱 개발기 김한솔
[124] 하이브리드 앱 개발기 김한솔
 
웹:앱 기술 동향
웹:앱 기술 동향웹:앱 기술 동향
웹:앱 기술 동향
 
하이브리드 앱(Hybrid App)
하이브리드 앱(Hybrid App)하이브리드 앱(Hybrid App)
하이브리드 앱(Hybrid App)
 
[121]네이버 효과툰 구현 이야기
[121]네이버 효과툰 구현 이야기[121]네이버 효과툰 구현 이야기
[121]네이버 효과툰 구현 이야기
 
네이티브 웹앱 기술 동향 및 전망
네이티브 웹앱 기술 동향 및 전망네이티브 웹앱 기술 동향 및 전망
네이티브 웹앱 기술 동향 및 전망
 
네이티브 웹앱 기술 동향 및 전망
네이티브 웹앱 기술 동향 및 전망네이티브 웹앱 기술 동향 및 전망
네이티브 웹앱 기술 동향 및 전망
 
20131217 html5
20131217 html520131217 html5
20131217 html5
 
Progressive Web Apps
Progressive Web AppsProgressive Web Apps
Progressive Web Apps
 
알아봅시다, Polymer: Web Components & Web Animations
알아봅시다, Polymer: Web Components & Web Animations알아봅시다, Polymer: Web Components & Web Animations
알아봅시다, Polymer: Web Components & Web Animations
 
Social Tutorial Platform: Webbles
Social Tutorial Platform: Webbles Social Tutorial Platform: Webbles
Social Tutorial Platform: Webbles
 
Mozilla 오픈 웹 모바일 플랫폼 (2012)
Mozilla 오픈 웹 모바일 플랫폼 (2012)Mozilla 오픈 웹 모바일 플랫폼 (2012)
Mozilla 오픈 웹 모바일 플랫폼 (2012)
 
Front end dev 2016 & beyond
Front end dev 2016 & beyondFront end dev 2016 & beyond
Front end dev 2016 & beyond
 
01.모바일 프레임워크 이론
01.모바일 프레임워크 이론01.모바일 프레임워크 이론
01.모바일 프레임워크 이론
 
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
 
Dreamweaver CS5.5 를 이용한 jQueryMobile 개발
Dreamweaver CS5.5 를 이용한 jQueryMobile 개발Dreamweaver CS5.5 를 이용한 jQueryMobile 개발
Dreamweaver CS5.5 를 이용한 jQueryMobile 개발
 
Html5 ie9
Html5 ie9Html5 ie9
Html5 ie9
 
WebKit at the Future Web Forum 2010
WebKit at the Future Web Forum 2010WebKit at the Future Web Forum 2010
WebKit at the Future Web Forum 2010
 
조은 - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]
조은 - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]조은 - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]
조은 - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]
 
Hybrid App Platform - HyWAI 3.5
Hybrid App Platform - HyWAI 3.5Hybrid App Platform - HyWAI 3.5
Hybrid App Platform - HyWAI 3.5
 
NAVER TECH CONCERT_FE2019_빠르게 훑어보는 웹 개발 트렌드
NAVER TECH CONCERT_FE2019_빠르게 훑어보는 웹 개발 트렌드NAVER TECH CONCERT_FE2019_빠르게 훑어보는 웹 개발 트렌드
NAVER TECH CONCERT_FE2019_빠르게 훑어보는 웹 개발 트렌드
 

Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유

  • 1. 모바일 웹 성능 최적화 동향 및 사례: Syrup Store 앱 임상석 SK 플래닛
  • 2. Syrup Store O2O Marketing Platform/Solution
  • 3. Syrup Store App for SMB
  • 5. 왜 HTML5! Front-end 개발자 중심으로 Cross Platform 앱 내부 개발
  • 6. 타협 불가 최소 품질 Native 수준 Look/Motion by UX (앱 UI 성능 지표 만족) Be Acceptible otherwise Be Native
  • 7. Android 4.03 Webview/Browser HTML Layer HW 가속 시대 개막 그러나 구글의 배신 GPU Texture Upload 지연시간 1초...
  • 8. Android 4.2 >= 도전적이지만 달성 가능한 환경으로 판단
  • 9. HTML5 UI Framework 선택 자체 → Sencha,Onsen,famo.us → Ionic React/React Native (차기 검토중)
  • 10. Ionic Angularjs 기반 HTML5 Framework Android/iOS Native 느낌의 앱 개발 지원
  • 11. Ionic UI component Android/iOS Native- like UI styling (Theme, Style, Icon, Transition)
  • 13. Ionic 기능/장점 SPA (View 단위 DOM lifecycle 관리) Native-style UI component grade에 따른 성능 제어 UI routing Cordova Integration
  • 14. Custom UI Animation 개발 GPU 가속 Declarative Animation
  • 15. RenderLayer SW(CPU) Painting ● Stacking Context에서 낮은 z-index에 위치한 RenderLayer부터 순차적으로 CPU로 painting을 수행 ● 다른 Layer와 겹쳐진 부분은 기 painting된 값을 읽어서 compositing ○ compositor는 window manager 기본 기능 ● compositing 연산의 복잡도 ○ READ SRC PIXEL on DRAM ○ READ DEST PIXEL on DRAM ○ ADD SRC PIXEL, DEST PIXEL ○ DIV RESULT ○ WRITE RESULT PIXEL
  • 16. Graphics Layer 생성 조건 ● 3D 또는 perspective transform CSS 속성 ● video ● canvas 2D/3D ● CSS filter ● 투명도를 부여하는 CSS animation 수행 ● z-index가 낮은 형제가 composition layer를 갖는 경우
  • 17. GPU 기반 Layer 합성 ● CPU로 생성된 graphics buffer는 해당 HTML의 속성이 변경되지 않는 한 계속 유지되어 다음 합성에 재활용됨
  • 18. Declarative VS JavaScript 기반 animation ● Declarative animation ○ CSS로 animation 설정 ○ Webkit 엔진 내에서 기본 최적화 수행 ○ main thread overloaded되어도 수행이 됨 (HW timer에의한 동작) ● JavaScript animation (setTimeout/requestAnimationFrame) ○ 애니메이션 시작, 끝, 일시 중지등 복잡한 형태를 구현 가능 ○ main thread가 overload될 경우 animation이 제대로 수행되지 않음 ○ main thread 부하 증가 ● Web animation 표준 ○ Declarative/JavaScript 기반 애니메이션의 단점을 모두 해결해주는 표준 ○ iOS 미지원 (webkit에 구현중) ○ Android 5.0이상 일부 지원
  • 19. Declatrive Animation: keyframe ● 시작, 중간점들 및 끝점을 명기하면 중간 지점은 엔진이 내부적으로 생성해주 는 animation 방식 ● 엔진 내부의 system timer를 기반으로 animation이 수행이 됨 ● JS 개입이 없음 → 고속 수행 div { width: 100px; height: 100px; background-color: red; -webkit-animation-name: example; /* Chrome, Safari, Opera */ -webkit-animation-duration: 4s; /* Chrome, Safari, Opera */ animation-name: example; animation-duration: 4s; } /* Chrome, Safari, Opera */ @-webkit-keyframes example { 0% {background-color: red;} 25% {background-color: yellow;} 50% {background-color: blue;} 100% {background-color: green;} } http://www.w3schools.com/cssref/tryit.asp?filename=trycss3_keyframes2
  • 20. Declarative Animation: Transition ● keyframe과 개념은 동일하나 시작과 끝, 두 부분만 명시하면 나머지 부분은 엔 진에서 interpolation http://www.w3schools.com/css/tryit.asp?filename=trycss3_transition2 div { width: 100px; height: 100px; background: red; -webkit-transition: width 2s, hegith 4s; transition: width 2s, hegith 4s; } div:hover { width: 300px; height: 300px; }
  • 21. JavaScript Animation: setTimeout/RequestAniFrame ● setTimeout (0)로 animation 수행시 문제점 ○ 실제 LCD buffer로 쓰여지는 주기 보다 훨씨 빠르게 painting을 하여 frame drop이 발생 ○ CPU/Battery 낭비 http://www.html5rocks.com/en/tutorials/speed/rendering/?redirect_from_locale=ko
  • 22. JavaScript Animation: vsync ● 현재 LCD buffer로 frame을 flush후 다음 frame을 보내주기 위해서 시스템단에 서 발생 시켜주는 signal ● webkit엔진은 vsync를 requesAnimationFrame에 통합하여 제공
  • 23. Hybrid Application - Native 부분 Cordova plugin Push BLE Splash screen Cipherstorage Camera Image cropper
  • 25. Scroll View HTML5 App 개발 알파와 오메가
  • 26. Ionic Scroll View CSS 2D/3D scroll, Native browser scroll 간 프로그램적 선택 지원 <ion-content overflow-scroll="true" class="no-header homeContent" scrollbar-y="false" on-scroll="verticalScroll()> $ionicConfigProvider.scrolling.jsScrolling(false);
  • 27. Ionic Performant Infinite Scrolling ng-repeat → collection-repeat로 변경 viewport 기준 DOM node 개수 상수 고정 <ion-item collection-repeat="product in products" item-render-buffer="8" ng- click="checkAchievements( product )" item-height="70px" item-width="100%" class=" item-icon-right"> <h2>{{product.name}}</h2> <p>{{product.period}}</p> <i ng-class="product.status" class="item-status"></i> </ion-item> <ion-infinite-scroll icon="ion-loading-c" on-infinite="loadMore()" ng-if="loadRequired"> </ion-infinite-scroll>
  • 28. Page Navigation Animation CSS transform 기반-GPU 렌더링 iOS는 Native 수준, Android 단말별 최적화 불가피
  • 29. Page Navigation Animation 성능 저하 요인 분석 DOM element load timing -filter: blur -border-radius gradient QHD 단말의 고해상도
  • 30. DOM element load timing $ionic.beforeEnter - 최소한의 화면 구성, AJAX request, ng-repeat data binding $ionic.afterEnter - 이미지, SVG등 화면 적재, loading icon $ionic.loaded - DOM 적재시 $ionic.unloaded - DOM 제거시
  • 31. -filter: blur (5px) Transition Element 포함시 성능 저하 Blur 적용된 정적 Image로 변경 - 서버단 filter - client단 filter (<canvas>, native) <cavas> tag를 활용한 filter 구현 - blur filter var canvas = document.getElementById("canvas"); var dataURL = canvas.toDataURL(); console.log(dataURL); // "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNby // blAAAADElEQVQImWNgoBMAAABpAAFEI8ARAAAAAElFTkSuQmCC"
  • 32. gradient, box-shadow, border-radius 단말별로 제거하거나 Image로 대체 if ( ionic.Platform.isAndroid() ) { if ( ionic.Platform.version() >= 5 ) { //안드로이드 롤리팝 G4일 경우 grade를 b로 설정 if ( (/LG-F500/).test(window.navigator.userAgent) ) { console.log("set to grade b device"); ionic.Platform.setGrade('b'); } } }
  • 33. URL 기반 3rd party 솔루션 Plug-in iFrame vs 별도 Webview 4.2 이상에서는 iFrame 가능
  • 34. iOS 버전 상용 개발 Ionic UI 재활용 + swift 기반 plugin 개발 코드 재활용도 80% 수준
  • 35. 한줄 기술 교훈 요약 Android 4.2>, iOS 7.0> 앱 상용 개발 가 능 단 UI Layer의 복잡도 고려 Ionic 성능 Turning 필요