endianness

Kenneth Russell kbr at google.com
Tue Apr 2 15:52:51 PDT 2013


Yes: API consistency. An ArrayBuffer is opaque; to work with the data
it contains, instantiate a view.



On Tue, Apr 2, 2013 at 3:36 PM, Kevin Gadd <kevin.gadd at gmail.com> wrote:
> Is there a reason why DataView wasn't specified as static methods that take
> an ArrayBuffer in the first place? That would solve the problem of figuring
> out when/how often to create DataView instances, and eliminate the garbage
> created by using DataViews.
>
>
> On Tue, Apr 2, 2013 at 3:23 PM, Kenneth Russell <kbr at google.com> wrote:
>>
>> On Tue, Apr 2, 2013 at 3:03 PM, Aymeric Vitte <vitteaymeric at gmail.com>
>> wrote:
>> >
>> > Le 02/04/2013 04:24, Kenneth Russell a écrit :
>> >>
>> >> Agreed. DataView's methods are all simple and should be easy to
>> >> optimize. Because they include a conditional byte swap, they can't run
>> >> quite as fast as the typed arrays' accessors -- but they shouldn't
>> >> need to. DataView was designed to support file and network I/O, where
>> >> throughput is limited by the disk or network connection. The typed
>> >> array views were designed for in-memory assembly of data to be
>> >> submitted to the graphics card, sound card, etc., and must run as fast
>> >> as possible.
>> >
>> > When you are streaming things, what's the correct use of DataViews?
>> >
>> > ie : you are supposed to create each time you want to read some bytes a
>> > DataView (which can be optimized or whatever, but still with some
>> > costs)?
>> >
>> > Maybe it's outside of the scope of this discussion, I have already
>> > provided
>> > examples, I still suspect that I am using it wrongly or that
>> > ArrayBuffers
>> > are more adapted to webgl (ie static buffer manipulation) than network
>> > streaming (ie dynamic buffer manipulation).
>> >
>> > Probably I am wrong but really would like to know then what's the
>> > correct
>> > use.
>>
>> If I understand your question, then the correct use of DataView is:
>> upon receiving an ArrayBuffer, create a DataView referring to it. When
>> iterating down the contents of the ArrayBuffer, continue to use the
>> same DataView instance, just incrementing the offset. In
>> abstract-tls/lib/abstract-tls.js there are some operations which
>> create a new DataView just to read or write a single element; this
>> isn't the correct usage.
>> http://www.html5rocks.com/en/tutorials/webgl/typed_arrays/ may be a
>> useful reference.
>>
>> If you're handling streaming data then presumably you're receiving
>> multiple ArrayBuffers, one after the other. You should create one
>> DataView per buffer. The only challenge is properly handling the
>> boundary from one buffer to the next, if the boundary is within an
>> element like a uint16 or uint32.
>>
>> -Ken
>
>
>
>
> --
> -kg


More information about the es-discuss mailing list