이번주 튜토리얼은 Performance Optimizations 에 관한 내용입니다.
개발 할 때 항상 중요하게 생각해야 할 내용들이죠.
Coronasdk 에서 제공하는 글에서 여러번 강조된 내용이기도 합니다.
계속 강조하는 이유는 그만큼 중요하기 때문이겠죠.
10가지의 팁을 제공하고 있는데요.
시간 나는대로 정리해서 올릴께요.
몇번에 나눠서 글이 정리될지 모르겠네요.
제가 참여하는 프로젝트가 이번달 말로 끝나거든요.
다른 position 을 찾아봐야 되서 그렇게 여유가 없네요.
오늘의 튜토리얼은 퍼포먼스 최적화와 관련된 내용입니다. 모든 개발자들이 항상 신경써야 할 주제죠. 이 중 어떤 팁들은 뻔한 내용일 수 있습니다. 프로그래밍을 하면서 코드를 최적화 하는 작업은 소요되는 시간 대 그로 인해 얻는 이익을 저울질 해서 처리해야 할 문제 입니다.
어떤 최적화가 구식 디바이스에서 2%의 퍼포먼스 개선을 불러올 수 있는데 그 일을 하려면 50시간을 투자해야 한다면 그 작업을 해야 될 필요가 없을 수도 있습니다. 그리고 어떤 최적화는 10시간 정도 소요되는데 아주 많은 디바이스들에서 큰 성능 개선이 일어날 수 있다면 그 최적화는 10시간을 들이더라도 반드시 해야 되겠죠.
새로운 프로젝트들을 시작할 때 퍼포먼스가 크게 개선되고 앱 코드와 동작이 깨끗해지고 그래서 모든 디바이스들에서 user experience 가 아주 개선 된다면 그런 결과를 유도할 수 있는 performance trick들은 많이 사용하면 사용할 수록 좋을 겁니다.
“Time-Critical” Routines
대부분의 performance trick 들은 주로 “time-critical” routines 들을 위한 방법들이 제공될 겁니다. 앱이 버벅거려서 유저들이 사용하는데 불편을 느끼거나 하면 안되니까요. 예를 들어 액션게임을 하는데 new scene 이 로딩되는 시간이 너무 길거나 하면 불편해서 유저들이 잘 사용하지 않을 겁니다.
1. Localize, Localize
이것은 몇번을 강조해도 부족하지 않은 내용입니다. 글로벌 변수나 글로벌 함수를 가급적 사용하지 않는 것이 성능 향상에 아주 도움이 됩니다. 로컬 변수와 로컬 함수에 접근하는 것이 훨씬 빠르니까요. 특히 time-critical routines 에서는요.
이 이미지는 이 글 내용과 거의 관계가 없네요. ;; 왜 이 이미지가눈에 띄었을까?
Non-Local — Discouraged
CCX = display.contentCenterX --global variable for i = 1,100 do local image = display.newImage( "myImage" ) image.x = CCX end
Local — Recommended
local CCX = display.contentCenterX --local variable for i = 1,100 do local image = display.newImage( "myImage" ) image.x = CCX end
또한 이것은 math library 같은 core Lua 라이브러리에 적용됩니다. time-critical routines 에서 여러분은 항상 라이브러리 함수들을 localize 해야 합니다.
Non-Local — Discouraged
local function foo( x ) for i = 1,100 do x = x + math.sin(i) end return x end
“External” Local — Recommended
local sin = math.sin --local reference to math.sin local function foo(x) for i = 1,100 do x = x + sin(i) end return x end
마지막으로 함수들은 가능하면 항상 localize 되어야 한다는 것을 기억하고 계세요. 물론 scoping 을 제대로 해야 하겠죠. 만약 Lua 초보자이시라면 링크 Understanding Scope for Beginners 를 참조하세요.
Non-Local — Discouraged
function func1() func2( "myValue" ) end function func2( y ) print( y ) end func1()
Local — Recommended
--"func2" properly scoped above "func1" local function func2( y ) print( y ) end local function func1() func2( "myValue" ) end func1()
오늘은 시간 관계상 1번 팁만 소개해 드립니다.
다음 글에선 좀 더 많은 팁들을 올릴께요.
원문은 저 위의 제목을 클릭하면 보실 수 있으니까 관심 있는 분들은 저 위의 제목을 클릭해서 보세요.
'Corona SDK > Corona Doc' 카테고리의 다른 글
Tutorial: Extending Libraries Without Native Code - 1/2 - (0) | 2013.07.08 |
---|---|
화면 전환시 오디오 파일 다루기 (0) | 2013.06.11 |
퍼포먼스 최적화(Performance Optimizations) 팁들 소개 -04- (1) | 2013.03.15 |
퍼포먼스 최적화(Performance Optimizations) 팁들 소개 -03- (0) | 2013.03.14 |
퍼포먼스 최적화(Performance Optimizations) 팁들 소개 -02- (0) | 2013.03.13 |
Physics 트릭들 배우기 - Wind Tunnel- (0) | 2013.02.27 |
Physics 트릭들 배우기 - Sticky Projectiles- (0) | 2013.02.27 |
Physics 트릭들 배우기 - Can I Jump?- (0) | 2013.02.26 |
iOS Build-in 트위터 기능 사용하기 (0) | 2013.02.20 |
iOS 에서 이메일 첨부파일 사용하기 (0) | 2013.02.19 |