函数和对象之间的差异,以及它如何影响性能
Differences between functions and objects, and how it affects performance
谁能阐明为什么下面显示的两个示例之间的内存占用似乎存在如此大的差异?我正在使用节点.js作为环境。
它们都产生相同的结果和映射
var util = require('util');
var startMem = process.memoryUsage().heapUsed;
/*
var test = function() {
var testvar = function() {
this.innerTest1 = function() {
this.someVal1 = "this is a test";
this.someFunc1 = function() {
return "this is another test";
}
}
this.innerTest2 = function() {
this.someVal2 = "this is a third test";
this.someFunc2 = function() {
return "this is a forth test";
}
}
}
}
*/
//out:
//mem: 448088
var test = function() {
var testvar = {
innerTest1 : {
someVal1 : "this is a test",
someFunc1 : function() {
return "this is another test"
}
},
innerTest2 : {
someVal2 : "this is a third test",
someFunc2 : function() {
return "this is a forth test"
}
}
}
}
for (var i = 0; i < 50000; i++) {
var testobj = new test();
}
//out:
//mem: 1060040
console.log("mem: " + (process.memoryUsage().heapUsed - startMem));
这两个代码片段具有完全不同的行为。
在第一个示例中,在调用包含函数之前,不会设置或创建属性/函数。但是,从不调用包含函数。
例如,给定:
this.innerTest1 = function() {
// the property is NOT SET until this function is run
this.someVal1 = "this is a test";
// this function is NOT CREATED until this function is run
this.someFunc1 = function() {
return "this is another test";
}
}
同样,这同样适用于分配给innerTest1
。因此,第一个示例代码等效于以下内容,这不是很有用。
var testvar = function() {}
(解析可以被视为一次性成本。
在后面的示例中,将分配每个属性,并创建每个函数作为对象文本计算的一部分。
在第一个示例中,函数仅在调用其父函数时才被延迟创建,但在第二个示例中,所有成员都初始化为对象文本的一部分。
如果你想减少内存占用,你应该利用原型链,这将允许你在多个实例之间共享函数。
基本上,而不是做:
function test() {
var testvar = {
someFn: function () {}
};
}
你可以做:
var base = {
someFn: function () {}
};
function test() {
var testvar = Object.create(base);
}
相关文章:
- NodeJ中的注释会影响性能吗
- javascript getAttribute是否会影响性能或触发布局
- 角度 1 路绑定不影响性能
- 数字精度如何影响 JavaScript 的性能,或者会影响性能
- 函数和对象之间的差异,以及它如何影响性能
- 打开的 APE(Ajax 推送引擎)通道的数量如何影响性能
- 对数组使用delete和后续的.push()会影响性能/内存消耗
- 使用两个或多个$(document).ready会影响性能吗
- 隐藏具有特定ID的元素的最佳方法是什么;不会影响性能
- 使用局部变量(而不是重复的属性访问)是否会影响性能
- id太多会影响性能吗
- 将多个事件处理程序绑定到滚动事件是否会影响性能
- 空try-catch如何影响性能
- 为DOM深处的元素设置动画真的会影响性能吗
- AngularJS -当模型变大时,调用$apply()会影响性能吗?
- 为循环条件缓存数组长度会影响性能吗?
- Angular JS HTML中相同表达式的数量会影响性能吗?
- “Interiting"From null对象似乎不会影响性能
- jQuery无限嵌套会影响性能吗?
- 递增未定义的对象属性而不影响性能