Search code examples
javascriptpropertiestyped-arrays

OK to add properties to Typed Array?


I've a typed array (a 4-element Uint8ClampedArray, used for colors) that I would like to add a few properties to, object-like. One, for example, will be a Uint32 view to quickly get the pixel value. Optionally an other pair would be a map/index pair for where the color is in a colormap.

It's possible, i.e. no error and works correctly, but will it cause performance problems, or some other undesired side effect?

I won't be iterating over it, just accessing via color[n], n in 0-3, so that won't be an issue, and accessing properties by their names.

I ask because Typed Arrays were added as a highly performant, device independent, interchange .. like between the cpu and the gpu, and I'd like to not screw that up.


Solution

  • A simple performance test does not appear to show any kind of meaningful difference when accessing elements of the array if the array has custom properties.

    See the test results here:

    http://jsperf.com/uint8clampedarray-with-custom-properties

    Or, run the test yourself using the following code:

    Preparation Code

    var i, val;
    
    var uintc8_vanilla_array = new Uint8ClampedArray(200);
    for ( i = 0; i < 200; i++ ){
      uintc8_vanilla_array[i] = "foobar";
    }
    
    var uintc8_custom_array = new Uint8ClampedArray(200);
    uintc8_custom_array.foo = "bar";
    for ( i = 0; i < 200; i++ ){
      uintc8_custom_array[i] = "foobar";
    }
    

    Control

    for ( i = 0; i < 200; i++ ){
      val = uintc8_vanilla_array[i];
    }
    

    Custom Properties Test

    for ( i = 0; i < 200; i++ ){
      val = uintc8_custom_array[i];
    }
    

    Results

    enter image description here