Blazor가 Canvas를 제어하는데 최적화된 녀석은 아니라 닷넷코어 3시절 자바스크립트와 연동되 닷넷코드 버전으로 그리는 blazor 컴포넌트를 사용했는데 닷넷9가 나오는시점까지 한번도 업데이트가 없었네요~ 아직 웹어셈을 극단적으로 이용하는 최적화된 Canvas 툴이 등장하지 않는것 같습니다.
Blazor C# 을 이용해 렌더링 씬을 하나하나 그리는 방법을 채택했으며, 2d게임 렌더링에 전문가는 아니여서 변경된 부분만 다시그리는 방식이 아닌 전체 영역 을 다시 그리기때문에 느린것같으며, 그렇다 해도 렌더링 오브젝트가 많지 않음에도 느리기때문에 js를 c#으로 제어하기위해 발생되는 추가적인 invoke 방식이 게임 fps 렌더링을 처리하기에 고성능이 아닌것같으며, 순수 js를 이용했을때보다 추가적인 오버헤드가 발생하며 이부분은 blazor의 지식을 통한 튜닝요소로 보여집니다.
렌더링 성능 문제를 해결하기위한 간단한 튜닝이 시도 되었으며~ 초당 그리는 fps를 60이하로 고정 조정했으며 웹에서 렌더링이 그래픽카드가 고사양이라고 해도 최적화를 기대할수는 없지만, 다소 부드럽지 않더라도 소스를 다운받아 로컬실행가능하니 30이하로 낮추거나 최적값을 찾으면 될것같습니다.
아래와같이 1회 튜닝이 되었으니 참고하면될듯하며~ 더 좋은 canvas 성능의 렌더링이 필요하면 Blazor보다는 쓸만한 2d canvans game engine js 들이 많이 있으니 이 녀석들을 활용하는것이 추천되며
blazor에서 쓸만하고 닷넷코딩이 가능한 2d canvas 엔진이 출시하기를 기다리고 있는데 잘 등장하지 않네요 fps 설정은 아래코드 참고해 조정하면 될것같습니다.
크리스마스 특집으로 눈내리는 애니도 추가되었으며 개수를 추가하면서 fps튜닝을 해볼수 있을것으로 보여집니다. ( 더 극단적인 성능 튜닝은 그래픽 카드 가속엔진을 활용하는것이 있을것같은데 제 영역밖의 이슈일것같습니다 )
리모트의 경우 Google.Quic,dot-netty 등 고성능 TCP모듈 선택가능하며
직렬화의 경우도 NewtonSoftJsonSerializer 를 기본사용하지만 이 성능이 마음에 안들었는지
HyperionSerializer 자체개발하고 고성능 직렬기로 교체가능하며 구글프로토콜 버퍼도 지원합니다.