Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 哪个布尔值更快或1是如何编译的,是否有避免分支的技巧_Javascript_Arrays_Sorting_Optimization_Micro Optimization - Fatal编程技术网

Javascript 哪个布尔值更快或1是如何编译的,是否有避免分支的技巧

Javascript 哪个布尔值更快或1是如何编译的,是否有避免分支的技巧,javascript,arrays,sorting,optimization,micro-optimization,Javascript,Arrays,Sorting,Optimization,Micro Optimization,我正在做一些涉及在浏览器中处理大量数据的工作。因此,我正试图优化所有细节。我不需要任何人告诉我,我在浪费时间,或者过早优化是万恶之源 我只是想知道,如果有人了解JS是如何工作的,他是否知道小于布尔值的运行速度是否比小于等于布尔值的运行速度快。我的意思是: return (i<2? 0:1) 被解析并运行速度超过: return (i<=1? 0:1) 在这个例子中,我们假设i是一个整数。谢谢。我使用performance.now API和console.time API创建了一个

我正在做一些涉及在浏览器中处理大量数据的工作。因此,我正试图优化所有细节。我不需要任何人告诉我,我在浪费时间,或者过早优化是万恶之源

我只是想知道,如果有人了解JS是如何工作的,他是否知道小于布尔值的运行速度是否比小于等于布尔值的运行速度快。我的意思是:

return (i<2? 0:1)
被解析并运行速度超过:

return (i<=1? 0:1)

在这个例子中,我们假设i是一个整数。谢谢。

我使用performance.now API和console.time API创建了一个小提琴 这两个API都说明了执行函数/循环所花费的时间。 我觉得主要的区别在于结果,性能。现在给出了更精确的值,即高达1/1000毫秒

我没什么不同。可能会迭代更多,可能会给出不同的结果


希望这对您有所帮助。

我不会称之为微观优化,而是纳米优化。 案例如此相似,你很可能会有一个低于预期增益的测量精度

编辑 如果对该代码进行优化,生成的汇编代码将在x86中从JAE更改为JAE,并且它们使用相同的循环计数。00000%的变化。 如果不是,您可能会在选择引擎的时间内赢得一步

恼人的是,它让你错过了大局:除非我错了,否则你需要一个分支,如果你那么担心时间,你输入的统计分布会对执行时间产生更大的影响。但还是没有那么多

因此,退一步比较:

if (i<2) 
    return 0;
else 
    return 1;
您可以看到,对于100、20、10、1、50、10,1将分支更多,对于0、1、0、0、20、1、2分支更多。 这将带来更大的不同。。。这可能很难测量

作为留给读者的一个问题,我想知道return+i>1是如何编译的,是否有避免分支的技巧


顺便说一句,我并不反对早期优化,我甚至在这里发布了一些建议,如果您可能感兴趣的话:

JavaScript标准描述了评估这些表达式需要采取的步骤。您可以查看第12.9.3节

请注意,即使这两个操作的步骤略有不同,应用程序中的其他内容对性能的影响也比JavaScript中无法控制的这些简单操作大得多。例如垃圾收集器的工作,即时编译器


即使您尝试用JavaScript测量时间,这也不会起作用,因为仅仅测量时间戳对性能的影响要比您想要测量的实际表达式大得多。另外,您编写的代码可能不是真正经过评估的代码,因为在实际运行代码之前,引擎可能会进行一些预优化。

JSPerf已经停止运行将近一年了。在我的测试中,似乎“大于”的速度更快,但它往往会波动,因此我不能完全确定。你应该在测试用例中加入一些数字,并澄清你的问题不是一个是否比另一个快,而是为什么它更快。这取决于引擎如何实现它。你应该在你正在使用的环境中简单地分析你的代码。这几乎不可能是你在优化过程中关注的最好的事情,我会先看看你程序的更大结构。。您的应用程序是否也有后端?如果此代码经过优化,生成的汇编代码将在x86中从JAE更改为JAE,并且它们使用相同的循环计数。00000%的变化。我想知道return+I>1是怎么回事,因为这里似乎没有分支……哈哈,纳米优化
if (i<2) 
    return 0;
else 
    return 1;
if (i>=2) 
    return 1;
else 
    return 0;