Per accedere ai dati in un array, ho creato una variabile simile a enum
per avere identificativi leggibili dall'uomo nei campi.Perché un "enum" congelato è più lento?
var columns = { first: 0, second: 1 };
var array = ['first', 'second'];
var data = array[columns.first];
Quando ho scoperto Object.freeze
ho voluto usare questo per l'enumerazione in modo che non può essere cambiato, e mi aspettavo la VM di utilizzare queste informazioni a suo vantaggio.
Come risulta, i test diventano più lenti su Chrome e Node, ma leggermente più veloci su Firefox (rispetto all'accesso diretto per numero).
Il codice è disponibile qui: http://jsperf.com/array-access-via-enum
Ecco i parametri di riferimento dal nodo (corrispondenti alle prove JSPerf):
fixed Number: 12ms
enum: 12ms
frozenEnum: 85ms
non V8 non solo ancora una grande realizzazione, o c'è qualcosa non ottimale con questo approccio per il mio caso d'uso?
Sembra che l'analisi del codice statico di V8 sia abbastanza buona e traduca l'accesso enum delle colonne ai numeri fissi. Non lo fa con l'oggetto enum "congelato" dato che è mutato da "Object.freeze" - FF sembra essere più intelligente lì. – Bergi