2013-12-18 7 views
0

나는 웹 사이트의 일부 라인 animatin에 requestAnimationFrame을 사용하고 있습니다. 문제는이 애니메이션이 프로세서의 사용을 심각하게 증가시키고 애니메이션이 부드럽 지 않다는 것입니다.캔버스 라인 애니메이션을 사용한 성능 저하

CPU Use

때때로 CPU 사용량의 보다 70 % 이상이다.

애니메이션 또는
function animateline() { 
    reqAnimFrame = 
    window.requestAnimationFrame || 
    window.mozRequestAnimationFrame || 
    window.webkitRequestAnimationFrame || 
    window.msRequestAnimationFrame || 
    window.oRequestAnimationFrame; 

    reqAnimFrame(animateline); 

    x += speed; 

    if (x <= 0 || x >= 475) { 
    speed = -speed; 
} 
    reposition(); 
} 

전체 코드는 여기 http://jsfiddle.net/a4cNp/46/

페이지의 전체 화면 버전 라인

의 재배치 경우 나도 몰라

->http://jsfiddle.net/a4cNp/46/show/light/

감사합니다 미리.

Firefox 프로필러 이미지가 추가되었습니다. 어쩌면 문제의 위치를 ​​알아내는 것이 유용 할 수도 있지만 문제 해결 방법을 아직 모릅니다. @GameAlchemist가 말한대로

Firefox Profiler

+1

Firefox에는 웹 개발자 도구에 내장 된 정말 멋진 프로파일 러가 있습니다. 브라우저가 가장 많은 시간을 보낸 코드를 알려줄 수 있습니다. –

+1

첫 번째 사항 : 루프 내부에 폴리 폴리하지 말고 사이트가 시작될 때 한 번만 수행하십시오. 재 위치 코드를 보여주십시오. – GameAlchemist

+0

빠른 (> 120Hz) 화면에서 테스트합니까? – GameAlchemist

답변

2

, 코드의 상단에 대신 애니메이션 내부에 한 번 polyfill을 넣어. 애니메이션 루프는 초당 여러 번 호출되므로 루프의 작업량을 최소화하십시오.

하나의 관찰 : 당신은 너무 많은 jQuery 선택을하고 있습니다.

var $area1=$("#area1"); 
var $area2=$("#area2"); 
var $area3=$("#area3"); 
... 
var area1Width=$area1.width(); 
var area1Height=$area1.height(); 
... 

이 그런 다음 often-에 캐시 된 값을 사용

번 코드의 상단에이 작업을 수행합니다 :

첫째, jQuery를 사용하면 자신의 크기에 따라 위치를 변경할 객체 캐시

function reposition(){ 

    $area2.css("left", area1Width+40); 

    .... 
+1

나는 markE (완전히 놀랍다! :-))에 동의한다. 나는 코드 희석이 많이 일어나므로 @George는 1) 동일한 코드를 두 번 보게되면 곧 함수를 작성해야한다. 2) 비슷한 객체가 모두 배열 내에 저장됩니다 (expl 영역 1,2,3 ...). 코드베이스를 열 가지로 나눠서 여러 가지 장점을 제공하고 통역사가 훨씬 더 쉽게 최적화 할 수 있도록합니다. – GameAlchemist

+0

감사합니다. 당신은 매우 도움이되었습니다. – George