2011-09-26 3 views
3

TypedArray specification는 ArrayBufferView이 방법으로 생성 될 수 있다고 주장한다 :이상한 한정

주어진 byteOffset이어야 그러나

TypedArray(ArrayBuffer buffer, 
      optional unsigned long byteOffset, optional unsigned long length) 

번째 파라미터 byteOffset을 제한이 특정 유형의 요소 크기의 배수. 그렇지 않으면 예외가 발생합니다. [1,2]가 제대로 UINT16로 변환 할 수있다하더라도

var view1 = new Uint8Array([0, 1, 2, 3]), 
    view2 = new Uint16Array(view1.buffer, 1, 1); 

그래서, 내가 할 수 없습니다 :

이것은 우리가 같은 2 바이트 뷰에 대한 이상한 오프셋, 작동하지 않을 수 있음을 의미 그렇게 요소에 접근하십시오. byteOffset 제한은 ArrayBufferView의 유연성을 크게 줄이는 것으로 보입니다.

누구나이 제한이 부과 된 이유를 알고 있습니까?

답변

3

이 제한은 Uint16Array 및 Float32Array와 같은 입력 된 배열보기의 성능을 최대로 유지하기 위해 부과되었습니다. 이러한 유형은 기기의 자연스러운 정렬로 데이터에 대해 작동하도록 설계되었습니다. 정렬되지 않은로드를 지원하면 빠른 케이스를 허용 할 수 없게 느리게 만들거나 큰 요소로 인해 속도가 느려지는 경우를 제외하고는 프로그램이 대부분 빠르게 실행되는 성능 "절벽"으로 이어질 수 있습니다.

DataView는 파일 형식에 정렬 제한이없는 네트워킹 또는 디스크 I/O의 경우를 처리하기 위해 데이터의 단일 요소에 대한 정렬되지 않은로드 및 저장을 지원하도록 설계되었습니다.