하이브리드앱 성능 극복

33
하이브리드앱 성능 극복 리스트잇 앱 개발 경험

description

Thinkreals에서 앱개발을 담당하는 소프트웨어 엔지니어 @muik 입니다. 개발한 앱으로는 쿠폰모아, 포켓스타일 안드로이드앱이 있는데요. 지금까지 앱개발을 하며 하이브리드앱 필요성을 많이 느껴왔습니다. 아마 비슷한 분들이 많을꺼라 생각되어 이번에 하이브리드앱 도입 준비를 하며 경험한 것을 공유해보려 합니다.

Transcript of 하이브리드앱 성능 극복

Page 1: 하이브리드앱 성능 극복

하이브리드앱 성능 극복

리스트잇 앱 개발 경험

Page 2: 하이브리드앱 성능 극복

쿠폰모아, 포켓스타일, ..

앱 개발하며 느끼는 건

Page 3: 하이브리드앱 성능 극복

하이브리드앱 필요하다!

Page 4: 하이브리드앱 성능 극복

보다 빠르기 위해

Page 5: 하이브리드앱 성능 극복

아이폰, 안드로이드 앱동일한 부분을 웹으로 개발

개발기간 단축!

Page 6: 하이브리드앱 성능 극복

웹 변경은 앱스토어 통하지 않고

바로 업데이트!

Page 7: 하이브리드앱 성능 극복

하이브리드앱 필요성

1. 개발기간 단축

2. 빠른 업데이트

Page 8: 하이브리드앱 성능 극복

그렇다면.. one source

하이브리드앱 개발 플랫폼?

Page 9: 하이브리드앱 성능 극복

각 앱 특성에 맞게!

No No.. Android <> iOS적지 않은 다른점

Page 10: 하이브리드앱 성능 극복

단지..

공통된 부분만 웹으로 개발

페이스북 앱 처럼..

Page 11: 하이브리드앱 성능 극복

문제는 성능ㅠㅠ

Page 12: 하이브리드앱 성능 극복

많은 네트워크 커넥션 때문

GET html, css, js, img, ...

웹페이지 로딩 시

Page 13: 하이브리드앱 성능 극복

모바일에선 속도에 큰 영향

Page 14: 하이브리드앱 성능 극복

네이티브 구현 동작

로딩

화면뷰 그리기

단일 커넥션

.json

<App> <Web Server>

Page 15: 하이브리드앱 성능 극복

웹 구현 동작

url 접속

화면뷰 그리기

많은 커넥션

.

.

.화면뷰 그리기

.css

.html

.js

<App> <Web Server>

Page 16: 하이브리드앱 성능 극복

변경 확인을 위한 연결

캐시되어 있어도

302 Not Modified

Page 17: 하이브리드앱 성능 극복

HTML5 Offline AppCache

많은 커넥션 문제 해결은

Page 18: 하이브리드앱 성능 극복

manifest 앱캐시 정의

exam.html<html manifest="exam.appcache" ...>... exam.appcacheCACHE:app.jsapp.css...

Page 19: 하이브리드앱 성능 극복

캐시 변경 확인은 한번

manifest 파일에서만

Page 20: 하이브리드앱 성능 극복

AppCache 웹 구현 동작

url manifest 확인

html, css, ... 로드

단일 커넥션

화면뷰 그리기

.appcache

<App> <Web Server>

Page 21: 하이브리드앱 성능 극복

웹 구조 변경 필요

AppCache에 따른

Page 22: 하이브리드앱 성능 극복

/shops/1.html<html><script src="/js/shops.css">...<h1>상점1</h1><p>상점 소개1</p>...</html>

뷰와 데이터 혼합된 html

/shops/2.html<html><script src="/js/shops.css">...<h1>상점2</h1><p>상점 소개2</p>...</html>

Page 23: 하이브리드앱 성능 극복

HTML의 뷰와 데이터 분리

데이터를 제외한 뷰 캐시를 위해

Page 24: 하이브리드앱 성능 극복

/shops/#1<html><script src="/js/shops.js">...<h1></h1><p></p>...</html> /js/shops.jsvar id = location.hash;$.getJSON('/shops/' + id,...

뷰와 데이터 분리

/shops/1.json{

"name": "상점1",

"description: "상점소개1",

...}

Page 25: 하이브리드앱 성능 극복

서버 -> 클라이언트

html 템플릿 랜더링

Page 26: 하이브리드앱 성능 극복

Hogan.js

자바스크립트 템플릿 랜더링 엔진

● open source from twitter● lightweight / fast

Page 27: 하이브리드앱 성능 극복

/shops/#1<html>...<script src="/js/hogan.js"></script> <script id="tpl" type="text/template"><h1>{{name}}</h1><p>{{description}}</p></script></html>

html 랜더링

/js/shops.js...tpl = $('#tpl').html();template = Hogan.compile(tpl);html = template.render(data);...

Page 28: 하이브리드앱 성능 극복

AppCache를 위한 웹 구현

1. manifest 정의

2. 뷰/데이터 분리

3. 자바스크립트 템플릿 랜더링

Page 29: 하이브리드앱 성능 극복

남은 성능 문제

one more thing..

Page 30: 하이브리드앱 성능 극복

웹뷰 터치 후 0.3초 후 반응

Page 31: 하이브리드앱 성능 극복

Tappable: tab event library

Page 32: 하이브리드앱 성능 극복

참고

HTML5 Offline AppCache Tutorialhttp://www.html5rocks.com/en/tutorials/appcache/beginner/ Hogan.jshttp://twitter.github.com/hogan.js/ Tappablehttps://github.com/cheeaun/tappable

Page 33: 하이브리드앱 성능 극복

문의

http://twitter.com/[email protected]