gpt4 book ai didi

javascript - 如何优化javascript中的代码

转载 作者:行者123 更新时间:2023-12-03 17:03:29 25 4
gpt4 key购买 nike

我认为(下面的)代码已经过优化(只是使用的变量比我的相同逻辑的初始版本少)。

  1. 我如何真正知道它是否经过适当优化?

  2. 优化时应该考虑哪些因素?

这是代码( also on jsfiddle )

function process(arr){
var processed = [];
for(var i=0,len=arr.length;i<len;i++){
if(processed.indexOf(arr[i]) < 0){
var nodes = findIndexes(arr,arr[i]);
if(nodes.length > 1){
for(var j=0,jlen=nodes.length;j<jlen;j++){
arr[nodes[j]] = arr[nodes[j]] + '(' + ( j + 1 ) + ')';
}
}
processed.push(arr[i]);
}
}
return arr;
}

function findIndexes(arr,val){
var node = [];
for(var i=0,len=arr.length;i<len;i++){
if(arr[i] === val){
node.push(i);
}
}
return node;
}

// input
var arr = ['aa','bb','bb','aa','cc','dd','cc','ff']

console.log(process(arr));
//output: ["aa(1)", "bb(1)", "bb(2)", "aa(2)", "cc(1)", "dd", "cc(2)", "ff"]


下面是代码的解释。 'process' 函数在数组中查找相同的值,对于每个相同的值,它通过将一个数字发布到该值来更改值,“数字”表示它在数组中找到的值的计数。
例如arr = ["x","x","y","z"] 将返回 ["x(1)","x(2)","y","z"] “y”和“z”不变,因为它们只出现过一次。

为了优化,我使用了一个名为 processed 的数组,用于保存刚刚在 main for 循环中处理的值,因此在下一次迭代中可以确定新的迭代值已经被处理或不是通过检查 array.indexOf 方法,如果值已经被处理,那么它可以安全地跳过底层逻辑(if/for 语句)。

现在除了改变整个流程逻辑之外,我不知道如何进一步优化它。

最佳答案

广义上的优化将涉及简化代码、预先计算重复使用的结果以及组织代码以便可以重复使用更多结果。

您的 fiddle 代码产生了以下分析结果。

Logical LOC: 26
Mean parameter count: 3
Cyclomatic complexity: 7
Cyclomatic complexity density: 27%
Maintainability index: 104

代码行数 (LOC) – 表示代码中的大概行数。该计数基于 IL 代码,因此不是源代码文件中的确切行数。非常高的计数可能表明类型或方法试图做太多工作,应该拆分。它还可能表明该类型或方法可能难以维护。

可维护性指数 – 计算 0 到 100 之间的指数值,表示维护代码的相对难易程度。高值意味着更好的可维护性。颜色编码的评级可用于快速识别代码中的问题点。绿色评级在 20 到 100 之间,表示代码具有良好的可维护性。黄色等级介于 10 和 19 之间,表示代码的可维护性一般。红色评级是 0 到 9 之间的评级,表示可维护性低。

圈复杂度 – 衡量代码的结构复杂度。它是通过计算程序流程中不同代码路径的数量来创建的。具有复杂控制流的程序将需要更多测试才能实现良好的代码覆盖率,并且可维护性较差。

使用 online tool 检查代码复杂性用于您的 JavaScript 代码。

引用:Link1 , Link 2

Javascript optimiser page

Reference (为您提供优化时应牢记的不同技术)

关于javascript - 如何优化javascript中的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30505651/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com