Значения свойств кэширования Javascript в переменные - PullRequest
2 голосов
/ 01 февраля 2012

У меня есть простой JSON-объект, доступный только для чтения, с несколькими свойствами. Интересно, стоит ли кэшировать его свойства в переменных?В настоящее время мы используем их как: jsonObject.somePropet y, я рассматриваю кеширование их в переменные, такие как: var somePropertyValue = jsonObject.somePropety; и использование этой переменной для всех будущих ссылок.

Ответы [ 2 ]

1 голос
/ 01 февраля 2012

Зависит от того, как вы оцениваете «ценность» в этом вопросе.

Кэширование свойств должно иметь некоторый теоретический прирост производительности при повторном использовании одного и того же свойства, но я сомневаюсь, что разница будет заметна для пользователя, если вы не выполняете много тысяч раз.

Кэширование свойств может сделать ваш код более привлекательным, например, если вы ссылаетесь на одно и то же свойство более чем пару раз в определенном блоке кода, вы можете кэшировать его в начале - особенно, если вы вложили объекты, подобные этому:

jsonObject.nestedObject.doSomething();
jsonObject.nestedObject.doAnotherThing();
alert(jsonObject.nestedObject.someProperty);

//compared with:
var nObj = jsonObject.nestedObject;
nObj.doSomething();
nObj.doAnotherThing();
alert(nObj);

Я считаю, что последнее легче набирать и легче читать (по крайней мере, было бы легче читать, если бы переменная nObj имела более осмысленное имя, но, очевидно, это просто общий пример).

Однако я бы не кэшировал свойства в глобальных переменных для использования во всем вашем коде. Сохранение глобальных значений до минимума почти всегда является хорошей идеей по нескольким причинам, в том числе во избежание коллизий при именовании с включенными библиотеками и во избежание трудно диагностируемых ошибок, когда несколько функций обновляют одну и ту же переменную. Просто кешируйте внутри отдельных функций, которые часто используют определенное свойство, и помните, что JS имеет function scope, а не block scope. (Если конкретная функция часто ссылается на определенное свойство, вы также можете рассмотреть возможность сделать это свойство аргументом функции для того же эффекта с (возможно) аккуратным кодом.)

P.S. В JavaScript нет объектов JSON, просто есть объекты.

0 голосов
/ 01 февраля 2012

Это действительно зависит от того, где хранится jsonObject и сколько шагов области действия (замыканий функций) от места его использования.

например. в приведенном ниже примере каждый раз, когда осуществляется доступ к jsonObject.prop, код проверяет переменные области действия 6 различных областей (включая глобальную область видимости), прежде чем находит jsonObject

var jsonObject = { ... };

(function() {
    (function() {
        (function() {
            (function() {
               (function() {
                    jsonObject.prop ...;
                    jsonObject.prop ...;
                })();
             })();
         })();
    })();
})();

Таким образом, если к свойству обращаются несколько раз в самой внутренней функции, имеет смысл сохранить локальную ссылку на него

var jsonObject = { ... };

(function() {
    (function() {
        (function() {
            (function() {
               (function() {
                    var prop = jsonObject.prop;
                })();
             })();
         })();
    })();
})();

Теперь (кроме первого доступа к свойству, чтобы записать его в переменную), ваш код должен выполнить намного меньше работы, чтобы найти значение.

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