Рассмотрение производительности Javascript. Точечный оператор быстрее, чем индексная запись?
Точечный оператор быстрее, чем индексная запись?
var obj = {x: '5'};
obj.x = 'some value';
obj['x'] = 'some value';
2 ответа
Ничего невероятного. Доступ к переменным window
или же eval
значительно медленнее, хотя.
Это может быть устаревшая информация, но это утверждение касается как минимум старых версий Safari. От О'Рейли, пишущего эффективный JavaScript:
Для большинства браузеров практически нет разницы между использованием точечной нотации для доступа к свойству объекта (data.count) и скобочной нотацией (data["count"]). Единственное исключение - Safari, где обозначение в скобках значительно медленнее, чем в точечной. Это справедливо даже для Safari 4 и более поздних версий, использующих движок Nitro JavaScript.
Похоже, http://jsperf.com/ был снесен - это говорит Website Disabled
, но используя встроенный движок WebKit из Qt4, похоже, что это утверждение верно, используя этот тест:
var t = new Date().getTime();
var x = { c: 123 };
for (var i = 0; i < 5000000; i++)
x['c'] += 2;
document.write(( new Date().getTime() - t ) + '; value ' + x.c);
var t = new Date().getTime();
var x = { c: 123 };
for (var i = 0; i < 5000000; i++)
x.c += 2;
document.write(( new Date().getTime() - t ) + '; value ' + x.c);
С помощью x['c']
заняло около 4 секунд, пока x.c
побежал около 3 секунд. Нынешние Firefox и Chrome, похоже, не делают различий между ними.