javascript var语句和性能
javascript var statement and performance
选项1:无赋值的多变量
function MyFunction() {
var a = null;
var b = null;
....
var z = null;
a = SomeValue;
b = SomeValue2;
....
}
选项2:一个var语句,无赋值
function MyFunction() {
var a, b ..., z;
a = SomeValue;
b = SomeValue2;
....
}
选项3:带有赋值的多个var语句
function MyFunction() {
var a = SomeValue;
var b = SomeValue2;
....
var z = SomeValue26;
}
使用特定选项是否有任何性能优势?两个基元类型赋值AND
对象引用赋值都是这样吗?
感谢您的意见。
"过早优化是万恶"
我认为这些选项中的任何一个都不会有任何显著的性能变化
(IMO)第三个选项是最可读的选项,最接近动态内存分配,如C#
等。但这是我的浅见,选择你最喜欢的
如果真的让你感到困扰,并且你无法在没有答案的情况下入睡,请使用jsPerf进行测试。
@乍得做了一个jsPerf,所以你今晚可以睡得很好。。。
要了解性能,首先应该了解吊装。让我们取以下代码:
var x = 1;
function bar(val) {
var returnVal = val * 2;
return returnVal;
}
function foo(val) {
var returnVal = 10;
returnVal *= bar(val);
return returnVal;
}
var y = foo(x);
console.log(y); // 20
提升基本上意味着JavaScript解释器将把变量声明"提升"到其作用域的顶部。让这个例子看起来更像这样:
var x, y;
x = 1;
function bar(val) {
var returnVal;
returnVal = val * 2;
return returnVal;
}
function foo(val) {
var returnVal;
returnVal = 10;
returnVal *= bar(val);
return returnVal;
}
y = foo(x);
console.log(y); // 20
所以,在你给出的例子中,选项2和3基本上会做同样的事情。因为解释器会将这些声明移到顶部。在这一点上,这是一个偏好的决定。很多人避免做类似var x, y, z;
的事情,说这很危险。I、 就我个人而言,这样做吧。无论我在哪个范围内,我都会在顶部声明所有变量,然后在下面使用它们。但无论哪种方式都有效。
现在,你的第一个例子是效率最低的。吊装后,它将看起来像这样:
function MyFunction() {
var a, b, ... z;
a = null;
b = null;
...
z = null;
a = someValue;
b = someValue2;
...
z = someValueN;
}
它基本上导致设置变量两次。
在Chrome中,执行时间是相同的。
这里唯一真正需要考虑的是优化网络传输。
考虑var a=1;var b=2;...;var z=9;
与var a=1,b=2,...,z=9;
如果在每个标识符前面放一个;var
,则为5个字节(假设为单字节字符编码),而,
为1个字节。因此,通过声明26个变量,您可以通过一次写入var
并用逗号列出标识符来节省100个字节。
诚然,这并不是一个巨大的节省,但在网络上推送比特时,每个字节都有帮助。这并不需要太担心,但如果您发现自己在同一个区域中声明了几个变量,那么使用变量声明列表是从JS文件中删除几个字节的简单方法。
这似乎是过早的优化,是万恶之源。
它将被执行多少次?这将消耗整个程序的哪一部分?
我将用几个问题来回答您关于性能的问题:
- 你注意到性能问题了吗
- 您是否确定您的var语句是瓶颈
- 你测试过每个版本吗
我假设所有这些问题的答案都是否。
这些选项都不应该有任何显著的区别,尽管唯一可以确定的方法是运行它们并进行测试。JavaScript是一种异步客户端语言,这意味着你必须运行大量的代码才能使var
语句成为任何类型的瓶颈
最后,如果您正在决定使用哪个版本,我建议您使用一个没有赋值的var
语句:
function () {
var a,
b,
c,
foo,
bar,
fizz,
buzz;
a = 1;
...
b = 3;
}
原因是,由于可变提升,代码将以这种方式执行。然后,我可以将initialize语句移动到第一次使用变量的位置,例如在for
循环中:
function foo(arr) {
var i,
l;
...
for (i = 0, l = arr.length; i < l; i++) {
doStuff(arr[i]);
}
...
}
它们基本上都做相同的事情:声明一个变量并最终定义它(为它赋值)。在整个示例中,您唯一要更改的是发生这种情况的顺序,甚至这取决于编译JavaScript的浏览器——有些浏览器可能会执行其他浏览器没有执行的优化。
不过,你应该遵循一些风格准则,这个答案很好地解释了这些准则。请记住,这个答案与技术无关,可能根本不适用于JavaScript。
尽可能远离选项1,不需要进行两次赋值。
甚至在for循环或其他复合语句/块中声明的变量也将在其包含块之外可用。
你也可以做:
function MyFunction() {
var a = SomeValue, b = SomeVavlue2;
}
- 可以't让我的if语句处理js中的html表单输入
- 函数参数中的数据与指定变量之间的任何性能差异
- 提高JQuery的性能
- 如何在ReactJS JSX中执行嵌套的if-else语句
- 自动修复”;语句前缺少分号“;
- 使用正则表达式评估电子邮件地址时出现性能问题
- React:按键的性能提升
- 在Three.js中导出网格会提高性能吗
- 如何在 API 调用后和 if 语句中启用提交按钮
- 是“;x==a||b”;以及“;x==a||x==b”;JavaScript中的等效语句
- 带有多个elseif的Javascript if语句
- 在javascript中搜索项目列表的性能
- 性能效率..Javascript中的条件语句与逻辑表达式
- javascript var语句和性能
- Javascript性能,条件语句与赋值运算符
- Javascript语句vs条件和语句性能
- Javascript中不同If语句版本的性能
- 与javascript中的一堆if()else if()相比,使用switch语句是否有任何性能提升
- 性能vs可读性:jQuery/JS中的多个选择器vs多个语句
- 使用单个或多个var语句声明变量.性能明智