哪一个更快,为什么? JavaScript的

时间:2015-02-18 00:25:51

标签: javascript performance logic

所以我的简单问题是: 在这种情况下,哪个是最佳解决方案(性能和内存方式):

一个。我们将变量处理成一个新变量并在我们需要的任何地方使用它:

    // imagine (a) is an incomming variable that
    // we can't change or else we will break something

    var a = "carrots";

    var b = a.substr(0,a.length-1);
    // and then use b everywhere 

B中。我们即时处理变量:

    // imagine (a) is an incomming variable that
    // we can't change or else we will break something

    var a = "carrots";

    // and then use "a.substr(0,a.length-1);" everywhere 

请问,这不是关于如何编写代码,而是关于哪一个更快更好。

您选择哪一个?为什么?

3 个答案:

答案 0 :(得分:2)

显然第一种方法更快。由于我们正在调用方法并访问属性,因此这比使用/访问结果字符串值的速度要慢。

不要误会我的意思,绝对数字似乎仍然是微观优化,但在这个宇宙和它的关系中,光速与火车相比。

顺便说一句,在ECMAscript中存储和缓存值的概念是非常常用的,并且是正确的(出于不同的原因,例如避免范围链和原型查找)。

答案 1 :(得分:0)

我同意jAndy。

第一个例子会更快。您正在将变量缓存到b中,因此您调用的函数只调用一次。在第二个示例中,每次要使用a.substr()时,都需要调用该函数。

因此,在第一个示例中,您将调用a.substr(0,a.length-1)一次并缓存要使用的结果。在示例2中,它将花费n倍的长度,其中n是您调用a.substr(0,a.length-1)的次数。

根据您的工作情况,可能没有明显的差异。但是,第一种方法在技术上更快。

另外,正如对jAndy的答案的评论所暗示的那样,它是更好的代码,因为你不需要重复调​​用a.substr(0,a.length-1),因为你可以只缓存它。 / p>

答案 2 :(得分:0)

同意jAndy。我只是想添加一个例子,并希望再给一个。

第一种方法要快得多。

每次调用substring时,我们都需要遍历字符串并创建一个新的子字符串对象,以后将对其进行操作。我们必须运行一个方法并创建一个新的子字符串,这显然更昂贵。

以这种方式思考。你可以做一些事情(费用与其他选项相同的数量,假设x)一次,或者在理论上无限时间做这个事情。您正在考虑x与无穷大的成本。

从理论上讲,你可能会在第二次占用较少的内存。 var b将在java中保存一些内存(取决于语言),一个字符串占用8个字节。这将持续到程序结束。相反,如果您每次创建一个值时进行子串,然后在不再使用它后再清理它。

这有意义吗?

我们创建var b并保持它直到程序关闭(不再需要)。或者我们可以创建一个变量a.substring但在不再需要它时将其删除。从技术上讲,根据程序的工作原理,如果你在整个过程中说出100个这样的内存,你可能会有更少的内存。但是,使用的内存可以忽略不计,并且垃圾收集不会经常发生(在正常情况下),实际上这是真实的/相关的。

内存节省可以忽略不计,时间复杂度相对较高。

例A远远优越。如果你能通过一次这样做完成它,你为什么在现实生活中会多次做同样的事情呢?

相关问题