[과제] 2주차) Thorvg web 테스트 프로그램 구동 이승원 #132
nowgnuesLeee
started this conversation in
Blog
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
테스트 프로그램
perf-test
작년에 참여했을때는 lottie-player 밖에 없었고, 이걸 테스트 하는 프로그램이었다. 하지만 이번에 webcanvas가 생기면서 렌더링을 lottie-player에서 webcanvas로 바꿨다. 실제로
lottie-player.d.ts파일이 남아있다.퍼포먼스 테스트 답게 여러 엔진을 선택할 수 있고 최대 100개의 애니메이션을 렌더링 해볼 수 있다. internal mode가 있어서 콘솔에서
this.__tvg.internal()함수를 실행하면 버전 선택 및 벤치마크를 돌릴 수 있는 버튼이 보인다. 시드를 통해서 버전에 따라 퍼포먼스의 차이가 있는지 비교할 수 있고, 문제가 발생했을 때도 시드값을 통해 쉽게 재현할 수 있다.구조는 page, viewer가 있고 page에서 위 스크린샷과 같이 그리드 형식으로 애니메이션을 보여준다. 재밌는 부분은 최적화를 위해 버츄얼 스크롤을 구현했다는 점이다. div안에 canvas가 있고 div는 애니메이션의 row의 총 높이 만큼의 높이를 가지고 있어서 스크롤이 생기지만 캔버스는 sticky 속성을 가지고 있어서 실제로 캔버스가 스크롤되지는 않는다.
그리고
tick함수를 살펴보면,scrollAreaRef와canvasRef의 높이 차를 계산해서 row를 제거하는 모습을 볼 수 있다.높이 차이를 계산해서
tvgCanvas.remove를 통해서 캔버스에서 제거하고entry.picture.translate를 통해서 스크롤에 맞게 움직이게 함으로써 버츄얼 스크롤을 구현하였다.playground
webcanvas의 예제 쇼케이스이다. webcanvas에서 제공하고 있는 다양한 API를 직접 다뤄볼 수 있다.
구조는 page랑 showcase가 있다.
lib/examples에 다양한 예제를 가지고 있고 각각 id, title, thumbnail 등 속성을 가지고 있어서 이를 기반으로 렌더링한다. showcase에서는 canvas랑 모나코 에디터를 분리해서 보여주고 있다. example에서 코드를 불러와서 모나코 에디터에 넣고 있고, 모나코 에디터에서 코드를 수정하면 이를 기반으로 캔버스에서 렌더링 해준다.모나코 에디터에서 가져온 코드를 어떻게 캔버스에서 그려주는지 궁금해서 한번 알아보았다.
CanvasePreview.tsx에서runCode를 보면 되는데, 해당 부분에서 애니메이션 멈추고 캔버스 클리어하고 등등 코드를 실행하기전에 클린업하는 과정을 한다. 중요하게 볼 지점은 다음과 같다.인자로 받은 코드(부모로 부터 넘어오고 초기 값 또는 모나코 에디터 값)를
lib에 있는transformCodeForExecution를 통해서 정제해준다. 이 값은 나중에executeFunction에서 실제 실행될 코드이다.executeFunction을new Function으로 선언해서 안전하게 컴포넌트에서 정의한 값에 접근하도록 한다. 특히 TVG, canvas를 직접 넘겨서 코드가 바뀔때마다 thorvg canvas를 다시 마운트 안하도록 해준다. 그래서 모나코 에디터에서 값을 수정해도 기존에 초기화한 tvg를 사용할 수 있다.새로운 예제는 탑 쌓는 게임을 하나 만들어 보려고 한다. 옛날에 군대에서 위병소 컴퓨터로 만들었던 게임인데 재미에 비해서 구현이 생각보다 간단하다. 도전심도 생기고.
큐에 막대를 넣어놓고 막대는 큐의 마지막 막대 위에서 좌우로 움직인다. 이때 스페이스바 를 누르면 막대가 멈추고 해당 위치랑 마지막 막대의 위치를 비교해서 새로운 너비가 결정된다. 그리고 너비가 0이 되면 게임 오버.
여기서 다음 코드를 실행해서 게임을 플레이할 수 있다. (해당 사이트에서 폰트를 못 불러오는 문제가 있는 듯 하다.) 브랜치
All reactions