2014-05-18 3 views
0

JavaScript 게임을 개발 중이며 가능한 한 메모리 사용량을 줄이고 싶습니다. 따라서 일부 객체를 다시 null로 설정하여 가비지 수집을 할 수 있습니다. article은 새로운 메모리를 할당하는 새로운 배열을 만들기 때문에 Array.splice()과 같은 기능을 사용하지 않는 것이 좋습니다.splice()없이 배열의 요소를 제거하십시오.

그래서 특정 인덱스에서 요소를 삭제하고 뒤에 모든 요소를 ​​이동하므로 길이가 length -= 1으로 설정되므로 자체 기능으로 JSFiddle을 구현했습니다. 대신 스플 라이스의 사용

기능 :이는 대신 새로운 하나를 만드는 기존의 배열에 영향을 미치는 내 기능

deleteElem = function(arr, el) { 
     var index = arr.indexOf(el); 
     if (index > -1) { 
     var len = arr.length - 1; 
     for (var i = index; i < len; i++) { 
      arr[i] = arr[i + 1]; 
     } 
     arr.length = len; 
     } 
    } 

JSFiddle 때로는 빠르게 때로는 느리게 ... 나는 더 많은 돈을 지불해야 더 나은 성능과 나쁜 메모리, 더 나은 메모리와 더 나쁜 성능에 대한 관심?

Array.splice을 사용하지 않으려면 다른 방법이 있습니까?

+1

자주 항목을 추가/제거하려면 배열 대신 사전을 사용 해본 적이 있습니까? – Oleg

+0

글쎄, 나는 스플 라이스에 대해 몰랐다. – axelduch

+3

문제가 있다는 것을 알기 전까지는 최적화하지 마십시오. 틀림없이 평평한 메모리 사용은 좋은 이상이지만, 자바 스크립트의 디자인은 점차적 인 톱니가 거의 확실하다는 점에서 그 반대 다. 트리거하는 GC로 인해 실제와 같이 인식 가능한 문제가 발생하면이를 조정하십시오 (그 시점까지 벤치 마크에 대한 전체 프로그램을 제공하므로 실제 데이터를 가지고이를 결정할 수 있습니다) – Dave

답변

0

jsperf가 코드를 실행하는 방법을 알아야합니다. 코드를 실행할 때마다 설정이 실행되지 않습니다. 코드는 각 설정에 대해 수백 또는 수천 번 실행됩니다.

즉, 호출의 99.999999 %에 빈 배열을 사용하므로 유용하지 않은 값을 측정하지 않습니다.

적어도 http://jsperf.com/splice-vs-own-function/2과 같이 측정하면 이해할 수 있지만 50 배 배열을 할당하면 차이가 무뎌지고 벤치마킹 방법보다 훨씬 빠릅니다. 보여 주다.