Рассмотрение производительности Javascript. Точечный оператор быстрее, чем индексная запись? - PullRequest
5 голосов
/ 03 сентября 2011

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

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

Ответы [ 2 ]

6 голосов
/ 03 сентября 2011

Ничего невероятного.При этом переменные на window или eval значительно медленнее.

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

3 голосов
/ 22 июня 2015

Возможно, это устаревшая информация, но это утверждение касается как минимум старых версий Safari. Из написания эффективного JavaScript от O'Reilly :

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...