XAP 사이즈, 압축하지 않겠는가?에서 얘기한 것 처럼 실버라이트 배포에 가장 중요한 점 중 하나는 바로 용량을 줄이는거죠. 그래서 배경화면이나 복잡한 디자인 등에 사용하는 이미지 파일은 프로젝트에 포함하지 않고 웹 서버쪽에 두는 것이 정석이에요. 그런데 이렇게 하면 개발자들이야 어차피 디자인을 보면서 작업하는 일이 많지 않아서 별로 문제가 안되지만, 디자이너들에겐 치명적인 문제가 되죠. 생각해보세요 배경화면을 보면서 디자인을 해야 하는데 이미지가 프로젝트에 없어서 보이지 않는다니!

요컨대, 다음과 같이 배경 이미지 한장을 보여주는 아주 간단한 샘플을 놓고 보죠.

image image

최초로 Images 폴더에 ducks.jpg를 추가하면 기본적으로 Build Action이 Resource가 되어 프로젝트를 빌드할 때 어셈블리에 리소스로 포함되고 이 이미지의 용량은 고스란히 XAP파일의 용량이 증가하는 결과로 이어지죠. 그렇다고 이미지를 삭제하고 웹서버에만 놓기엔 디자이너가 볼 수가 없어서 애매하죠.

이럴 때는 간단하게 해당 이미지 파일을 프로젝트에 그대로 놓은 상태에서 Build Action만 None으로 설정하세요.

image

이렇게 하면 비주얼 스튜디오의 디자인 뷰에는 나오지 않지만 블렌드로 열어보면…

image

잘 보이죠? 그러면서도 배포 사이즈는 이미지의 크기가 빠지게 되죠.

별거 없지만 첨부된 프로젝트를 보면서 참고하세요.


Posted by gongdo

Submit comment.

  1. Favicon of http://gilverlight.net BlogIcon 길버트 2009.02.19 16:18  comment URL  Edit/Remove  Submit comment.

    정말 우아한 방법이군요. ^^
    유지보수를 위해 저 상태의 XAML을 유지하고, 런타임 시의 에러창 뜨는 것을 방지하기 위해서,
    비어있는 ImageFailed 핸들링 함수를 하나 곁들여 두는 게 좋겠군요.

  2. 프로글래머 2009.02.19 16:29  comment URL  Edit/Remove  Submit comment.

    유용한자료 감사합니다.

실버라이트 애플리케이션을 배포하는 것에서 가장 중요한 원칙은 뭘까요? 밑줄 긋고 외웁시다.

배포 사이즈를 작게 더 작게!

우리는 XAP 파일이 표준 ZIP 압축 알고리즘을 쓰고 있다는 점을 알고 있죠. 그런데 Delay’s Blog의 포스팅에 의하면 실버라이트 2의 XAP 파일은 압축률이 일반적으로 사용되는 것보다 낮다고 해요. 7-Zip의 압축률을 기준으로 1~3 단계 정도면 용량도 더 줄어들면서 압축 시간은 거의 차이가 없는데 여튼 여기에 착안해서 XAP의 압축률을 변경하여 압축하는 것만으로도 약 20~22% 정도의 용량이 줄어드는 마법(!)같은 효과를 얻을 수 있다는 군요.

저도 예전에 실버라이트 1때에는 7-zip command line 툴을 이용해서 비스무레한 일을 했던 적이 있는데 아무래도 2에서는 XAP을 자동으로 만들어줘서 그러려니 했었죠.

여튼 WEB-SNIPPETS 블로그에서는 이 작업을 좀 더 쉽게 해주는 유틸리티를 공개했는데요, 간단하게 옮겨 보죠.

  1. ReXapper를 다운로드
  2. 받은 파일의 압축을 풀어 임의의 장소에 복사(예 : D:\Utils\ReXapper\ReXapper.exe)
  3. 실버라이트 프로젝트의 Properties(속성)을 열어 Build Event탭의 Post-build event command line 박스를 찾아가서
  4. 다음의 코드를 붙여 넣기
    D:\Utils\ReXapper\ReXapper.exe –xap "$(TargetDir)$(TargetName).xap"

일단 저도 하나만 테스트를 해 봤지만, 348,854 bytes가 268,154 bytes로 약 20% 줄어드는 효과를 봤어요!

그러니…

Posted by gongdo

Submit comment.

  1. Favicon of http://gilverlight.net BlogIcon 길버트 2008.11.06 20:12  comment URL  Edit/Remove  Submit comment.

    하겠습니다!
    하겠습니다!
    ^^

  2. Favicon of http://joongs.net BlogIcon joongs 2008.11.06 21:22  comment URL  Edit/Remove  Submit comment.

    이렇게 따로 안해도 최대한 압축되는 날이 왔으면 좋겠어요 ㅎ 그날이 오기 전까지 정말 요긴한 정보! 감사~

  3. Favicon of http://loworldsoft.com BlogIcon 안상현 2008.11.07 10:48  comment URL  Edit/Remove  Submit comment.

    좋은정보 감사합니다.~ ^^

  4. Favicon of http://www.uxkorea.net BlogIcon 준서아빠 2009.02.02 09:43  comment URL  Edit/Remove  Submit comment.

    하겠습니다!
    그런데요... 어플 실행 단계에서 압축을 해제 하는것 때문에 느려지지 않을까?

    • Favicon of http://gongdosoft.com BlogIcon gongdo 2009.02.02 11:26  comment URL  Modify/Remove

      음... 압축에 걸리는 시간이 거의 동일하다면 해제도 크게 차이 없지 않을까요?

      압축에 걸리는 시간은 압축 레벨이 1~3까지는 모두 Very Fast이고 rexapper는 레벨 3을 쓰는걸로 알고 있어요. 아무리 레벨1과 3이 시간 차이가 난다고 해도 20% 보다는 적게 걸릴 거라고 추측하고요. 사이즈가 20% 정도 적어지니 이득을 얻을 수 있겠죠.

  5. 꼬기얌얌얌 2009.12.16 10:22  comment URL  Edit/Remove  Submit comment.

    안녕하세요^^ 공도님
    그런데 실버라이트3에서는 지원하지 않는 건가요?ㅠㅠ

    ReXapper가 오류가 나네용..ㅠㅠ

    디버깅하면 오류가 나면서 프로그램을 닫는다구 떠용....

    방법이 없을까용?

    • Favicon of https://gongdosoft.com BlogIcon gongdo 2010.01.11 16:52 신고  comment URL  Modify/Remove

      헐... 이게 몇 백년만의 접속인지 모르겠네요.
      블로그를 거의 버려두다시피해서;;

      음음; 암튼, SL3부터는 압축율이 충분히 높아져서 더 이상 ReXapper를 사용하지 않아도 돼요.
      물론 SL3의 압축률이 마음에 들지 않는 분도 있겠지만... 용량대 압축처리 속도비가 이 정도면 괜찮다고 봐요.