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