频繁访问对象的属性时缓存是否良好'的属性
Is caching good when frequently accessing the property of an object's property?
假设我有以下代码:
var k;
for(k in obj){
if(obj.p1.p1.p1){
obj.p1.p1.p2 = obj.p1.p1.p3;
}
// ...
// more stuff with obj.p1.p1
// ...
}
如果我将obj.p1.p1
存储在这样的变量中,效果会更好吗?
var k, p;
for(k in obj){
p = obj.p1.p1;
if(p.p1){
p.p2 = p.p3;
}
// ...
}
通过这种方式,我减少了属性访问,但使用了更多的内存(我还有一个变量)。
哪种方式更好?这有什么不同吗?
理论上,从严格的性能角度来看,1将值保存到变量并使用该变量会更快。
在实践中,假设JavaScript引擎知道其他线程无法修改该值(例如,在浏览器和NodeJS上是这样),如果它变得对性能至关重要,那么一个像样的现代JavaScript引擎会尽可能为您做这件事。分析的程度可能因引擎而异,但它们现在几乎都很快。
从风格或维护的角度来看,它是否"更好"是一个意见问题,因此与so无关。
1 然而:即使它更快,也不太可能真正重要,因此从性能角度担心它可能是过早的微观优化。编写您认为最清晰的代码,并担心如果/当您有特定的性能问题需要解决时,哪一个更快。
相关文章:
- 检查对象的所有属性是否未定义
- 检查来自不同数组的两个元素的一个属性是否相等
- 正在检查属性的属性是否存在
- 在 Forerunner 数据库集合中创建主键时,key 属性是否可以位于集合对象的对象内部
- 使用 Chai - 如何检查对象属性是否包含 DOM 元素
- Ember 1.0 预发行版支持属性是否已更改
- VueJS:检查属性是否具有来自其他属性的值
- 创建nonce并将其输出为数据属性是否存在漏洞
- 检查数组中的对象属性是否与具有相同ID的另一个对象重复
- 如何在Ember.js中创建一个计算属性来查看单个EmberData属性是否脏
- Javascript-在检查对象属性是否存在时避免异步竞争条件
- 如何指定输入元素中允许的最大字符数 - 设置 maxlength 属性是否足够
- 如何检查主干模型中的嵌套属性是否已更改
- HTML 文本框值属性是否安全免受 XSS 攻击
- 在 HTML 定位点中指定“语言”属性是否会更改事件行为
- 在灯泡阶段检查对象属性是否存在
- 给定元素本身的 aria-live 属性是否可以使用 javascript 动态设置
- 立即调用的属性是否可以引用它所分配到的对象
- 检查 css 属性是否应用了 !重要属性
- 检查数据属性是否具有值