Рассмотрение производительности Javascript. Точечный оператор быстрее, чем индексная запись?

Точечный оператор быстрее, чем индексная запись?

var obj = {x: '5'};
obj.x = 'some value';
obj['x'] = 'some value';

2 ответа

Решение

Ничего невероятного. Доступ к переменным window или же eval значительно медленнее, хотя.

http://jsperf.com/dot-vs-square-bracket/5

Это может быть устаревшая информация, но это утверждение касается как минимум старых версий 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, похоже, не делают различий между ними.

Другие вопросы по тегам