在函数中做未使用的参数会减慢 JavaScript 的执行速度
Do unused paramenters in functions slow down the execution of JavaScript?
javascript函数中使用未使用的参数会减慢执行速度吗?它会占用内存吗?我经常使用从未实际使用的参数编写函数,例如函数将事件作为参数,但该事件从未用于任何事情。
减慢执行速度?
运行时间取决于对输入执行的操作。可以是搜索或排序或任何简单的操作。操作的运行时间决定了其执行速度。因此,当您不传递任何参数时,这意味着不会对该参数执行任何操作,因此运行时间是稳定的。
它会占用内存吗?
但就内存分配而言,它们通常被分配一个词汇环境。
当函数运行时,在每次函数调用时,新的 创建并填充参数
LexicalEnvironment
, 变量和嵌套函数声明。
所以对于下面的函数:
function sayHi(name) {
/* LexicalEnvironment = { name: passedvalue,
phrase: undefined }*/ // created at this point.
var phrase = "Hi, " + name
alert(phrase)
}
因此,当您将其调用为 sayHi()
时,词汇环境如下所示:
LexicalEnvironment = { name: undefined, phrase: undefined};
因此,当解释器解释函数时,每个参数和函数变量都会被分配内存。
当解释器准备开始函数代码执行时, 在运行第一行之前,将创建一个空的词法环境 并填充了参数、局部变量和嵌套函数。
JavaScript 无论如何都会存储发送到 arguments
数组中每个函数的参数,无论您为它们分配局部变量。
function test() {
console.log(arguments)
}
test('these','are','passed')
//logs ["these','are',passed']
我的观点是,未使用的参数无论如何都会占用内存,您只是使用另一个变量名称引用它们。
在 JavaScript 函数中使用未使用的参数会减慢执行速度吗?
可能不是在现代引擎中(这是微不足道的死代码消除)。无论如何,在堆栈上分配变量很便宜。
它会占用内存吗?
至少有几个字节用于将函数的主体保存为字符串。
我经常使用从未实际使用的参数编写函数,例如函数将事件作为参数,但该事件从未用于任何事情。
您不应该在没有基准测试的情况下关心微优化。不要试图超越编译器,V8和SpiderMonkey在优化代码方面做得很好。
我对这个问题的一个子集感兴趣:生成未使用参数的代码是否经过评估? 我的用例是调试日志消息:当我将日志级别设置为低于"调试"的值时,保留调试代码是否会减慢我的脚本速度? 我在 https://jsperf.com/log-parameters/1 进行了基准测试以找出答案。 这表明代码已经过评估,并且确实减慢了脚本的速度。
测试说明
准备代码
Benchmark.prototype.setup = function() {
var generate_message = function() {
// Do some calculations to generate a dummy message.
var s = ''
for (var i = 1; i < 512; i++) {
var a = Math.random()
var b = Math.random()
s += String.fromCharCode(48 + Math.floor(128*a*b))
}
return s
}
var Log = {
level: 1, /* 1 = FATAL, 4 = DEBUG */
fatal: function(msg) {this.log(1, msg)},
debug: function(msg) {this.log(4, msg)},
log: function(lvl, msg) {
if (lvl <= this.level) {
if (typeof msg === 'function') msg = msg()
console.log([new Date(), lvl, msg].join('::'))
}
},
}
};
测试 1:始终评估
Log.debug(generate_message())
测试 2:有条件评估
Log.debug(generate_message)
结果
始终评估
36,047 ±1.45% 操作/秒
有条件评估
30,326,171 ±5.55% 操作/秒
- 录制速度javascript
- Javascript图像数组预加载速度和从内存中删除
- JavaScript 更改画布中球的速度
- 带有滚动事件的Javascript集翻译速度较慢
- 加载javascript和速度问题
- 使用javascript的半仪表/速度表动画
- Javascript属性访问速度:var.properties与var[“属性”]的区别
- 当我们使用JavaScript点击下一个或上一个按钮时,图像幻灯片播放计时器的速度会加快
- imacros javascript在抓取的一段时间内挂起或减慢速度
- Javascript滑块是't装载速度不够快
- Javascript数组排序速度受字符串长度的影响
- 如何使用jquery和javascript提高每次点击的标题速度
- JavaScript动画被上面的元素减慢了速度
- 鼠标速度 JavaScript 函数
- 通过书签加快加载外部javascript文件的速度
- 拥有多个 HTML 页面通常使用的单独 javascript 文件是否会加快页面加载速度
- 切换到全屏时 Javascript/jQuery 速度变慢
- Google Maps Javascript API V3 滚动响应速度低于简单的 Google 地图嵌入
- 从升级时Javascript速度较慢.NET 2.0到.NET 3.5
- 提高JavaScript速度