Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript将属性值缓存到变量中_Javascript_Json_Performance_Caching - Fatal编程技术网

Javascript将属性值缓存到变量中

Javascript将属性值缓存到变量中,javascript,json,performance,caching,Javascript,Json,Performance,Caching,我有一个简单的只读JSON对象,带有一些属性,我想知道是否值得将其属性缓存到变量中?目前我们使用它们,比如:jsonObject.somePropertyy,我正在考虑将它们缓存到变量中,比如:var somePropertyValue=jsonObject.someProperty并将该变量用于所有未来参考。取决于您如何判断该问题的“价值” 如果重复使用相同的属性,缓存属性在理论上应该会有一些性能提升,但我怀疑用户是否会注意到这种差异,除非你循环了数千次 但是,缓存属性可以使代码更漂亮,例如,

我有一个简单的只读JSON对象,带有一些属性,我想知道是否值得将其属性缓存到变量中?目前我们使用它们,比如:
jsonObject.someProperty
y,我正在考虑将它们缓存到变量中,比如:
var somePropertyValue=jsonObject.someProperty并将该变量用于所有未来参考。

取决于您如何判断该问题的“价值”

如果重复使用相同的属性,缓存属性在理论上应该会有一些性能提升,但我怀疑用户是否会注意到这种差异,除非你循环了数千次

但是,缓存属性可以使代码更漂亮,例如,如果在特定代码块中多次引用同一属性,则可以在开始时对其进行缓存,特别是如果您有如下嵌套对象:

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

//compared with:
var nObj = jsonObject.nestedObject;
nObj.doSomething();
nObj.doAnotherThing();
alert(nObj);
我发现后者更容易输入和读取(至少,如果变量
nObj
有一个更有意义的名称,那么读取起来会更容易,但显然这只是一个通用示例)

但是,我不会将属性缓存在全局变量中,以便在所有代码中使用。出于几个原因,将全局变量保持在最小值几乎总是一个好主意,包括避免在命名时与包含的库发生冲突,以及避免在多个函数更新同一变量时难以诊断的错误。只需在碰巧需要经常使用特定属性的单个函数中进行缓存,记住JS具有函数作用域而不是块作用域。(当一个特定的函数引用了一个特定的属性时,您也可以考虑将该属性作为函数的一个参数,以与(可论证的)嵌套代码相同的效果。”
另一方面,JavaScript没有JSON对象,它只有对象。

这实际上取决于jsonObject的存储位置,以及距离使用它的位置有多少范围步骤(函数闭包)

e、 g.在下面的示例中,每次访问jsonObject.prop时,代码都会在找到jsonObject之前检查6个不同作用域(包括全局作用域)的作用域变量

var jsonObject = { ... };

(function() {
    (function() {
        (function() {
            (function() {
               (function() {
                    jsonObject.prop ...;
                    jsonObject.prop ...;
                })();
             })();
         })();
    })();
})();
因此,如果在最内部的函数中多次访问该属性,则保存对该属性的本地引用是有意义的

var jsonObject = { ... };

(function() {
    (function() {
        (function() {
            (function() {
               (function() {
                    var prop = jsonObject.prop;
                })();
             })();
         })();
    })();
})();
现在(除了第一次访问属性以将其写入变量之外),代码需要做的工作要少得多才能找到值