JavaScript (특히 Google V8)의 배열 및 객체와 관련된 성능은 문서화하기에 매우 흥미로울 것입니다. 이 주제에 대한 포괄적 인 기사는 인터넷 어디에도 없습니다.
일부 개체는 클래스를 기본 데이터 구조로 사용한다는 것을 이해합니다. 속성이 많은 경우 때때로 해시 테이블로 취급됩니까?
나는 또한 배열이 때때로 C ++ 배열처럼 취급된다는 것을 이해합니다 (즉, 빠른 임의 인덱싱, 느린 삭제 및 크기 조정). 그리고 다른 경우에는 객체 (빠른 인덱싱, 빠른 삽입 / 제거, 더 많은 메모리)처럼 취급됩니다. 그리고 때로는 연결 목록으로 저장 될 수 있습니다 (예 : 느린 임의 인덱싱, 시작 / 끝에서 빠른 제거 / 삽입).
JavaScript에서 배열 / 객체 검색 및 조작의 정확한 성능은 무엇입니까? (특히 Google V8의 경우)
더 구체적으로 말하면, 성능에 미치는 영향 :
- 객체에 속성 추가
- 개체에서 속성 제거
- 객체에서 속성 인덱싱
- 배열에 항목 추가
- 배열에서 항목 제거
- 배열의 항목 인덱싱
- Array.pop () 호출
- Array.push () 호출
- Array.shift () 호출
- Array.unshift () 호출
- Array.slice () 호출
자세한 내용은 기사 또는 링크도 감사하겠습니다. :)
편집 : JavaScript 배열과 객체가 어떻게 작동하는지 정말 궁금합니다. 또한 V8 엔진이 다른 데이터 구조로 "전환"하는 것을 "알고있는" 컨텍스트 는 무엇 입니까?
예를 들어 다음을 사용하여 배열을 생성한다고 가정합니다.
var arr = [];
arr[10000000] = 20;
arr.push(21);
여기서 정말 무슨 일이 일어나고 있습니까?
아니면 ... 이건 어때 ... ???
var arr = [];
//Add lots of items
for(var i = 0; i < 1000000; i++)
arr[i] = Math.random();
//Now I use it like a queue...
for(var i = 0; i < arr.length; i++)
{
var item = arr[i].shift();
//Do something with item...
}
기존 어레이의 경우 성능이 끔찍합니다. 반면 LinkedList가 사용 되었다면 ... 그렇게 나쁘지는 않습니다.