2010-12-30 8 views
1

저는 자바 스크립트로 게임을 작성했습니다. 웹 게임이 아니고 자바 스크립트가 스크립트 언어로 사용되는 게임 엔진을 사용하고 있습니다. 불행히도, 게임 엔진의 자바 스크립트 엔진은 SpiderMonkey의 고대 버전으로 내 게임을 약간 느리게 실행합니다. 대단히 느리지는 않지만 느린 속도로 진행되므로 최적화를하기로 결정했습니다.자바 스크립트 최적화

전역 변수 대신 로컬 변수를 사용하는 것과 같은 몇 가지 기본적인 최적화를 알고 있습니다 (어쨌든 좋은 생각입니다). 후위 증가/감소 대신 접두사를 사용하고 루프를 사용하지 않고 카운트 다운하지만 더 좋은 자바 스크립트 최적화는 무엇입니까? ?

+4

루프 카운터 방향과 같은 미세 최적화 기능을 사용하기 전에 프로파일, 프로필, 프로필, 프로필 및 프로필 코드를 작성하십시오. – Pointy

+0

요즘 JS 엔진이 대세다. 게임에서 최신 엔진을 사용하면 성능 문제가 해결 될 가능성이있다. 그것은 정말로 의문의 여지가 있습니까? –

+0

슬프게도 예, 새로운 JS 엔진을 사용하는 것은 의문의 여지가 있습니다. 복잡하지만, C++에서 엔진을 쓴 것이지, SpiderMonkey 버전이 너무 오래되어서 최신 버전과의 API가 변경되어서는 안됩니다. DLL을 대체하고 소스를 편집해야합니다. –

답변

1

난 당신의 코드가 어떻게 구성되어 있는지 알고 있지만,의 그것의 일부가 자주를 통해 실행되는 함수 나 루프에 거주하는 가정 해 봅시다하지 않습니다

  • ? :
if() 교체

예 :

if (expr) a = 1; 
else a = 2; 

a = expr ? 1 : 2; 
    가에 if()의 일련의 설정
  • 이되는 switch() 가능한 경우
  • 당신이 사용하는 경우 substr(), substring() 또는 한 빨리 (임베디드 브라우저입니다 slice() 확인 I 한 번 요소 3)의 차이가 나타났습니다. 그들의 매개 변수에 주목해라!
  • 을 피 값을 다시 계산하거나 그냥 경우에도, 다시 같은 매개 변수를 사용하여 동일한 기능을 호출 사소한 일
  • 다시 반복 배열의 동일한 요소에 액세스하는 경우, 로컬 변수에 저장
  • eval()은 매우 천천히 (악의가 있다는 사실 외에도)
  • JavaScript 엔진은 단일 스레드라는 점에 유의하십시오. 아무 것도 평행을 이루지 않으며, 심지어 타이머 나 간격도 없습니다.

코드가 읽기 어려운 경우 댓글을 작성하십시오.

2

소스 코드를 엉망으로 만드는 대신 Closure Compiler에 시도해 보셨습니까? 몇 가지 최적화를 수행하는 javascript에서 javascript까지의 컴파일러입니다. 크기는 대부분 크기 때문에 발생하는 js는 종종 더 빠르게 실행됩니다. 최적화가 V8- 특정인지는 모르겠다.

+0

나는 그것을 시험해 볼 것이다, 고마워. –