爲了訪問數組中的數據,我創建了一個類似於enum
的變量,使字段具有人類可讀標識符。爲什麼凍結的「枚舉」會變慢?
var columns = { first: 0, second: 1 };
var array = ['first', 'second'];
var data = array[columns.first];
當我發現了Object.freeze
我想用這個枚舉,以便它不能被改變,我預計VM使用此信息,以它的優勢。
事實證明,測試在Chrome和Node上變慢,但在Firefox上略快(與按數字直接訪問相比)。
的代碼可以在這裏找到:http://jsperf.com/array-access-via-enum
下面是從節點的基準(對應於JSPerf測試):
fixed Number: 12ms
enum: 12ms
frozenEnum: 85ms
不V8只是尚未有一個偉大的實現,或者是有什麼這種方法對我的用例來說不是最理想的嗎?
看來V8的靜態代碼分析是相當不錯的,並且將列的枚舉訪問轉換爲固定數字。它不會使用'frozen'枚舉對象,因爲它被Object.freeze改變 - FF看起來更聰明。 – Bergi