Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
62 lines (40 sloc) 2.31 KB

JavaScript

The most popular JavaScript interpreter is V8 used by Google Chrome and NodeJS. Others include SpiderMonkey (Firefox), JavaScriptCore aka Nitro (Safari) and Chakra (Microsoft Edge).

Array

Normal

A sequential array, e.g. [1,2,3], is implemented in a linear storage buffer (memory). Once array is full it increases in size. While convention is for it to double in size implementations differ.

Sparse

JS allows you to specify any i-th element in an array. For example:

const array = [];
array[0] = 1;
array[1] = 2;
array[3] = 3;

In this case array[2] is not defined. It is an array hole and this type of array is called a sparse array. In this case V8 will use a hash table to store the elements of the array. This eliminates the space wasted by empty spots.

HYPOTHESIS: Since a sparse array is implemented as an actual hash table, it may be faster to use an array instead of an object when you desire a hash table for your own application with numeric keys, e.g. sequential primary IDs. For example:

const map = []
map[532] = 'blah'
map[2727] = 'foo'

RESULT: No difference in performance. Why?

Object

  • implemented using shape trees
  • can be used as a hash table
    • but its better to use an array for this

(TODO)

REFERENCES

How JavaScript Objects are Implemented. Eddy Bruel. MLOC.JS. 2014-06-07. Explanation on implementing SpiderMonkey's Objects as shape trees. After 20 minutes there is discussion regarding arrays.

Breaking the JavaScript Speed Limit with V8. Daniel Clifford. Google I/O 2012. 2012-06-29.

The pitfalls of using objects as maps in JavaScript. Axel Rauschmayer. ②ality – JavaScript and more. 2012-01-03.

V8: an open source JavaScript engine. Lars Bak. Google. 2008-08-15.

Writing Fast, Memory-Efficient JavaScript Addy Osmani. Smashing Magazine. 2012-10-05.