如何提高JavaScript的效率?

如何提高JavaScript的效率?,javascript,performance,Javascript,Performance,我熟悉JavaScript的基础知识,但我正在努力提高代码的效率。为了练习,我制作了一个生成斐波那契序列的程序。这是我的JavaScript代码: let currentDigit = 1; let lastDigit = 0; let text = document.getElementById('numbers'); for (i = 0; i<=30; i++) { let temp = currentDigit; text.innerHTML += " " +

我熟悉JavaScript的基础知识,但我正在努力提高代码的效率。为了练习,我制作了一个生成斐波那契序列的程序。这是我的JavaScript代码:

let currentDigit = 1;
let lastDigit = 0;
let text = document.getElementById('numbers');


for (i = 0; i<=30; i++) {
    let temp = currentDigit;
    text.innerHTML += " " + currentDigit;
    if(i !== 30) {
        text.innerHTML += ","
    }
    currentDigit += lastDigit;
    lastDigit = temp;
}
让currentDigit=1;
设lastDigit=0;
让text=document.getElementById('numbers');
对于(i=0;i(有关更有效的方法,请参见更新)

虽然这不一定更快,但它确实允许分离关注点,而且绝对是一种更干净的方法。即,使用:

函数*fibonacci(长度,curr=1,last=0){
for(设i=0;i

这是您的代码的优化版本,具体取决于您正在运行的引擎中对分解分配的优化程度

let a = 0;
let b = 1;
text.append(" ", Array.from(Array(31), () => [a,b] = [b,a+b], a).join(", "));
让currentDigit=1;
设lastDigit=0;
让text=document.getElementById('numbers');
对于(i=0;i([a,b]=[b,a+b],a)).join(“,”)
您的版本:

新版本:
不附加到innerHTML;这会使浏览器重新解析。@将来,请不要使用代码复查作为结束问题的理由。评估请求并使用一个理由,比如过于宽泛,主要是基于意见的,等等。然后你可以向OP提到,如果是,它可以发布在代码审查上。请参阅本节中的“不应该做什么”一节,因为它更适合于代码审查,这本身并不会使它偏离主题。例如const fibonacci=(n0,n1)=>()=>n1=n0+(n0=n1);Array.from({length:30},fibonacci(0,1)).join(',')
?如何
text.textContent+=…
?@le_m仍然会导致重新解析,尽管这确实可以防止某些类型的XSS攻击,与
innerHTML
的用法不同。只需查找它:设置
textContent
会根据-将元素中的所有节点替换为一个新的文本节点,因此它可能同样快,但我从未测试过它。@le\m这是设置,不是连接。i、 e.
=
与ES6中的
+=
@DR01D相比,
{length}
{length:length}
的对象文字速记,因为变量名与在文字中分配给它的属性相匹配。
Array.from(Array(31),…)
Array.from({length:31},…)之间的任何显著差异
?@le_m:Nah,这两个对象都将被丢弃,都是稀疏的,而且从一开始就存在,因此可能会得到高度优化。